天天看點

CentOS(5.8/6.4)linux生産環境若幹優化實戰

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

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

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

優化内容:

①修改ip位址、網關、主機名、DNS等

②關閉selinux,清空iptables

③添加普通使用者并進行sudo授權管理

④更新yum源及必要軟體安裝

⑤定時自動更新伺服器時間

⑥精簡開機自啟動服務

⑦定時自動清理/var/spool/clientmqueue/目錄垃圾檔案,放置inode節點被占滿

⑧變更預設的ssh服務端口,禁止root使用者遠端連接配接

⑨鎖定關鍵檔案系統

⑩調整檔案描述符大小

調整字元集,使其支援中文

去除系統及核心版本登入前的螢幕顯示

核心參數優化

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

<code>[root@localhost ~]</code><code># vi /etc/sysconfig/network-scripts/ifcfg-eth0</code>

<code>DEVICE=eth0         </code><code>#網卡名字</code>

<code>BOOTPROTO=static    </code><code>#靜态IP位址擷取狀态 如:DHCP表示自動擷取IP位址</code>

<code>IPADDR=192.168.1.113            </code><code>#IP位址</code>

<code>NETMASK=255.255.255.0           </code><code>#子網路遮罩</code>

<code>ONBOOT=</code><code>yes</code><code>#引導時是否激活</code>

<code>GATEWAY=192.168.1.1</code>

<code>[root@localhost ~]</code><code># cat /etc/sysconfig/network-scripts/ifcfg-eth0</code>

<code>DEVICE=eth0</code>

<code>BOOTPROTO=static</code>

<code>IPADDR=192.168.1.113</code>

<code>NETMASK=255.255.255.0</code>

<code>ONBOOT=</code><code>yes</code>

<code>[root@localhost ~]</code><code># vi /etc/sysconfig/network</code>

<code>HOSTNAME=c64     </code><code>#修改主機名,重新開機生效</code>

<code>GATEWAY=192.168.1.1    </code><code>#修改預設網關,如果上面eth0裡面不配置網關的話,預設就使用這裡的網關了。</code>

<code>[root@localhost ~]</code><code># cat /etc/sysconfig/network</code>

<code>HOSTNAME=c64</code>

<code>我們也可以用  hostnamec64  來臨時修改主機名,重新登入生效</code>

<code>修改DNS</code>

<code>[root@localhost ~]</code><code># vi /etc/resolv.conf   #修改DNS資訊</code>

<code>nameserver 114.114.114.114</code>

<code>nameserver 8.8.8.8</code>

<code>[root@localhost ~]</code><code># cat /etc/resolv.conf  #檢視修改後的DNS資訊</code>

<code>[root@localhost ~]</code><code># service network restart   #重新開機網卡,生效</code>

<code>重新開機網卡,也可以用下面的指令</code>

<code>[root@localhost ~]</code><code># /etc/init.d/network restart</code>

2、關閉selinux,清空iptables

  關閉selinux

<code>[root@c64 ~]</code><code># sed –i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config   #修改配置檔案則永久生效,但是必須要重新開機系統。</code>

<code>[root@c64 ~]</code><code># grep SELINUX=disabled /etc/selinux/config</code>

<code>SELINUX=disabled     </code><code>#檢視更改後的結果</code>

<code>[root@c64 ~]</code><code># setenforce 0#臨時生效指令</code>

<code>[root@c64 ~]</code><code># getenforce      #檢視selinux目前狀态</code>

<code>Permissive</code>

清空iptables

<code>[root@c64 ~]</code><code># iptables –F     #清理防火牆規則</code>

<code>[root@c64 ~]</code><code># iptables –L     #檢視防火牆規則</code>

<code>Chain INPUT (policy ACCEPT)</code>

<code>target     prot opt </code><code>source</code>               <code>destination</code>

<code>Chain FORWARD (policy ACCEPT)</code>

<code>Chain OUTPUT (policy ACCEPT)</code>

<code>[root@c64 ~]</code><code>#/etc/init.d/iptables save   #儲存防火牆配置資訊</code>

<code>3、添加普通使用者并進行</code><code>sudo</code><code>授權管理</code>

<code>[root@c64 ~]</code><code># useradd sunsky</code>

<code>[root@c64 ~]</code><code># echo "123456"|passwd --stdin sunsky&amp;&amp;history –c</code>

<code>[root@c64 ~]</code><code># visudo</code>

<code>在root    ALL=(ALL)    ALL此行下,添加如下内容</code>

<code>sunsky    ALL=(ALL)    ALL</code>

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

 yum安裝軟體,預設擷取rpm包的途徑從國外官方源,改成國内的源。

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

方法1:自己配置好安裝源配置檔案,然後上傳到linux。

方法2:使用鏡像站點配置好的yum安裝源配置檔案

<code>[root@c64 ~]</code><code># cd /etc/yum.repos.d/</code>

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

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

<code>接下來執行如下指令,檢測yum是否正常</code>

<code>[root@c64 yum.repos.d]</code><code># yum clean all  #清空yum緩存</code>

