linux主機-初始化參考配置模板 V4.0

上帝_BayaiM發表於2024-08-30
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 #建議開啟

相關文章