linux主机-初始化参考配置模板 V4.0

linux主机镜像配置
参考模板

——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逻辑核数
总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. 1.    
  2. 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 #建议打开

 

posted @   上帝_BayaiM  阅读(83)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示