Linux集群和自动化维1.4.1 系统的基础优化-阿里云开发者社区

开发者社区> 华章出版社> 正文

Linux集群和自动化维1.4.1 系统的基础优化

简介:

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

华章出版社

官方博客
官网链接