<code>[root@c64 yum.repos.d]</code><code># yum makecache  #建立yum緩存</code>

然後使用如下指令将系統更新到最新

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

<code>[root@c64 yum.repos.d]</code><code># yum  upgrade-y     #更新系統核心到最新</code>

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

<code>[root@c64 yum.repos.d]</code><code># yum install lrzsz ntpdate sysstat -y</code>

lrzsz是一個上傳下載下傳的軟體

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

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

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

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

6、精簡開機自啟動服務

剛裝完作業系統可以隻保留crond,network,syslog,sshd這四個服務。(Centos6.4為rsyslog)

<code>[root@c64 ~]</code><code># for sun in `chkconfig --list|grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $sun off;done</code>

<code>[root@c64 ~]</code><code># for sun in crond rsyslog sshd network;do chkconfig --level 3 $sun on;done</code>

<code>[root@c64 ~]</code><code># chkconfig --list|grep 3:on</code>

<code>crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off</code>

<code>network         0:off   1:off   2:on    3:on    4:on    5:on    6:off</code>

<code>rsyslog         0:off   1:off   2:on    3:on    4:on    5:on    6:off</code>

<code>sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off</code>

<code>[root@c64 ~]</code><code>#</code>

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

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

<code>[root@c64 ~]</code><code># mkdir /server/scripts -p</code>

<code>[root@c64 ~]</code><code># vi /server/scripts/spool_clean.sh</code>

<code>#!/bin/sh</code>

<code>find</code><code>/var/spool/clientmqueue/-typef</code> <code>-mtime +30|xargsrm-f</code>

<code>然後将其加入到</code><code>crontab</code><code>定時任務中</code>

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

8、變更預設的ssh服務端口,禁止root使用者遠端連接配接

<code>[root@c64 ~]</code><code># cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak</code>

<code>[root@c64 ~]</code><code># vim /etc/ssh/sshd_config</code>

<code>Port 52113</code><code>#ssh連接配接預設的端口</code>

<code>PermitRootLogin no   </code><code>#root使用者黑客都知道,禁止它遠端登入</code>

<code>PermitEmptyPasswords no </code><code>#禁止空密碼登入</code>

<code>UseDNS no            </code><code>#不使用DNS</code>

<code>[root@c64 ~]</code><code># /etc/init.d/sshd reload    #從新加載配置</code>

<code>[root@c64 ~]</code><code># netstat -lnt     #檢視端口資訊</code>

<code>[root@c64 ~]</code><code># lsof -i tcp:52113</code>

9、鎖定關鍵檔案系統

<code>[root@c64 ~]</code><code># chattr +i /etc/passwd</code>

<code>[root@c64 ~]</code><code># chattr +i /etc/inittab</code>

<code>[root@c64 ~]</code><code># chattr +i /etc/group</code>

<code>[root@c64 ~]</code><code># chattr +i /etc/shadow</code>

<code>[root@c64 ~]</code><code># chattr +i /etc/gshadow</code>

使用chattr指令後,為了安全我們需要将其改名

<code>[root@c64 ~]</code><code># /bin/mv /usr/bin/chattr /usr/bin/任意名稱</code>

10、調整檔案描述符大小

<code>[root@localhost ~]</code><code># ulimit –n        #檢視檔案描述符大小</code>

<code>1024</code>

<code>[root@localhost ~]</code><code># echo '*  -  nofile  65535' &gt;&gt; /etc/security/limits.conf</code>

配置完成後,重新登入即可檢視。

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

<code>[root@c64 ~]</code><code># cat &gt;&gt;/etc/rc.local&lt;&lt;EOF</code>

<code>#open files</code>

<code>ulimit</code> <code>-HSn 65535</code>

<code>#stack size</code>

<code>ulimit</code> <code>-s 65535</code>

<code>EOF</code>

擴充:檔案描述符

檔案描述符在形式上是一個非負整數。實際上,它是一個索引值,指向核心為每一個程序所維護的該程序打開檔案的記錄表。當程式打開一個現有檔案或者建立一個新檔案時,核心向程序傳回一個檔案描述符。在程式設計中,一些涉及底層的程式編寫往往會圍繞着檔案描述符展開。但是檔案描述符這一概念往往隻适用于Unix、Linux這樣的作業系統。

習慣上,标準輸入(standard input)的檔案描述符是 0,标準輸出(standard output)是 1,标準錯誤(standard error)是 2。盡管這種習慣并非Unix核心的特性,但是因為一些 shell 和很多應用程式都使用這種習慣,是以,如果核心不遵循這種習慣的話,很多應用程式将不能使用。

11、調整字元集,使其支援中文

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

source/etc/sysconfig/i18n

擴充:什麼是字元集?

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

GBK 定長雙位元組不是國際标準,支援系統不少

UTF-8 非定長 1-4位元組廣泛支援,MYSQL也使用UTF-8

12、去除系統及核心版本登入前的螢幕顯示

<code>[root@c64 ~]</code><code># &gt;/etc/redhat-release</code>

