CentOS(5.8/6.4)linux生產環境若干優化實戰------就愛運維

特別說明:本文來自就愛運維。特和所有博友分享。更多優化,請關注www.92yunwei.com後續內容以及分享。

CentOS系統安裝之後並不能立即投入生產環境使用,往往需要先經過我們運維人員的優化才行。在此講解幾點關於Linux系統安裝後的基礎優化操作。注意:本次優化都是基於CentOS(5.8/6.4)。

下面我就爲大家簡單講解幾點關於Linux系統安裝後的基礎優化操作。

注意:本次優化都是基於CentOS(5.8/6.4)。關於5.8和6.4兩者優化時的小區別,我會在文中提及的。

優化條目:


  1. 修改ip地址、網關、主機名、DNS等

  2. 關閉selinux,清空iptables

  3. 添加普通用戶並進行sudo授權管理

  4. 更新yum源及必要軟件安裝

  5. 定時自動更新服務器時間

  6. 精簡開機自啓動服務

  7. 定時自動清理/var/spool/clientmqueue/目錄垃圾文件,放置inode節點被佔滿

  8. 變更默認的ssh服務端口,禁止root用戶遠程連接

  9. 鎖定關鍵文件系統

  10. 調整文件描述符大小

  11. 調整字符集,使其支持中文

  12. 去除系統及內核版本登錄前的屏幕顯示

  13. 內核參數優化

