linux主机-初始化参考配置模板 V4.0
——V3.0.20240821
本文目的:系统工程师在搭建主机交付时候,尽可能的提前配置好以下各种参数,该主机是提供给数据库使用
说明: 以下信息属于本人多个项目收集总结或者转载,已在生产上多个项目运行,无报错可以放心使用。如果发现有不全或错误之处,纯属个人能力问题。
----- bayaim ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----- 2024年8月30日10:19:46 -----------------------------------------------------------------------------------------------------------------------------------------------------
一、 主机配置
1. 系统版本
推荐版本 |
CentOS 7.9_X64 CentOS 8_X64 |
检查方法 |
cat /etc/redhat-release //检查版本 cd /etc ls *rel* cat ./kylin-release cat ./lsb-release cat ./kos-release cat ./system-release uname -r uname -a |
2. 字符集
推荐配置 |
[root@ ~]# cat /etc/locale.conf LANG="zh_CN.UTF-8" |
检查方法 |
1、在CentOS 7版本中,字符集配置文件位于/etc/locale.conf 2、查看已安装的中文字符集 locale -a|grep zh_CN 3、执行以下命令或者重启系统使修改生效 source /etc/locale.conf 4、当图形化出现乱码: export LANG=en_US echo $LANG vi /etc/sysconfig/i18n echo LANG=zh_CN.gbk locale -a |grep en |
3. 主机名
推荐配置 |
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 IP 主机名 |
检查方法 |
cat /etc/hosts //主机名 hostname |
4. 核数
推荐配置 |
每个CPU物理核数 每个CPU逻辑核数 需要根据业务量需求,分配具体值,一般建议最低2C |
检查方法 |
cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l cat /proc/cpuinfo |grep "cpu cores"|uniq cat /proc/cpuinfo |grep "siblings"|uniq cat /proc/cpuinfo |grep -c "processor" lscpu |
5. 内存
推荐配置 |
主机的内存需要根据业务量需求,分配具体值,一般建议最低4G |
检查方法 |
free -m //检查内存(单位M) free -g //检查内存(单位G) cat /sys/kernel/mm/transparent_hugepage/enabled cat /proc/meminfo |grep -i HugePage //检查大页内存 |
6. 磁盘划分
推荐配置 |
主机的内存需要根据业务量需求,分配具体值,一般建议最低要求: /tmpfs 分区 8G /boot 分区 500M / 分区 50G /swap 分区 2G(根据内存值而定) /data 分区 100G /backup 分区 100G(如果需要) /home 分区 50G 新加的磁盘分区加入到 /etc/fstab中 |
检查方法 |
df -lh //检查磁盘分区 lsblk |
7. 系统时区与时间设置
推荐配置 |
确保机器是东八区,时间和北京时间误差在1S内 |
检查方法 |
# date //查看系统时间 # date -R (+0800 为东八区) //查看系统时区 |
8. 网卡和IP配置
推荐配置 |
Centos7中 网卡的默认位置在/etc/sysconfig/network-scripts/ifcfg-ens33 检查主机有几块网卡,当前IP配置是否是静态配置。 |
检查方法 |
1、BOOTPROTO=dhcp //启动网卡的方式 dhcp代表自动获取 但是我们配置ip时通常修改为static(静态)或者none 2、ONBOOT=no //是否启动网卡 默认为no 我们要改成yes 即开机启动的意思 3、关闭NetworkManager服务 service NetworkManager stop 临时关闭,重启网卡没有影响,开机重启之后,该服务又重新启动。所以一般选择永久关闭 # /etc/init.d/NetworkManager stop 4、关闭NetworkManager开机启动 # chkconfig NetworkManager off # chkconfig --level 35 NetworkManager off # service network restart //重启网卡 # ifconfig //查看IP
|
9. 开放端口
推荐配置 |
查询显示网络连接、路由表和网络接口等信息 |
检查方法 |
# netstat -tuln |
10. 关闭沙盒和防火墙
推荐配置 |
沙盒配置文件改成 Disabled vi /etc/sysconfig/selinux |
检查方法 |
# setenforce 0 (关闭沙盒!) # getenforce Disabled # iptables -F (清空防火墙默认规则) # service iptables status # service iptables stop //centos 6X禁用防火墙 # chkconfig iptables off //禁止开机启动 # systemctl stop firewalld // centos 7X 临时关闭 # systemctl disable firewalld // centos 7X 禁止开机启动 |
11. GNOME 桌面
推荐配置 |
确认是否需要关闭GNOME 桌面 |
检查方法 |
# vi /etc/inittab 3 -- 为命令行 5 -- 为桌面 然后重启系统后 #init 3 |
12. 系统当前的用户及用户组
推荐配置 |
确认系统重开通的用户列表,防止有无法用户 |
检查方法 |
cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}' //查询用户列表 /etc/passwd |awk -F ':' '{print $1}' //查询用户列表 cat /etc/group //查询用户组 |
13. 文件系统类型
文件系统类型选择 |
XFS文件系统在很多方面确实做的比Ext4好,Ext4受限制于磁盘结构和兼容问题。 由于Ext4单个分区超过16T,格式化时就会提示报错,索性就用XFS文件系统代替EXT4。 |
建文件类型步骤 |
# mkfs.ext4 /dev/sdb1 # yum install xfsprogs //首先yum安装XFS系统工具集 # parted -l //创建XFS格式分区 # mkfs.xfs -f /dev/sdb1 //格式化分区为XFS # mount -t xfs /dev/sdb1 /store //挂载格式化好的XFS分区,这里假设挂载到/store下 # df -Th /store/ //验证XFS分区是否挂载成功 |
14. 使用LVM对磁盘进行管理
添加系统日志文件 |
PV(Physical Volume)物理卷 VG(Volume Group)卷组 LV(Logical Volume)逻辑卷 多个pv(物理卷)组成一个vg(卷组),一个vg可以分成多个lv(逻辑卷), 一个lv对应一个系统分区。
|
修改系统日志文件保存的时间 |
# fdisk -l /dev/sdc //分区已经创建成功 # pvcreate /dev/sdc1 //创建基于分区的物理卷 # vgcreate soft /dev/sdc1 /dev/sdc2 //创建卷组 # vgchange -a y soft //激活卷组 # lvcreate -l 366 soft -n soft01 # 将1.5G共366个PE创建一个LV
|
15. 系统日志保留策略
添加系统日志文件 |
默认RedHat Linux不生成该日志文件,但可以配置/etc/syslog.conf让系统生成该日志文件。它和/etc/log/messages日志文件不同,它只记录警告信息,常常是系统出问题的信息,所以更应该关注该文件。要让系统生成该日志文件,在/etc/syslog.conf文件中加上:*.warning /var/log/syslog
|
修改系统日志文件保存的时间 |
修改/etc/logrotate.conf 中的 # keep 4 weeks worth of backlogs rotate 4 改为rotate 12 将/var/log/wtmp { monthly create 0664 root utmp rotate 1 中的1改为3, } 保存后通过service syslog restart命令重启syslog进程。
|
16. syslog登录日志事件记录
安全基线项说明 |
日志审计-syslog登录日志事件记录 |
检测操作步骤 |
执行命令:more /etc/syslog.conf 查看参数authpriv值 |
基线符合性判定依据 |
若未对所有登录事件都记录,则低于安全要求;
|
17. Syslog.conf的配置审核
安全基线项说明 |
日志审计-Syslog.conf的配置审核 |
检测操作步骤 |
执行:more /etc/syslog.conf,查看是否设置了下列项: kern.warning;*.err;authpriv.none\t@loghost *.info;mail.none;authpriv.none;cron.none\t@loghost *.emerg\t@loghost local7.*\t@loghost |
基线符合性判定依据 |
若未设置,则低于安全要求; |
18. 系统core dump状态
安全基线项说明 |
系统core dump状态 |
检测操作步骤 |
执行:more /etc/security/limits.conf 检查是否包含下列项: * soft core 0 * hard core 0 |
基线符合性判定依据 |
若不存在,则低于安全要求。 补充操作说明: core dump中可能包括系统信息,易被入侵者利用,建议关闭 |
19. 账号口令-口令生存周期
安全基线项说明 |
检查是否设置口令生存周期 |
检测操作步骤 |
输入命令cat /etc/login.defs|grep PASS查看密码策略设置,备份方法:cp -p /etc/login.defs /etc/login.defs_bak。输入vi /etc/login.defs修改配置文件,PASS_MAX_DAYS 90 #新建用户的密码最长使用天数 PASS_MIN_DAYS 0 #新建用户的密码最短使用天数 PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数 PASS_MIN_LEN 9 #最小密码长度9 |
基线符合性判定依据 |
在文件/etc/login.defs中设置 PASS_MAX_DAYS 不大于标准值,PASS_MAX_DAYS 90,如果该文件不存在,则创建并按照要求进行编辑 |
20. 账号口令-更改最小间隔天数
安全基线项说明 |
检查是否设置口令更改最小间隔天数 |
检测操作步骤 |
cat "/etc/login.defs" |
基线符合性判定依据 |
在文件/etc/login.defs中设置 PASS_MIN_DAYS 不小于标准值 |
21. 账号口令-密码复杂度策略
安全基线项说明 |
检查设备密码复杂度策略 |
检测操作步骤 |
Redhat系统:修改/etc/pam.d/system-auth文件, Suse9:修改/etc/pam.d/passwd文件, Suse10,Suse11:修改/etc/pam.d/common-password文件, 在ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 选3种,追加到password requisite pam_cracklib.so后面,添加到配置文件中。 例如:password requisite pam_cracklib.so ucredit=-1 lcredit=-1 dcredit=-1 注:ucredit:大写字母个数;lcredit:小写字母个数;dcredit:数字个数;ocredit:特殊字符个数 |
基线符合性判定依据 |
检查密码复杂度策略中设置的大写字母个数 |
二、 Oracle服务器相关参数文件
- 1.
- 2.
1. 需要安装的包
安全基线项说明 |
64bit OracleEnterpriseLinux 为例,需要下列系统包:(29 个包): binutils-2.17.50.0.6 compat-libstdc++-33-3.2.3 compat-libstdc++-33-3.2.3(32bit) elfutils-libelf-0.125 elfutils-libelf-devel-0.125 gcc-4.1.2 gcc-c++-4.1.2 glibc-2.5-24 glibc-2.5-24(32bit)s glibc-common-2.5 glibc-devel-2.5 glibc-devel-2.5(32bit) glibc-headers-2.5 ksh-20060214 libaio-0.3.106 libaio-0.3.106(32bit) libaio-devel-0.3.106 libaio-devel-0.3.106(32bit) libgcc-4.1.2 libgcc-4.1.2(32bit) libstdc++-4.1.2 libstdc++-4.1.2(32bit) libstdc++-devel4.1.2 make-3.81 sysstat-7.0.2 unixODBC-2.2.11 unixODBC-2.2.11(32bit) unixODBC-devel-2.2.11 unixODBC-devel-2.2.11(32bit) |
检测操作步骤 |
检查方法: Rpm -qa | grep binutils compat-db compat-libstdc++-33 compat-libstdc++-296 compat-gcc-34-c++ compat-gcc-34 control-center elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers gnome-screensaver kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel libXp make numactl-devel openmotif openmotif22 pdksh rsh setarch sysstat unixODBC unixODBC-devel xorg-x11 |
基线符合性判定依据 |
必须全部安装完成以上rpm包 |
2. 设置用户Shell 限制
安全基线项说明 |
设置用户 Shell 限制 $ vi /etc/security/limits.conf |
检测操作步骤 |
在文件最下方输入以下内容: oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 |
基线符合性判定依据 |
#sysctl -p //使内核参数立即生效 |
3. Linux 内核参数
安全基线项说明 |
#vi /etc/sysctl.conf |
检测操作步骤 |
将下列内容加入该文件: fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 8160280 kernel.shmmax = 33424509440 kernel.shmmni = 4096 kernel.sem =250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 4194304 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 |
基线符合性判定依据 |
#sysctl -p //使内核参数立即生效 |
4. 设置用户登陆限制
安全基线项说明 |
$ vi /etc/pam.d/login |
检测操作步骤 |
在文件最下方输入以下内容: session required /lib64/security/pam_limits.so #session required /lib/security/pam_limits.so session required pam_limits.so 环境变量: [root@localhost ~]$ vi /etc/profile 在文件最下方输入以下内容: if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi |
基线符合性判定依据 |
配置如上,则是符合。 |
三、 操作系统参数调优表
以下信息来自阿里OB组资料,仅供借鉴使用
类型 |
配置项 |
描述 |
建议 |
网络参数 |
net.core.somaxconn |
Socket 监听队列的最大长度,频繁建立连接需要调大该值 |
默认为 128,建议配置为 2048 |
网络参数 |
net.core.netdev_max_backlog |
协议栈处理的缓冲队列长度,设置的过小有可能造成丢包 |
建议配置为 10000 |
网络参数 |
net.core.rmem_default |
接收缓冲区队列的默认长度 |
建议配置为 16777216 |
网络参数 |
net.core.wmem_default |
发送缓冲区队列的默认长度 |
建议配置为 16777216 |
网络参数 |
net.core.rmem_max |
接收缓冲区队列的最大长度 |
建议配置为 16777216 |
网络参数 |
net.core.wmem_max |
发送缓冲区队列的最大长度 |
建议配置为 16777216 |
网络参数 |
net.ipv4.ip_local_port_range |
本地 TCP/UDP 的端口范围,本地使用该范围内的端口与远端发起连接 |
建议的端口范围为【3500,65535】 |
网络参数 |
net.ipv4.tcp_rmem |
Socket 接收缓冲区的大小,分别为最小值、默认值、最大值 |
建议最小值、默认值、最大值分别配置为 4096、87380、16777216 |
网络参数 |
net.ipv4.tcp_wmem |
Socket 发送缓冲区的大小,分别为最小值、默认值、最大值 |
建议最小值、默认值、最大值分别配置为 4096、65536、16777216 |
网络参数 |
net.ipv4.tcp_max_syn_backlog |
处于 SYN_RECVD 状态的连接数 |
建议配置为 16384 |
网络参数 |
net.ipv4.tcp_fin_timeout |
Socket 主动断开之后 FIN-WAIT-2 状态的持续时间 |
建议配置为 15 |
网络参数 |
net.ipv4.tcp_tw_reuse |
允许重用处于 TIME WAIT 状态的 Socket |
建议配置为 1 |
网络参数 |
net.ipv4.tcp_slow_start_after_idle |
禁止 TCP 连接从 Idle 状态的慢启动,降低某些情况的网络延迟 |
建议配置为 0 |
虚拟内存配置 |
vm.swappiness |
优先使用物理内存 |
建议配置为 0 |
虚拟内存配置 |
vm.max_map_count |
进程可以拥有的虚拟内存区域数量 这个如果设置不合理会导致内存泄漏 |
建议配置为 655360 |
AIO 配置 |
fs.aio-max-nr |
异步 I/O 的请求数目 |
建议配置为 1048576 |
四、 MySQL服务器相关参数文件
1. OS配置部分
(1)在BIOS及内核层面关闭NUMA
(2)在BIOS层面将CPU、内存均设置最大性能模式
(3)在BIOS层面关闭CPU节能模式
(4)修改IO Scheduler为deadline或noop,机械盘设置为deadline,ssd设置为noop
grep deadline /sys/block/sd*/queue/scheduler
(5)使用xfs文件系统,挂载选项 noatime、nodiratime、nobarrier
(6)在内核层面设置vm.swappiness<=5,vm.dirty_ratio<=10, vm.dirty_background_ratio<=5
fs.file_max=65536 指定能够打开的文件句柄数
vm.dirty_background_ratio 指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如5%)就会触发pdflush/flush/kdmflush等后台 回写进程运行,将一定缓存的脏页异步地刷入外存;
vm.dirty_ratio 指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如10%),系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多,为了避免数据丢失需要将一定脏页刷入外存);在此过程中很多应用进程可能会因为系统转而处理文件IO而阻塞。
net.core.somaxconn=65536 指定socket监听的TCP协议连接数的上限
net.core.netdev_max_backlog=65536
net.ipv4.tcp_max_sync_backlog=65536
net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_tw_reuse=0 此参数表示开启重用,允许将 TIME_WAIT 套接字重新用于新的TCP连接 建议关闭
net.ipv4.tcp_tw_recycle=0 此参数表示开启TCP连接中 TIME_WAIT 的快速回收,建议关闭
(7)在内核层面修改用户可最大打开文件数和线程数为65535
vi /etc/security/limits.conf
# add for mysql
* - nofile 65535
* - nproc 65535
2. MySQL配置部分
(1)sort/join/read/read rnd buffer 设置
--一般4M或者8M,最多到16M
sort_buffer_size = 4M
join_buffer_size = 4M
read_buffer_size = 8M
read_rnd_buffer_size = 4M
(2)tmp/heap table
--一般16M或者32M,如果sql性能差,需要经常产生临时表,可以设到96M。可以在session级别设置
tmp_table_size = 32M
max_heap_table_size = 32M
(3)双一保证
--保证主库环境、主从数据一致性
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
(4)long_query_time
--建议设为0.01-0.1,如果设为0,就会把所有的sql记录下来,需要定期去清理
long_query_time = 0.1
(5)log_queries_not_using_indexes & log_throttle_queries_not_using_indexes
--把所有没有使用索引的sql都记录下来
log_queries_not_using_indexes =1
log_throttle_queries_not_using_indexes = 60
(6)interactive_timeout & wait_timeout
--一般建议设置为300s 或者600s
interactive_timeout = 600
wait_timeout = 600
(7)lock_wait_timeout
--持有锁的时间,一般设置为1800或者3600
lock_wait_timeout = 3600
(8)default_time_zone
--可能造成cpu使用高,要设置一个固定值
default_time_zone = "+8:00"
(9)thread_handling
--企业版或者percona版本才有的参数,如果业务是大量短连接,可以设置。如果是长连接或者连接池,没必要打开
(10)innodb_buffer_pool_size
--一般设置为内存50%-75%
innodb_buffer_pool_size=2G
innodb_buffer_pool_instances 必须在 innodb_buffer_pool_size 大于等于1G 时才生效。
当 innodb_buffer_pool_size 值低于 1GB时,没必要也不能设置innodb_buffer_pool_instances 值大于等于 2。
一般而言,当 innodb_buffer_pool_size 值不高于 8GB时,没必要设置innodb_buffer_pool_instances 值大于 1。
通常,当 innodb_buffer_pool_size 较大时(大于64GB),innodb_buffer_pool_instances设置为 8 是个比较合理的值。
(11)innodb_max_dirty_pages_pct
--默认75%,IO比较快的可设置为50%
innodb_max_dirty_pages_pct = 50
(12)innodb_thread_concurrency
--建议设置为0
innodb_thread_concurrency = 0
(13)innodb_lock_wait_timeout
--行锁等待时间,设为5-10s
innodb_lock_wait_timeout = 10
(14)innodb_log_file_size & innodb_log_files_in_group
innodb_log_file_size = 2G
innodb_log_files_in_group = 3
(15)
# 根据您的服务器IOPS能力适当调整
# 一般配普通SSD盘的话,可以调整到 10000 - 20000,普通机械磁盘其随机IO的IOPS最多也就是300
# 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
(16)
innodb_status_output innodb 状态监控信息开关,on为开启,off为关闭,默认为off
innodb_status_output_locks 为锁监控信息开关,on为开启,off为关闭,默认也为off
一般建议将innodb_status_output innodb 参数关闭,如测试需要可以临时打开,测试完成再关闭。
SET GLOBAL innodb_status_output=OFF;
改为还需要同步修改配置文件,否则下次重启又打开了。改完后,错误日志不再有innodb状态信息输出了。
innodb_status_output_locks 设置为打开,监控锁信息。这样需要查看锁信息时,可以通过 show engine innodb status \G; 进行查看。
(17)
skip_name_resolve:默认值为OFF,内网生产建议设为ON,禁用dns解析
(18)设置保存binlog时间
expire_logs_days=7
或者
binlog_expire_logs_seconds=604800
(19)sql_mode
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
(20)max_allowed_packet
max_allowed_packet = 64M
(21)innodb_print_all_deadlocks
innodb_print_all_deadlocks=1 #建议打开
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步