0%

CentOS8 部署规范和初始化配置

本文主要介绍 CentOS8 服务器部署规范和一些初始化配置,整体套路延续 CentOS7 规范。

主要变化

内核版本

内核版本升级到 4.18+,使用 Docker 不需要再手动升级内核了。

1
uname -a

软件源管理

CentOS8 使用 DNF 作为软件源管理器,使用方法和 YUM 差不多,它来源于 Fedora。

目前仍可以同时使用 YUM。

网络服务

network.service 已经不存在,使用 NetworkManager 或 nmcli 进行网络服务重启

1
2
3
4
systemctl restart NetworkManager

nmcli networking off
nmcli networking on

时间同步服务

以前我们主要使用 ntp 再通过定时脚本执行命令来进行时间同步,CentOS8 官方仓库移除了 ntp 组件,时间同步服务默认使用 chrony 服务。

修改配置文件 /etc/chrony.conf ,增加需要的 NTP Server,可使用公开的 NTP 或者阿里云的 NTP Server,启动服务

1
2
systemctl restart chronyd
systemctl enable chronyd

验证同步是否正常,可使用:

1
2
3
chronyc tracking

timedatectl

主要软件大版本

1
2
3
4
5
PHP 7.2+
Python 3.6+, 3.8+
Java 1.8.0.265+
Golang 1.13+
Redis 5.0+

系统检查与初始化

检查CPU/内存/磁盘情况

1
2
3
top
fdisk -l
cat /proc/cpuinfo

网络,主机名

借助 nmtui 可以方便的通过一个界面进行网卡、主机名设置

SELINUX

关闭 SELINUX,通过 sestatus 验证 :

1
vi /etc/sysconfig/selinux

内核参数调整

主要为TCP一些参数调整,打开文件数限制,swap 使用限制,调整需要重启服务器,可与上面两步一起调整。

vm.swappiness = 0 设置为 0,表示不启用 swap。当内存不够会触发 OOM,可根据情况调整。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
net.unix.max_dgram_qlen = 100

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.ip_local_port_range = 10000 65535

net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_mem = 524288 2048000 20480000
net.ipv4.tcp_rmem = 4096 40960000 409600000
net.ipv4.tcp_wmem = 4096 40960000 409600000
net.ipv4.tcp_max_orphans = 3276800

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 81920
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_tw_recycle = 0
net.ipv4.route.max_size = 5242880
net.ipv4.tcp_max_tw_buckets = 1440000

kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.msgmnb = 4203520
kernel.msgmni = 256
kernel.msgmax = 8192

net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

fs.file-max = 655360
vm.swappiness = 0

net.ipv4.tcp_tw_recycle has been removed from Linux 4.12;所以 Ubuntu 22.04 无此参数。

在服务端,不要启用 net.ipv4.tcp_tw_recycle,除非你能确保你的服务器网络环境不是 NAT 。在服务端上启用 net.ipv4.tw_reuse 对于连接进来的 TCP 连接来说,并没有任何卵用。

查看 TCP 手册,推荐不开启:https://linux.die.net/man/7/tcp

1
2
tcp_tw_recycle (Boolean; default: disabled; since Linux 2.4)
Enable fast recycling of TIME_WAIT sockets. Enabling this option is not recommended since this causes problems when working with NAT (Network Address Translation).

打开文件数限制

查看并修改 (可能需要重启服务器),当作为 Server 时,系统默认 1024 远远不够。

1
2
# 查看当前文件数
ulimit -a

最下面增加

1
2
3
4
5
vi /etc/security/limits.conf
* soft nofile 655360
* hard nofile 655360
* soft core unlimited
* hard core unlimited

系统软件包更新更新

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装必备的工具
dnf install net-tools bash-completion wget

# 更新系统版本到最新
dnf update

# 安装必备的系统工具
dnf -y install mlocate screen chrony unzip zip parted rsync tree vim lrzsz tcpdump telnet sysstat lsof strace iptraf iotop hdparm

# 常用开发包 (移除python-devel、snappy-devel)
yum -y install gcc gcc-c++ autoconf automake make cmake libevent libtool libXaw expat-devel libxml2-devel libevent-devel asciidoc cyrus-sasl-devel cyrus-sasl-gssapi krb5-devel libtidy libxslt-devel openssl-devel gmp-devel snappy libcurl libcurl-devel libXrender libXtst

# epel 源
yum -y install epel-release

时间同步

查看时间以及时区:

1
timedatectl

先手动同步一次,然后加入到计划任务,每8小时同步一次

1
2
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
timedatectl set-timezone "Asia/Shanghai"

透明大页面

当服务器作为数据库、内存数据库、常驻任务服务器时(Redis、MySQL、Java、Hadoop等),启用透明大页面,它可能会导致重大的性能问题。

当服务器只用于 Webserver(Nginx+PHP),可以忽略。

1
2
3
4
5
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

vi /etc/rc.local
chmod +x /etc/rc.local

重启服务

在这里可以系统重启一下,方便验证以上操作。

服务器安全配置

避免 SSH 弱口令,修改 SSH 服务端口,修改 SSH 配置文件,将其监听端口更改为大于10000的值:

1
2
vi /etc/ssh/sshd_config
Port 22345

修改软件防火墙把默认的22端口改为刚才指定的端口。

关于 SSH 这些配置、端口的修改,一定要在修改后立即进行连接测试,以防由于误操作,断开了当前连接而无法再次连接主机。

禁止root账户远程登录,:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vi /etc/ssh/sshd_config
PermitRootLogin no
添加管理员账户:

# 添加wheel管理员组用户
useradd -g wheel yaoniming
passwd yaoniming

# 限制wheel组用户才能su,去除该行注释
shell> vi /etc/pam.d/su
auth required pam_wheel.so use_uid

# wheel组可使用sudo,去除改行注释
vi /etc/sudoers
%wheel ALL=(ALL) NOPASSWD: ALL

同样,这里的相关修改以后,一定要立即连接测试。

如有条件,可采用 ssh-key 进行登录