1、修改ip地址、網關、主機名、DNS等

  1. [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

  2. DEVICE=eth0         #網卡名字

  3. BOOTPROTO=static    #靜態IP地址獲取狀態 如:DHCP表示自動獲取IP地址

  4. IPADDR=192.168.1.113            #IP地址

  5. NETMASK=255.255.255.0           #子網掩碼

  6. ONBOOT=yes#引導時是否激活

  7. GATEWAY=192.168.1.1

  8. [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

  9. DEVICE=eth0

  10. BOOTPROTO=static

  11. IPADDR=192.168.1.113

  12. NETMASK=255.255.255.0

  13. ONBOOT=yes

  14. GATEWAY=192.168.1.1

  15. [root@localhost ~]# vi /etc/sysconfig/network

  16. HOSTNAME=c64     #修改主機名,重啓生效

  17. GATEWAY=192.168.1.1    #修改默認網關,如果上面eth0裏面不配置網關的話,默認就使用這裏的網關了。

  18. [root@localhost ~]# cat /etc/sysconfig/network

  19. HOSTNAME=c64

  20. GATEWAY=192.168.1.1

  21. 我們也可以用  hostnamec64  來臨時修改主機名,重新登錄生效

  22. 修改DNS

  23. [root@localhost ~]# vi /etc/resolv.conf   #修改DNS信息

  24. nameserver 114.114.114.114

  25. nameserver 8.8.8.8

  26. [root@localhost ~]# cat /etc/resolv.conf  #查看修改後的DNS信息

  27. nameserver 114.114.114.114

  28. nameserver 8.8.8.8

  29. [root@localhost ~]# service network restart   #重啓網卡,生效

  30. 重啓網卡,也可以用下面的命令

  31. [root@localhost ~]# /etc/init.d/network restart

2、關閉selinux,清空iptables

關閉selinux

  1. [root@c64 ~]# sed –i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config   #修改配置文件則永久生效,但是必須要重啓系統。

  2. [root@c64 ~]# grep SELINUX=disabled /etc/selinux/config

  3. SELINUX=disabled     #查看更改後的結果

  4. [root@c64 ~]# setenforce 0#臨時生效命令

  5. [root@c64 ~]# getenforce      #查看selinux當前狀態

  6. Permissive

清空iptables

  1. [root@c64 ~]# iptables –F     #清理防火牆規則

  2. [root@c64 ~]# iptables –L     #查看防火牆規則

  3. Chain INPUT (policy ACCEPT)

  4. target     prot opt source               destination

  5. Chain FORWARD (policy ACCEPT)

  6. target     prot opt source               destination

  7. Chain OUTPUT (policy ACCEPT)

  8. target     prot opt source               destination

  9. [root@c64 ~]#/etc/init.d/iptables save   #保存防火牆配置信息

3、添加普通用戶並進行sudo授權管理

  1. [root@c64 ~]# useradd sunsky

  2. [root@c64 ~]# echo "123456"|passwd --stdin sunsky&&history –c

  3. [root@c64 ~]# visudo

  4. 在root    ALL=(ALL)    ALL此行下,添加如下內容

  5. sunsky    ALL=(ALL)    ALL

4、更新yum源及必要軟件安裝

yum安裝軟件,默認獲取rpm包的途徑從國外官方源,改成國內的源。

國內較快的兩個站點:搜狐鏡像站點、網易鏡像站點

法1:自己配置好安裝源配置文件,然後上傳到linux。

法2:使用鏡像站點配置好的yum安裝源配置文件

  1. [root@c64 ~]# cd /etc/yum.repos.d/

  2. [root@c64 yum.repos.d]# /bin/mv CentOS-Base.repo CentOS-Base.repo.bak

  3. [root@c64 yum.repos.d]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

接下來執行如下命令,檢測yum是否正常

  1. [root@c64 yum.repos.d]# yum clean all  #清空yum緩存

  2. [root@c64 yum.repos.d]# yum makecache  #建立yum緩存

然後使用如下命令將系統更新到最新

  1. [root@c64 yum.repos.d]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*       #導入簽名KEY到RPM

  2. [root@c64 yum.repos.d]# yum  upgrade-y     #更新系統內核到最新

接下來就要安裝幾個必要的軟件了

  1. [root@c64 yum.repos.d]# yum install lrzsz ntpdate sysstat -y

lrzsz是一個上傳下載的軟件

sysstat是用來檢測系統性能及效率的工具

5、定時自動更新服務器時間

  1. [root@c64 ~]# echo '*/5 * * * * /usr/sbin/ntpdate time.windows.com >/dev/null 2 >&1' >>/var/spool/cron/root

  2. [root@c64 ~]# echo '*/10 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' >>/var/spool/cron/root

提示:CentOS 6.4的時間同步命令路徑不一樣

6是/usr/sbin/ntpdate

5是/sbin/ntpdate

擴展:在機器數量少時,以上定時任務同步時間就可以了。如果機器數量大時,可以在網內另外部署一臺時間同步服務器NTP Server。此處僅提及,不做部署

時間同步服務器架構圖:

allimg84211383325071.png

6、精簡開機自啓動服務

剛裝完操作系統可以只保留crondnetworksyslogsshd這四個服務。(Centos6.4rsyslog

  1. [root@c64 ~]# for sun in `chkconfig --list|grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $sun off;done
  2. [root@c64 ~]# for sun in crond rsyslog sshd network;do chkconfig --level 3 $sun on;done
  3. [root@c64 ~]# chkconfig --list|grep 3:on
  4. crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
  5. network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
  6. rsyslog         0:off   1:off   2:on    3:on    4:on    5:on    6:off
  7. sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off

7、定時自動清理/var/spool/clientmqueue/目錄垃圾文件,放置inode節點被佔滿

本優化點,在6.4上可以忽略不需要操作即可!

  1. [root@c64 ~]# mkdir /server/scripts -p
  2. [root@c64 ~]# vi /server/scripts/spool_clean.sh
  3. #!/bin/sh
  4. find/var/spool/clientmqueue/-typef -mtime +30|xargsrm-f

然後將其加入到crontab定時任務中

  1. [root@c64 ~]# echo '*/30 * * * * /bin/sh /server/scripts/spool_clean.sh >/dev/null 2>&1'>>/var/spool/cron/root

8、變更默認的ssh服務端口,禁止root用戶遠程連接

  1. [root@c64 ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
  2. [root@c64 ~]# vim /etc/ssh/sshd_config
  3. Port 52113#ssh連接默認的端口
  4. PermitRootLogin no   #root用戶***都知道,禁止它遠程登錄
  5. PermitEmptyPasswords no #禁止空密碼登錄
  6. UseDNS no            #不使用DNS
  7. [root@c64 ~]# /etc/init.d/sshd reload    #從新加載配置
  8. [root@c64 ~]# netstat -lnt     #查看端口信息
  9. [root@c64 ~]# lsof -i tcp:52113

9、鎖定關鍵文件系統

  1. [root@c64 ~]# chattr +i /etc/passwd
  2. [root@c64 ~]# chattr +i /etc/inittab
  3. [root@c64 ~]# chattr +i /etc/group
  4. [root@c64 ~]# chattr +i /etc/shadow
  5. [root@c64 ~]# chattr +i /etc/gshadow

使用chattr命令後,爲了安全我們需要將其改名

  1. [root@c64 ~]# /bin/mv /usr/bin/chattr /usr/bin/任意名稱

10、調整文件描述符大小

  1. [root@localhost ~]# ulimit –n        #查看文件描述符大小
  2. 1024
  3. [root@localhost ~]# echo '*  -  nofile  65535' >> /etc/security/limits.conf

配置完成後,重新登錄即可查看。

提示:也可以把ulimit -SHn 65535命令加入到/etc/rc.local,然後每次重啓生效

  1. [root@c64 ~]# cat >>/etc/rc.local<<EOF
  2. #open files
  3. ulimit -HSn 65535
  4. #stack size
  5. ulimit -s 65535
  6. EOF

擴展:文件描述符

文件描述符在形式上是一個非負整數。實際上,它是一個索引值,指向內核爲每一個進程所維護的該進程打開文件的記錄表。當程序打開一個現有文件或者創建一個新文件時,內核向進程返回一個文件描述符。在程序設計中,一些涉及底層的程序編寫往往會圍繞着文件描述符展開。但是文件描述符這一概念往往只適用於Unix、Linux這樣的操作系統

習慣上,標準輸入(standard input)的文件描述符是 0,標準輸出(standard output)是 1,標準錯誤(standard error)是 2。儘管這種習慣並非Unix內核的特性,但是因爲一些 shell 和很多應用程序都使用這種習慣,因此,如果內核不遵循這種習慣的話,很多應用程序將不能使用。

11、調整字符集,使其支持中文

  1. sed-i 's#LANG="en_US.UTF-8"#LANG="zh_CN.GB18030"#'/etc/sysconfig/i18n
  2. source/etc/sysconfig/i18n

擴展:什麼是字符集?

簡單的說就是一套文字符號及其編碼。常用的字符集有:

GBK 定長雙字節不是國際標準,支持系統不少

UTF-8 非定長 1-4字節廣泛支持,MYSQL也使用UTF-8

12、去除系統及內核版本登錄前的屏幕顯示

  1. [root@c64 ~]# >/etc/redhat-release
  2. [root@c64 ~]# >/etc/issue

13、內核參數優化

說明:本優化適合apache,nginx,squid多種等web應用,特殊的業務也可能需要略作調整。

  1. [root@c64 ~]# vi /etc/sysctl.conf
  2. #by sun in 20131001
  3. net.ipv4.tcp_fin_timeout = 2
  4. net.ipv4.tcp_tw_reuse = 1
  5. net.ipv4.tcp_tw_recycle = 1
  6. net.ipv4.tcp_syncookies = 1
  7. net.ipv4.tcp_keepalive_time =600
  8. net.ipv4.ip_local_port_range = 4000    65000
  9. net.ipv4.tcp_max_syn_backlog = 16384
  10. net.ipv4.tcp_max_tw_buckets = 36000
  11. net.ipv4.route.gc_timeout = 100
  12. net.ipv4.tcp_syn_retries = 1
  13. net.ipv4.tcp_synack_retries = 1
  14. net.core.somaxconn = 16384
  15. net.core.netdev_max_backlog = 16384
  16. net.ipv4.tcp_max_orphans = 16384
  17. #一下參數是對iptables防火牆的優化,防火牆不開會有提示,可以忽略不理。
  18. net.ipv4.ip_conntrack_max = 25000000
  19. net.ipv4.netfilter.ip_conntrack_max = 25000000
  20. net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180
  21. net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
  22. net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
  23. net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
  24. [root@localhost ~]# sysctl –p    #使配置文件生效

提示:由於CentOS6.X系統中的模塊名不是ip_conntrack,而是nf_conntrack,所以在/etc/sysctl.conf優化時,需要把net.ipv4.netfilter.ip_conntrack_max 這種老的參數,改成net.netfilter.nf_conntrack_max這樣纔可以。

即對防火牆的優化,在5.8上是

  1. net.ipv4.ip_conntrack_max = 25000000
  2. net.ipv4.netfilter.ip_conntrack_max = 25000000
  3. net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180
  4. net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
  5. net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
  6. net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120

在6.4上是

  1. net.nf_conntrack_max = 25000000
  2. net.netfilter.nf_conntrack_max = 25000000
  3. net.netfilter.nf_conntrack_tcp_timeout_established = 180
  4. net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
  5. net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
  6. net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

另外,在此優化過程中可能會有報錯:

1、5.8版本上

  1. error: "net.ipv4.ip_conntrack_max"is an unknown key
  2. error: "net.ipv4.netfilter.ip_conntrack_max"is an unknown key
  3. error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_established"is an unknown key
  4. error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait"is an unknown key
  5. error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait"is an unknown key
  6. error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait"is an unknown key

這個錯誤可能是你的防火牆沒有開啓或者自動處理可載入的模塊ip_conntrack沒有自動載入,解決辦法有二,一是開啓防火牆,二是自動處理開載入的模塊ip_conntrack

  1. modprobe ip_conntrack
  2. echo "modprobe ip_conntrack">> /etc/rc.local

2、6.4版本上

  1. error: "net.nf_conntrack_max"isan unknown key
  2. error: "net.netfilter.nf_conntrack_max"isan unknown key
  3. error: "net.netfilter.nf_conntrack_tcp_timeout_established"isan unknown key
  4. error: "net.netfilter.nf_conntrack_tcp_timeout_time_wait"isan unknown key
  5. error: "net.netfilter.nf_conntrack_tcp_timeout_close_wait"isan unknown key
  6. error: "net.netfilter.nf_conntrack_tcp_timeout_fin_wait"isan unknown key

這個錯誤可能是你的防火牆沒有開啓或者自動處理可載入的模塊ip_conntrack沒有自動載入,解決辦法有二,一是開啓防火牆,二是自動處理開載入的模塊ip_conntrack

  1. modprobe nf_conntrack
  2. echo "modprobe nf_conntrack">> /etc/rc.local

3、6.4版本上

  1. error: "net.bridge.bridge-nf-call-ip6tables"isan unknown key
  2. error: "net.bridge.bridge-nf-call-iptables"isan unknown key
  3. error: "net.bridge.bridge-nf-call-arptables"isan unknown key

這個錯誤是由於自動處理可載入的模塊bridge沒有自動載入,解決辦法是自動處理開載入的模塊ip_conntrack

  1. modprobe bridge
  2. echo "modprobe bridge">> /etc/rc.local

到此,我們Linux系統安裝後的基礎優化已經操作的差不多了,總結下來一共有13個優化點需要我們來熟知。後面我會出一個一鍵優化的shell腳本出來和大家一起交流學習。


本文出自 “就愛運維” 博客,請務必保留此出處http://www.92yunwei.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章