前言
常见的信创环境是麒麟操作系统,使用的ARM架构
服务器信息
查看服务器架构
1 | uname -m |
- 如果输出是
x86_64
,则表示服务器是 x86 架构。 - 如果输出是
aarch64
,则表示服务器是 ARM 架构(ARM 64位)。 - 如果输出是
armv7l
,则表示服务器是 ARM 架构(ARM 32位)。
系统版本
1 | cat /etc/redhat-release |
查看磁盘是否都挂载
1 | lsblk |
镜像设置
一定要注意是arm版的镜像地址。
备份配置文件:
1 | cp -a /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak |
下载
1 | wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.huaweicloud.com/repository/conf/CentOS-AltArch-7.repo |
刷新缓存
1 | yum clean all |
配置时间同步
chrony
卸载
1 | yum remove -y chrony |
安装chrony(时间同步客户端)
Centos/redhat/alios:
1 | yum install -y chrony |
打开/etc/chrony.conf,新增一行
1 | vim /etc/chrony.conf |
添加
1 | server ntp.aliyun.com iburst |
重启chrony
1 | systemctl restart chronyd |
查看同步源是否可达
1 | chronyc sources |
Reach
:表示服务器的可达性(8 进制),377
表示完全可达。
手动触发同步
1 | chronyc -a makestep |
查看是否正常
1 | chronyc tracking |
或
1 | date |
开机启动
CentOS7
1 | systemctl enable chronyd.service |
ntp
查看是否安装
1 | ntpd --version |
安装
1 | yum install -y ntp |
装完成后,进入ntp服务的配置文件,一般位于/etc/ntp.conf
。使用文本编辑器打开该文件:
1 | vi /etc/ntp.conf |
将服务器地址添加到配置文件中,在文件最后添加以下内容:
1 | server 0.pool.ntp.org |
重启ntp服务,使配置的修改生效:
1 | systemctl restart ntpd |
查看服务状态
1 | systemctl status ntpd |
开机启动
1 | systemctl enable ntpd |
查看时间
1 | date |
查看硬件时钟
1 | hwclock |
查看同步服务器状态
1 | ntpq -p |
查看同步状态
1 | ntpstat |
如果不同步查找原因
1 | ping 0.pool.ntp.org |
查看日志
1 | sudo journalctl -u ntpd |
手动同步时间
1 | date -s "2024-11-06 10:35:10" |
Nginx安装与配置
安装
下载
1 | wget https://nginx.org/download/nginx-1.22.0.tar.gz |
安装依赖
1 | yum install -y pcre pcre-devel zlib zlib-devel gcc-c++ openssl openssl-devel |
解压
1 | tar -zxvf nginx-1.22.0.tar.gz |
编译安装
1 | ./configure |
查找安装路径
1 | whereis nginx |
查看配置信息
1 | cd /usr/local/nginx/sbin |
添加软连接
1 | sudo ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx |
这时就可以这样检测了
1 | nginx -t |
注册服务
在 Linux 上,将 Nginx 配置为一个服务以便它可以作为系统服务启动、停止和管理,通常需要创建一个 systemd 服务文件。
以下是如何为编译安装的 Nginx 创建一个 systemd 服务文件的步骤:
1. 创建 Nginx 服务文件
在 /etc/systemd/system/
目录下创建一个新的服务文件,例如 nginx.service
:
1 | sudo vi /etc/systemd/system/nginx.service |
2. 编辑服务文件内容
将以下内容粘贴到 nginx.service
文件中。
注意,根据你的 Nginx 安装路径调整 ExecStart
和 ExecReload
的路径。
1 | [Unit] |
3. 启用并启动 Nginx 服务
保存并关闭文件后,使用以下命令重新加载 systemd 配置,启动 Nginx 服务,并设置开机自启动:
1 | sudo systemctl daemon-reload |
4. 检查服务状态
你可以使用以下命令检查 Nginx 服务的状态:
1 | sudo systemctl status nginx |
5. 常用操作
启动服务:
1 | sudo systemctl start nginx |
停止服务:
1 | sudo systemctl stop nginx |
重启服务:
1 | sudo systemctl restart nginx |
重新加载配置:
1 | sudo systemctl reload nginx |
查看服务日志:
1 | sudo journalctl -u nginx |
添加配置
1 | cd /usr/local/nginx/conf |
修改根配置
1 | vi nginx.conf |
http内,server同级添加
1 | include /etc/nginx/conf.d/*.conf; |
创建目录
1 | mkdir -p /etc/nginx/conf.d/ |
添加配置
_school81.xhkjedu.com.conf
1 | server { |
重启Nginx
1 | cd /usr/local/nginx |
毕昇JDK(ARM)
毕昇JDK是华为内部基于OpenJDK定制的Huawei JDK的开源版本。
Huawei JDK运行在华为内部500多个产品上,研发团队积累了丰富的开发经验,解决了业务实际运行中遇到的多个疑难问题。
毕昇JDK作为OpenJDK的下游,是一款高性能、可用于生产环境的OpenJDK发行版。毕昇JDK对华为内部应用场景中遇到的一些性能问题和稳定性问题进行了修复,并在ARM架构上进行了性能优化和稳定性增强,在ARM架构上更稳定,在大数据等场景下可以获得更好的性能。
毕昇JDK致力于为JAVA开发者提供一款稳定可靠、高性能、易调测的JDK,也为用户在ARM架构上提供一个更好的选择。
https://www.openeuler.org/zh/other/projects/bishengjdk/
下载
arm
1 | wget https://mirrors.huaweicloud.com/kunpeng/archive/compiler/bisheng_jdk/bisheng-jdk-8u422-linux-aarch64.tar.gz |
解压
1 | sudo mkdir /usr/local/jdk/ |
打开文件
1 | sudo vi /etc/profile |
添加
1 | export JAVA_HOME=/usr/local/jdk/bisheng-jdk1.8.0_422 |
生效
1 | source /etc/profile |
测试
1 | java -version |
数据库-PolarDB
https://openpolardb.com/document?type=PolarDB-X
集中式部署
这里只是为了体验,采用集中式部署
安装
下载地址
https://github.com/polardb/polardbx-engine/releases/
通过百度网盘分享的文件:t-polardbx-engine-2.4.0-a6d7022.el7…
链接:https://pan.baidu.com/s/1jQYsHe_Xnv1tUiOCKjkhbw?pwd=psvm
提取码:psvm
安装
1 | yum install -y t-polardbx-engine-2.4.0-a6d7022.el7.aarch64.rpm |
安装后的二进制文件,会出现在 /opt/polardbx_engine/bin
中,推荐确认一下该目录已经包含 mysqld 文件。
1 | cd /opt/polardbx_engine/bin |
配置及启动
配置及启动
创建 polarx 用户(您也可以使用其他非 root 用户),准备一份 my.cnf(参考模板)和数据目录(如果改了 my.cnf,则下面的目录也要相应修改),就可以准备启动了。
1 | # 创建并切换到 polarx 用户 |
稍等片刻,即可登录数据库。
查看是否启动
1 | lsof -i:4886 |
在 Leader 节点上执行下面的命令,可以看到整个集群的状态。
我们用的集中式部署,可以看到集群只有1台,并且它是Leader
。
1 | SELECT * FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_GLOBAL; |
配置文件
创建日志目录
1 | mkdir /home/polarx/polardbx-engine/log |
编辑配置文件
1 | vi /home/polarx/polardbx-engine/my.cnf |
my.cnf
1 | [mysqld] |
其中新增了如下的配置
1 | [mysqld] |
其中
基本配置
max_connections=1000
:设置 MySQL 允许的最大连接数为 1000。这意味着最多可以同时有 1000 个客户端连接到 MySQL 服务器。max_allowed_packet=256M
:设置 MySQL 服务器允许的最大数据包大小为 256MB。这一配置决定了单个 SQL 语句、数据行或结果集允许的最大字节数。lower_case_table_names=1
:表名不区分大小写。sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
:放宽了SQL限制,在SQL报错时配置。default_authentication_plugin=mysql_native_password
:使用旧版本默认的身份验证机制,兼容性更好。
字符集配置
1 | [mysqld] |
性能优化配置
1 | innodb_flush_log_at_trx_commit=2 |
作用
- innodb_flush_log_at_trx_commit=2
- 作用:此设置控制事务日志的刷新策略。值为 2 表示每次事务提交时,日志只会写到日志文件,而不会立即刷新到磁盘。这提高了性能,但在崩溃情况下可能会丢失最近的部分事务。
- 用途:适合性能要求较高的场景,但要注意可能的数据丢失风险。
- sort_buffer_size=4M
- 作用:这个参数指定每个线程用于排序操作的缓冲区大小,默认设置为 4MB。在执行
ORDER BY
或GROUP BY
查询时,MySQL 会使用这个缓冲区。 - 用途:增大该值可以提高大型数据集的排序效率,特别是在频繁进行排序操作时。需要根据实际需求和系统内存来调整该值。
- thread_cache_size=128
- 作用:控制 MySQL 为新连接缓存的线程数量。该设置表明最多可以缓存 128 条线程。如果当前活跃线程少于这个数量,MySQL 将重用这些线程,而不是每次都创建新线程。
- 用途:提高连接处理的效率,减少频繁创建和销毁线程的开销,适合高并发的应用场景。
- innodb_buffer_pool_size=5000M
- 作用:指定 InnoDB 存储引擎用于缓冲数据和索引的内存池大小,总共 5000MB(5GB)。这是提升 InnoDB 表性能的关键参数。
- 用途:一个较大的缓冲池可以显著提高读写性能,能够缓存更多的数据和索引,从而减少磁盘 I/O。recommended to set this value to approximately 70-80% of your available memory if the server is dedicated to MySQL.
- group_concat_max_len=102400
- 作用:该参数定义了
GROUP_CONCAT
函数返回的最大长度,设置为 102400 字节。如果结果超过该值,将会被截断。 - 用途:适合需要处理大数据量结果的查询,增加这个值可以避免在拼接字符串时信息丢失。
表名不区分大小写
1 | SHOW VARIABLES LIKE 'lower_case_table_names'; |
值
0
: 表名是区分大小写的。在 Linux 系统上,默认使用此设置。1
: 表名不区分大小写。通常在 Windows 系统上使用。2
: 表名是区分大小写的,但在网站服务器上访问时隐式转换为小写。
配置文件中添加
1 | lower_case_table_names=1 |
sql-mode
Expression #3 of ORDER BY clause is not in SELECT list, references column ‘ireciting_base.m.create_time’ which is not in SELECT list; this is incompatible with DISTINCT
原因
DISTINCT去重关键字版本不兼容(字面意思), 其实修改以下配置文件,去掉sqlmode
中的ONLY_FULL_GROUP_BY
模式即可
解决办法
mysql配置文件添加如下代码
1 | [mysqld] |
sql_mode
变量用于控制数据库的行为,尤其是在数据验证和执行 SQL 语句时。你提到的 sql_mode
包含多个选项,它们的具体作用如下:
- STRICT_TRANS_TABLES
- 作用:在事务表(例如使用 InnoDB 存储引擎的表)中,如果出现不合法的插入,MySQL 将返回错误,而不是默默地将数据插入为
NULL
或默认值。这意味着如果你试图向表中插入无效的数据,MySQL 将停止执行并给出错误提示。 - 用途:帮助维护数据的完整性,使得应用程序能够更早地捕捉到数据问题。
- NO_ZERO_IN_DATE
- 作用:禁止在日期字段中使用零值。例如,
'2024-00-01'
(月份为零)将被视为无效,插入将失败。 - 用途:确保日期数据的有效性,防止不合法的日期插入数据库。
- NO_ZERO_DATE
- 作用:禁止使用‘0000-00-00’作为日期值。如果试图插入或更新为此值,MySQL 会返回错误。
- 用途:确保插入的日期数据是有效的,防止使用零日期占位符。
- ERROR_FOR_DIVISION_BY_ZERO
- 作用:当发生除以零的操作时,MySQL 将返回错误,而不是将结果返回为
NULL
或其他值。 - 用途:在执行 SQL 查询计算时,避免由于除以零导致的不准确结果,从而更容易发现潜在的逻辑错误。
- NO_ENGINE_SUBSTITUTION
- 作用:如果指定的存储引擎在创建表时不可用,MySQL 将返回错误,而不是用默认存储引擎(如 InnoDB)替代它。
- 用途:确保使用的存储引擎是用户期望的,避免意外地使用其他引擎。
重启
以下是通过 mysqld_safe
启动的 PolarDB-X 实例重启的步骤:
- 找到正在运行的 MySQL 实例进程
首先,你需要找到 PolarDB-X 服务的进程 ID (PID):
1 | ps aux | grep /opt/polardbx_engine/bin/mysqld |
这条命令会列出所有与 mysqld
相关的进程。
结束的先后顺序
1 | /opt/polardbx_engine/bin/mysqld_safe |
- 停止 PolarDB-X 实例
使用 kill
命令停止该进程:
1 | sudo kill -TERM <PID> |
sudo kill -TERM
命令中,-TERM
实际上是 -15
的别名,用于向进程发送一个终止信号(SIGTERM)。
这是一个请求进程优雅地终止的信号,它允许进程清理资源并进行正常的关闭。
或者,若需要强制终止进程,可以使用:
1 | sudo kill -9 <PID> |
- 确认进程已停止
1 | lsof -i:4886 |
- 启动 PolarDB-X 实例
使用原来的启动命令重新启动 PolarDB-X 实例:
1 | /opt/polardbx_engine/bin/mysqld_safe --defaults-file=my.cnf & |
- 检查服务状态
你可以通过以下命令检查 PolarDB-X 实例是否成功启动:
1 | lsof -i:4886 |
如果启动失败可以查看日志:
1 | tail -f /home/polarx/polardbx-engine/log/alert.log |
登录
PolarDB没有客户端,因为兼容Mysql,我们可以使用MySQL的客户端进行连接
添加源
1 | sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm |
安装客户端
1 | sudo yum update |
登录
1 | mysql -h127.0.0.1 -P4886 -uroot |
修改
查看用户
1 | SELECT User, Host,authentication_string FROM mysql.user; |
添加远程root用户
1 | CREATE USER 'root'@'%' IDENTIFIED BY 'Xhkjedud07'; |
修改密码
1 | alter user 'root'@'%' identified by "Xhkjedud07_2"; |
修改本地root密码
1 | alter user root@localhost identified by "Xhkjedud07"; |
如果想清空本地root的密码
1 | alter user root@localhost identified by ""; |
重装
默认安装后,表名是区分大小写的,这时候修改配置不区分大小写会失败,所以这里只能重装。
首先,你需要找到 PolarDB-X 服务的进程 ID (PID):
1 | ps aux | grep mysqld |
这条命令会列出所有与 mysqld
相关的进程。记下你认为是 PolarDB-X 实例的 PID。
注意进程的用户是polarx
停止 PolarDB-X 实例
使用 kill
命令停止该进程:
1 | sudo kill -TERM <PID> |
结束的先后顺序
1 | /opt/polardbx_engine/bin/mysqld_safe |
查看是否停止
1 | lsof -i:4886 |
删除之前的数据
1 | rm -rf /opt/polardbx_engine |
然后再按上面重新安装即可
Redis
安装
1 | yum install -y epel-release |
启动
1 | service redis start |
设置开机自启
1 | chkconfig redis on |
查看运行状态
1 | ps -ef | grep redis |
允许远程连接
yum方式安装的redis配置文件通常在/etc/redis.conf
中,打开配置文件找到
1 | vi /etc/redis.conf |
注释bind 127.0.0.1
就可以远程访问 如下
1 | bind 127.0.0.1 |
改为
1 | # bind 127.0.0.1 |
Redis3.2之后还要修改protected-mode
默认的yes
改为no
第80行:
1 | protected-mode no |
重启
1 | service redis restart |
设置连接密码
yum方式安装的redis配置文件通常在/etc/redis.conf
中,打开配置文件找到
1 | vim /etc/redis.conf |
找到 480行
1 | #requirepass foobared |
去掉行前的注释,并修改密码为所需的密码,保存文件
1 | requirepass myRedis |
重启redis
1 | service redis restart |
带密码连接
1 | redis-cli -h 127.0.0.1 -p 6379 -a myRedis |
RabbitMQ
安装
1 | yum install -y rabbitmq-server |
启动
1 | systemctl start rabbitmq-server |
查看版本
1 | rpm -q rabbitmq-server |
状态
1 | systemctl status rabbitmq-server |
可以看到
打开这个文件
1 | vi /var/log/rabbitmq/rabbit@dc6-80-564.log |
可以看到
config file(s) : /etc/rabbitmq/rabbitmq.config
打开配置文件
1 | vi /etc/rabbitmq/rabbitmq.config |
编辑内容如下:
1 | [{rabbit, [{loopback_users, []}]}]. |
这里的意思是开放使用
默认创建的用户guest,密码也是guest。
该用户不能用于远程登录,可用于管理UI的登录。
登录后能添加账号后删除guest账号。
保存配置后重启服务:
1 | systemctl restart rabbitmq-server |
开放5672端口:
1 | firewall-cmd --zone=public --add-port=5672/tcp --permanent |
开机启动
1 | systemctl enable rabbitmq-server |
查看
1 | systemctl list-units --type=service | grep mq |
开启管理UI:
1 | rabbitmq-plugins enable rabbitmq_management |
添加防火墙规则
1 | firewall-cmd --zone=public --add-port=15672/tcp --permanent |
就可以通过http://ip:15672
访问管理页面
添加用户后要设置权限
远程测试
1 | nc -zv 10.208.175.82 5672 |
Tomcat
自己安装Tomcat8
下载安装
https://archive.apache.org/dist/tomcat/tomcat-8/
这里使用8.5.99版本
https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.99/bin/
搜索apache-tomcat-8.5.99.tar.gz
查看Java环境变量
1 | echo $JAVA_HOME |
创建目录
1 | mkdir -p /data/tools |
服务器上下载
1 | wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.99/bin/apache-tomcat-8.5.99.tar.gz |
解压
1 | tar zxvf apache-tomcat-8.5.99.tar.gz -C /data/tools |
启动
1 | cd /data/tools/apache-tomcat-8.5.99/bin/ |
注册为服务
创建配置
1 | vi /etc/init.d/tomcat8.sh |
配置如下
1 |
|
注意
/etc/profile
文件通常在用户登录时由用户会话(如bash
会话)读取并执行。
init.d
脚本是在系统启动时由init
进程(或systemd
)执行的,它们运行在系统级别,而不是用户会话级别。所以
init.d
中的脚本读取不到/etc/profile
文件中的环境变量。我们可以使用
. /etc/profile
进行手动加载。
设置权限
1 | chmod +x /etc/init.d/tomcat8.sh |
首先,添加为系统服务
1 | chkconfig --add tomcat8.sh |
开机自启动
1 | chkconfig tomcat8.sh on |
查看
1 | chkconfig --list |
启动
1 | service tomcat8.sh start |
停用
1 | service tomcat8.sh stop |
查看启动情况
1 | lsof -i:8080 |
yum安装Tomcat7
这种方式安装的是Tomcat7.0.76
安装
1 | yum install -y tomcat |
安装位置
1 | cd /usr/share/tomcat |
日志文件路径
1 | cd /var/log/tomcat |
启动
1 | systemctl start tomcat |
开放端口
1 | firewall-cmd --zone=public --add-port=8080/tcp --permanent |
查看服务
1 | lsof -i:8080 |
查看服务位置
1 | systemctl status tomcat |
编辑配置
1 | vi /usr/lib/systemd/system/tomcat.service |
从中可以看到服务启动时加载的配置
添加环境变量
1 | vi /etc/tomcat/tomcat.conf |
添加
1 | JAVA_OPTS="-Desen.abi.workdir=/usr/share/app/workdir" |
重启
1 | systemctl stop tomcat |
查看日志
1 | grep "esen.abi.workdir" /var/log/tomcat/catalina.2024-11-11.log |
查看版本
1 | grep "Apache Tomcat" /var/log/tomcat/catalina.2024-11-11.log |
开机启动
1 | sudo systemctl enable tomcat |
禁用开机启动
1 | sudo systemctl disable tomcat |
卸载
1 | yum remove -y tomcat |