——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 #建議開啟