1.4.1 系统的基础优化
1.更新yum官方源
CentOS 6.4 系统自带的更新源速度比较慢,想必各位都有所感受,国内的速度慢得让人受不了。为了让CentOS 6.4系统使用速度更快的yum更新源,一般做运维的都会选择更换源,笔者一般会选择网易的更新源,详细步骤如下所示。
1)下载repo文件,命令如下:
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
2)备份并替换系统的repo文件,命令如下:
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.bak
mv CentOS6-Base-163.repo CentOS-Base.repo
3)执行yum源更新,命令如下:
yum clean all #清除yum缓存
yum makecache #重建缓存
yum update #升级Linux系统
增加epel源,详细步骤如下所示。
1)下载rpm文件并进行安装,命令如下:
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
2)安装yum-priorities源优先级工具,命令如下:
yum install yum-priorities
yum-priorities源优先级工具是yum-plugin-priroites插件,用于给yum源划分优先级。比如说系统存在官方源、epel、puppetlabs3个yum源,这3个yum源中可能含有相同的软件,yum管理器会应用该工具来分辨安装软件时采用哪个yum源的软件。
如果说,设置官方的yum源优先级最高,epel yum源第二,puppetlabs第三(用1到99来表示,1最高),那么在安装程序的时候,就会先寻找官方的yum源。如果该源里面有所要的程序,那就停止寻找,直接安装找到的;如果没有找到,则依次寻找epel和puppetlabs的源。如果说3个yum源都含有同一个软件,那就安装优先级最高的官方yum源的。添加优先级的过程比较简单,只需要编辑对应的repo文件,在文件最后添加如下内容即可:
priority=对应优先级数字
注意,要想开启yum源的优先级功能,就要先确保priorities.conf文件里面有如下内容,需要先打开此文件,打开文件的命令如下:
vim /etc/yum/pluginconf.d/priorities.conf
确保文件里面包含如下内容:
[main]
enabled=1
2.关闭不需要的服务
众所周知,服务越少,系统占用的资源就会越少,所以应当关闭不需要的服务。建议把不需要的服务关闭掉,这样做的好处是减少内存和CPU资源占用。首先可以看下系统中存在着哪些已经启动了的服务,查看命令如下:
ntsysv
下面列出的是需要启动的服务,未列出的服务一律关闭。
crond:自动计划任务。
network:Linux系统的网络服务,很重要,若不开启此服务的话,服务器就不能联网。
sshd:OpenSSH服务器守护进程。
rsyslog:Linux的日志系统服务(CentOS 5.8下此服务名称为syslog),必须要启动。
3.关闭不需要的TTY
可用vim编辑器打开vim /etc/init/start-ttys.conf文件,文件内容如下所示:
start on stopped rc RUNLEVEL=[2345]
env ACTIVE_CONSOLES=/dev/tty[1-6]
env X_TTY=/dev/tty1
task
script
. /etc/sysconfig/init
for tty in $(echo $ACTIVE_CONSOLES) ; do
[ "$RUNLEVEL" = "5" -a "$tty" = "$X_TTY" ] && continue
initctl start tty TTY=$tty
done
end script
这段代码使init打开了6个控制台,可分别用ALT+F1到ALT+F6进行访问。此6个控制台默认都驻留在内存中,用ps aux命令即可看到,命令如下:
ps aux | grep tty | grpe -v grep
命令显示结果如下所示:
root 1011 0.0 0.1 4060 288 tty1 Ss+ Nov25 0:00 /sbin/mingetty /dev/tty1
root 1013 0.0 0.1 4060 292 tty2 Ss+ Nov25 0:00 /sbin/mingetty /dev/tty2
root 1015 0.0 0.1 4060 292 tty3 Ss+ Nov25 0:00 /sbin/mingetty /dev/tty3
root 1017 0.0 0.1 4060 288 tty4 Ss+ Nov25 0:00 /sbin/mingetty /dev/tty4
root 1019 0.0 0.1 4060 288 tty5 Ss+ Nov25 0:00 /sbin/mingetty /dev/tty5
root 1021 0.0 0.1 4060 292 tty6 Ss+ Nov25 0:00 /sbin/mingetty /dev/tty6
root 7467 0.0 0.1 4072 340 hvc0 Ss+ Nov29 0:00 /sbin/agetty /dev/hvc0
38400 vt100-nav
事实上没有必要使用这么多,那如何关闭不需要的进程呢?
通常保留两个控制台就可以了,打开/etc/init/start-ttys.conf文件,注意以下代码内容:
env ACTIVE_CONSOLES=/dev/tty[1-6]
将[1-6]修改为[1-2],然后再打开/etc/sysconfig/init文件,注意以下代码内容:
ACTIVE_CONSOLES=/dev/tty[1-6]
将[1-6]修改为[1-2],然后重启机器即可。
4.对TCP/IP网络参数进行调整
调整TCP/IP网络参数,可以加强对抗SYN Flood的能力,命令如下:
echo 'net.ipv4.tcp_syncookies = 1' >> /etc/sysctl.conf
sysctl -p
5.修改SHELL命令的history记录个数
用vim编辑器打开/etc/profile文件,关注HISTSIZE=1000:
vi /etc/profile
在找到HISTSIZE=1000后,将其改为HISTSIZE=100(这条可根据实际工作环境而定)。
不需要重启系统也可让其生效,命令如下:
source /etc/profile
6.定时校正服务器的时间
我们可以定时校正服务器的时间,命令如下:
yum install ntp
crontab -e
加入一行:
*/5 * * * * /usr/sbin/ntpdate ntp.api.bz
ntp.api.bz 是一组NTP服务器集群,之前是6台服务器,位于上海电信;现在是3台服务器,分散于上海和浙江电信,可以用dig命令查看:
dig ntp.api.bz
命令显示结果如下所示:
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.5 <<>> ntp.api.bz
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48560
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;ntp.api.bz. IN A
;; ANSWER SECTION:
ntp.api.bz. 600 IN A 61.153.197.226
ntp.api.bz. 600 IN A 218.75.4.130
ntp.api.bz. 600 IN A 114.80.81.1
;; Query time: 10 msec
;; SERVER: 202.103.24.68#53(202.103.24.68)
;; WHEN: Thu Dec 24 06:58:36 2015
;; MSG SIZE rcvd: 76
7.停止IPv6网络服务
在CentOS 6.4默认的状态下,IPv6是被启用的,可用如下命令查看:
lsmod | grep ipv6
命令显示结果如下:
nf_conntrack_ipv6 8748 2
nf_defrag_ipv6 11182 1 nf_conntrack_ipv6
nf_conntrack 79357 2 nf_conntrack_ipv6,xt_state
ipv6 321422 23 ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6
有些网络和应用程序还不支持IPv6,因此,禁用IPv6可以说是一个非常好的选择,以加强系统的安全性,并提高系统的整体性能。不过,首先要确认一下IPv6是不是处于被启动的状态,命令如下:
ifconfig -a ← 列出全部网络接口信息
命令显示结果如下所示:
eth0 Link encap:Ethernet HWaddr 00:16:3E:7F:67:C3
inet addr:192.168.1.207 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::216:3eff:fe7f:67c3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:405835 errors:0 dropped:0 overruns:0 frame:0
TX packets:197486 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:327950786 (312.7 MiB) TX bytes:17186162 (16.3 MiB)
Interrupt:24
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
然后修改相应的配置文件,停止IPv6,命令如下:
echo "install ipv6 /bin/true" > /etc/modprobe.d/disable-ipv6.conf
#每当系统需要加载IPv6模块时,强制执行/bin/true来代替实际加载的模块
echo "IPV6INIT=no" >> /etc/sysconfig/network-scripts/ifcfg-eth0
#禁用基于IPv6网络,使之不会被触发启动
8.调整Linux的最大文件打开数
要调整一下Linux的最大文件打开数,否则运行Squid服务的机器在高负载时执行性能将会很差;另外,在Linux下部署应用时,有时候会遇上“Too many open files”这样的问题,这个值也会影响服务器的最大并发数。其实Linux是有文件句柄限制的,但默认值不是很高,一般是1024,生产服务器很容易就会达到这个值,所以需要改动此值。
下面打开/etc/security/limit.conf命令,在最后一行添加如下命令:
* soft nofile 65535
* hard nofile 65535
正解的做法应该是除了以上步骤之外,还要在系统的/etc/rc.local文件里添加如下内容:
ulimit -SHn 65535
另外,ulimit -n命令并不能真正看到文件的最大文件打开数,可用如下脚本查看:
#!/bin/bash
for pid in `ps aux |grep nginx |grep -v grep|awk '{print $2}'`
do
cat /proc/${pid}/limits |grep 'Max open files'
done
在线上环境找一台cms业务机器,执行此脚本,显示结果如下所示:
Max open files 65535 65535 files
Max open files 65535 65535 files
Max open files 65535 65535 files
Max open files 65535 65535 files
Max open files 65535 65535 files
Max open files 65535 65535 files
Max open files 65535 65535 files
Max open files 65535 65535 files
Max open files 65535 65535 files
Max open files 65535 65535 files
9.启动网卡
在配置CentOS 6.4的网卡IP地址时,容易忽略的一项是Linux在启动时未启动网卡,其后果很明显,那就是该Linux机器永远也没有IP地址。下面是一台线上环境服务器网卡/etc/sysconfig/network-scripts/ifcfg-eth0文件的配置内容:
DEVICE=eth0
BOOTPROTO=static
HWADDR=00:14:22:1B:71:20
IPV6INIT=no
IPV6_AUTOCONF=yes
ONBOOT=yes -->此项一定要记得更改为yes,它会在系统引导时就启动网卡设备
NETMASK=255.255.255.192
IPADDR=203.93.236.146
GATEWAY=203.93.236.129
TYPE=Ethernet
PEERDNS=yes -->允许用从DHCP处获得的DNS覆盖本地的DNS
USERCTL=no -->不允许普通用户修改网卡
10.关闭写磁盘I/O功能
Linux文件默认有3个时间,分别如下所示。
atime:对此文件的访问时间。
ctime:此文件inode发生变化的时间。
mtime:此文件的修改时间。
如果有多个小文件(比如Web服务器的页面上有多个小图片),通常是没有必要记录文件的访问时间的,这样就可以减少写磁盘的I/O,可这要如何配置呢?
首先,修改文件系统的配置文件/etc/fstab,然后,在包含大量小文件的分区中使用noatime和nodiratime这两个命令。例如:
/dev/sda5 /data/pics ext3 noatime,nodiratime 0 0
这样文件被访问时就不会再产生写磁盘的I/O了。
11.修改SSH登录配置
SSH服务配置优化,请保持机器中至少包含一个具有sudo权限的用户,下面的配置会禁止root远程登录,代码内容如下所示:
sed -i 's@#PermitRootLogin yes@PermitRootLogin no@' /etc/ssh/sshd_config #禁止root远程登录
sed -i 's@#PermitEmptyPasswords no@PermitEmptyPasswords no@' /etc/ssh/sshd_config #禁止空密码登录
sed -i 's@#UseDNS yes@UseDNS no@' /etc/ssh/sshd_config /etc/ssh/sshd_config #关闭 SSH反向查询,以加快SSH的访问速度
12.增加具有sudo权限的用户
添加用户的步骤和过程比较简单(这里略过),由于系统已经禁止了root远程登录,因此需要一个具有sudo权限的admin用户,权限跟root相当,这里用vim命令,在打开的/etc/sudoers文件内容里添加如下内容:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
然后添加如下内容:
admin ALL=(ALL) ALL
如果在进行sudo切换时不想输入密码,可以做如下更改:
admin ALL=(ALL) NOPASSWD:ALL