<code>[root@c64 ~]</code><code># &gt;/etc/issue</code>

13、核心參數優化

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

<code>[root@c64 ~]</code><code># vi /etc/sysctl.conf</code>

<code>#by sun in 20131001</code>

<code>net.ipv4.tcp_fin_timeout = 2</code>

<code>net.ipv4.tcp_tw_reuse = 1</code>

<code>net.ipv4.tcp_tw_recycle = 1</code>

<code>net.ipv4.tcp_syncookies = 1</code>

<code>net.ipv4.tcp_keepalive_time =600</code>

<code>net.ipv4.ip_local_port_range = 4000    65000</code>

<code>net.ipv4.tcp_max_syn_backlog = 16384</code>

<code>net.ipv4.tcp_max_tw_buckets = 36000</code>

<code>net.ipv4.route.gc_timeout = 100</code>

<code>net.ipv4.tcp_syn_retries = 1</code>

<code>net.ipv4.tcp_synack_retries = 1</code>

<code>net.core.somaxconn = 16384</code>

<code>net.core.netdev_max_backlog = 16384</code>

<code>net.ipv4.tcp_max_orphans = 16384</code>

<code>#一下參數是對iptables防火牆的優化,防火牆不開會有提示,可以忽略不理。</code>

<code>net.ipv4.ip_conntrack_max = 25000000</code>

<code>net.ipv4.netfilter.ip_conntrack_max = 25000000</code>

<code>net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180</code>

<code>net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120</code>

<code>net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60</code>

<code>net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120</code>

<code>[root@localhost ~]</code><code># sysctl –p    #使配置檔案生效</code>

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

即對防火牆的優化,

在5.8上是

在6.4上是

<code>net.nf_conntrack_max = 25000000</code>

<code>net.netfilter.nf_conntrack_max = 25000000</code>

<code>net.netfilter.nf_conntrack_tcp_timeout_established = 180</code>

<code>net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120</code>

<code>net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60</code>

<code>net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120</code>

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

1、5.8版本上

<code>error: </code><code>"net.ipv4.ip_conntrack_max"</code><code>is an unknown key</code>

<code>error: </code><code>"net.ipv4.netfilter.ip_conntrack_max"</code><code>is an unknown key</code>

<code>error: </code><code>"net.ipv4.netfilter.ip_conntrack_tcp_timeout_established"</code><code>is an unknown key</code>

<code>error: </code><code>"net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait"</code><code>is an unknown key</code>

<code>error: </code><code>"net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait"</code><code>is an unknown key</code>

<code>error: </code><code>"net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait"</code><code>is an unknown key</code>

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

<code>modprobe ip_conntrack</code>

<code>echo</code> <code>"modprobe ip_conntrack"</code><code>&gt;&gt; </code><code>/etc/rc</code><code>.</code><code>local</code>

2、6.4版本上

<code>error: </code><code>"net.nf_conntrack_max"</code><code>isan unknown key</code>

<code>error: </code><code>"net.netfilter.nf_conntrack_max"</code><code>isan unknown key</code>

<code>error: </code><code>"net.netfilter.nf_conntrack_tcp_timeout_established"</code><code>isan unknown key</code>

<code>error: </code><code>"net.netfilter.nf_conntrack_tcp_timeout_time_wait"</code><code>isan unknown key</code>

<code>error: </code><code>"net.netfilter.nf_conntrack_tcp_timeout_close_wait"</code><code>isan unknown key</code>

<code>error: </code><code>"net.netfilter.nf_conntrack_tcp_timeout_fin_wait"</code><code>isan unknown key</code>

這個錯誤可能是你的防火牆沒有開啟或者自動處理可載入的子產品ip_conntrack沒有自動載入,解決辦法有二,

①是開啟防火牆,

②是自動處理開載入的子產品ip_conntrack

<code>modprobe nf_conntrack</code>

<code>echo</code> <code>"modprobe nf_conntrack"</code><code>&gt;&gt; </code><code>/etc/rc</code><code>.</code><code>local</code>

3、6.4版本上

<code>error: </code><code>"net.bridge.bridge-nf-call-ip6tables"</code><code>isan unknown key</code>

<code>error: </code><code>"net.bridge.bridge-nf-call-iptables"</code><code>isan unknown key</code>

<code>error: </code><code>"net.bridge.bridge-nf-call-arptables"</code><code>isan unknown key</code>

這個錯誤是由于自動處理可載入的子產品bridge沒有自動載入,解決辦法是自動處理開載入的子產品ip_conntrack

<code>modprobe bridge</code>

<code>echo</code> <code>"modprobe bridge"</code><code>&gt;&gt; </code><code>/etc/rc</code><code>.</code><code>local</code>

到此,我們Linux系統安裝後的基礎優化已經操作的差不多了,總結下來一共有13個優化點需要我們來熟知。

      本文轉自027ryan  51CTO部落格,原文連結http://blog.51cto.com/ucode/1775264:,如需轉載請自行聯系原作者

繼續閱讀