2.4 网站集群架构系统优化
2.4.1 集群节点模板机统一基础优化
1.基础优化操作项:规范功能目录
创建存储软件目录(/server/tools),创建存储脚本目录(/server/scripts)。
# mkdir -p /server/tools # mkdir -p /server/scripts
2.基础优化操作项:配置hosts解析信息
设置本地服务主机名称与IP地址映射关系。
# 配置/etc/hosts解析文件记录信息 cat >/etc/hosts<<EOF 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.1.5 lb01 172.16.1.6 lb02 172.16.1.7 web01 172.16.1.8 web02 172.16.1.9 sweb01 172.16.1.10 sweb02 172.16.1.31 nfs01 172.16.1.41 backup 172.16.1.51 db01 db01.etiantian.org 172.16.1.61 m01 EOF
3.基础优化操作项:修改主机名称
修改主机名称,命令如下。
# hostnamectl set-hostname backup #<==设置主机名为backup。
4.基础优化操作项:更新yum源信息
服务器运行过程中,难免需要进行软件的更新,或者进行新服务软件的部署,此时就需要用到yum功能进行软件下载安装与更新,而yum源恰恰关系到软件能否下载成功和软件下载的速率,所以优化yum源也是对系统优化的关键一步。
第一,就近使用yum源地址,安装软件更快。
curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/ Centos-7.repo
第二,安装RHEL/CentOS官方源不提供的软件包。
curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 说明:EPEL(Extra Packages for Enterprise Linux企业版Linux的额外软件包)是Fedora 小组维护的一个软件项目,为RHEL/CentOS提供它们默认不提供的软件包。
5.基础优化操作项:优化安全设置
对于内网环境而言,部分安全方面的设置是非必需的,可以进行关闭,以避免不必要的安全策略影响系统服务的正常运行。
# 1.关闭SELinux sed -i 's#SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config grep SELINUX=disabled /etc/selinux/config#<==查看修改SELinux的状态。 setenforce 0 #<==临时关闭SELinux。 getenforce #<==查看SELinux状态。 说明:关闭系统的安全服务SELinux # 2.关闭firewalld防火墙服务 systemctl disable firewalld #<==禁止firewalld防火墙开机自启动。 systemctl stop firewalld #<==关闭firewalld防火墙服务。 systemctl status firewalld #<==查看firewalld关闭的状态。 说明:通知系统的防火墙功能,切记只是针对局域网内部的机器关闭,连接外网的服务器设备还需开启
6.基础优化操作项:精简开机启动程序
系统在启动后,部分软件是伴随系统一起启动的,但是系统启动本身就是一个很耗费时间的过程,如果一些非必需启动项也在系统启动时占用启动资源,多少还是会影响系统性能的;并且有些自启动的软件并不需要进行启动,很可能有些用户不熟悉的软件存在安全隐患,在启动后无形中增加了系统安全风险。因此建议,一些不必要的软件可以设置为不随系统开机自动运行,只将一些必须运行的服务程序,设置为开机自启动。
systemctl list-unit-files |grep enable|egrep -v "sshd.service|crond.service| sysstat|rsyslog|^NetworkManager.service|irqbalance.service"|awk '{print "systemctl disable", $1}'|bash #<==批量处理命令。 [root@oldboy ~]# systemctl list-unit-files |grep enable #<==处理后结果。 autovt@.service enabled crond.service enabled getty@.service enabled NetworkManager.service enabled rsyslog.service enabled sshd.service enabled sysstat.service enabled [root@oldboy ~]# netstat -lntup #<==重启后查看系统开启的端口情况。 Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 7039/sshd tcp6 0 0 :::22 :::* LISTEN 7039/sshd
企业生产最小化原则有以下几个:
1)安装软件包最小化。
2)用户权限最小化。
3)目录文件权限最小化。
4)自启动服务最小化。
5)服务运行用户最小化。
7.基础优化操作项:设置普通用户提权操作(可选优化)
对于系统运维工作中,一些普通用户需要分担超级管理员root的工作压力,因此需要将相应的root权限进行下放,所以要将相应普通用户进行提权。
# 提权oldboy可以利用sudo。 useradd oldboy echo 123456|passwd --stdin oldboy \cp /etc/sudoers /etc/sudoers.ori echo "oldboy ALL=(ALL) NOPASSWD: ALL " >>/etc/sudoers tail -1 /etc/sudoers visudo -c
8.基础优化操作项:设置系统字符集
设置系统字符集的命令如下。
# 设置系统中文UTF8字符集。 [root@oldboyedu ~]# cat /etc/locale.conf LANG="en_US.UTF-8"
修改命令如下:
cp /etc/locale.conf{, .ori} localectl set-locale LANG="zh_CN.UTF-8" cat /etc/locale.conf
9.基础优化操作项:时间同步设置
在服务架构中,有时需要进行主备连接,或者Master服务端与Agent服务端的连接,这样的连接可能涉及数据信息的同步,而同步时就需要借用系统时间生成时间戳,判断周期性同步的间隔,如果同步的服务器之间时间不统一,可能会造成同步终端间数据同步异常。
# 设置系统时间同步(Chrony是CentOS7推荐的时间服务器)。 yum install ntpdate -y #<==这里依然使用NTP时间服务软件。 /usr/sbin/ntpdate ntp3.aliyun.com echo '#crond-id-001:time sync by oldboy' >>/var/spool/cron/root echo "*/5 * * * * /usr/sbin/ntpdate ntp3.aliyun.com >/dev/null 2>&1">>/var/ spool/cron/root crontab -l
设置定时任务,进行每5分钟的时间同步操作。
10.基础优化操作项:提升命令行操作安全性(可选优化,测试环境下建议不做)
提升命令行操作安全性的命令如下。
# 提升命令行安全(可选配置) echo 'export TMOUT=300' >>/etc/profile #<==设置会话超时时间为300秒。 echo 'export HISTSIZE=5' >>/etc/profile #<==命令行历史记录保留5个。 echo 'export HISTFILESIZE=5' >>/etc/profile #<==历史记录文件保留5个。 tail -3 /etc/profile . /etc/profile
11.基础优化操作项:加大文件描述符
一般情况下,一台服务器被访问时会启用很多的程序,而启动每一个程序的进程都会占用文件服务器描述符,因此有时需要加大文件描述符的大小,从而不致影响到程序的启动。
ulimit -SHn xxxx 说明:加大文件描述符命令,但只是临时的,重启系统或重新登录系统后需要重新设置。 echo '* - nofile 65535' >>/etc/security/limits.conf 说明:永久生效,但需要重新进入系统查看配置文件是否生效。 # 实例演示:加大文件描述符。 echo '* - nofile 65535 ' >>/etc/security/limits.conf tail -1 /etc/security/limits.conf ulimit -SHn 65535 ulimit -n #<==命令方式查看配置结果。
12.基础优化操作项:优化系统内核
利用相应内核参数数值的优化,从而影响系统的安全性、稳定性、高效性。
cat >>/etc/sysctl.conf<<EOF net.ipv4.tcp_fin_timeout = 2 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_keepalive_time = 600 net.ipv4.ip_local_port_range = 4000 65000 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.tcp_max_tw_buckets = 36000 net.ipv4.route.gc_timeout = 100 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_synack_retries = 1 net.core.somaxconn = 16384 net.core.netdev_max_backlog = 16384 net.ipv4.tcp_max_orphans = 16384 #以下参数是对Iptables防火墙的优化,防火墙不开会提示,可以忽略。 net.nf_conntrack_max = 25000000 net.netfilter.nf_conntrack_max = 25000000 net.netfilter.nf_conntrack_tcp_timeout_established = 180 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120 net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60 net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.wmem_max = 16777216 net.core.rmem_max = 16777216 EOF sysctl -p
说明:以上配置参数可以统一放置在/etc/sysctl.conf内核文件中,利用sysctl -p命令,使之内核文件中,修改的内容生效
13.基础优化操作项:安装系统常用软件
CentOS6和CentOS7都要安装的企业运维常用基础工具包如下。
yum install tree nmap dos2unix lrzsz nc lsof wget tcpdump htop iftop iotop sysstat nethogs -y
CentOS7要安装的企业运维常用基础工具包如下。
yum install psmisc net-tools bash-completion vim-enhanced -y
14.基础优化操作项:优化SSH远程连接效率
配置远程连接SSH配置文件,使之连接效率更高、连接更安全。
\cp /etc/ssh/sshd_config{, .ori} 说明:备份 sed -i -e "17s/.*/Port 52113/g" /etc/ssh/sshd_config 说明:修改SSH服务监听的默认22端口,使用自定义指定的监听端口进行连接 sed -i -e "19s/.*/ListenAddress 172.16.1.41/g" /etc/ssh/sshd_config 说明:修改SSH服务监听的默认IP地址,默认为0.0.0.0全部监听,可以自定义指定监听内网IP地址 sed -i -e "38s/.*/PermitRootLogin no/g" /etc/ssh/sshd_config 说明:关闭SSH登录root用户权限,提升系统安全性 sed -i -e "64s/.*/PermitEmptyPasswords no/g" /etc/ssh/sshd_config 说明:禁止空密码用户SSH连接登录系统 提别说明:以上均采用sed替换方式修改SSH服务配置文件,替换时指定的行号会根据不同版本的系统 有变化,最好以工作中常用的系统为主,修改相应行号。 #如果是CentOS6还要修改SSH配置,防止连接速度慢的优化 即把UseDNS yes改为UseDNS no,把GSSAPIAuthentication yes改为GSSAPIAuthentication no
特别强调,为了减少集群搭建的难度,本书仅仅显示做了如下的配置优化。
[root@oldboy ~]# grep oldboy -A 5 /etc/ssh/sshd_config PermitEmptyPasswords no UseDNS no GSSAPIAuthentication no
15.基础优化操作项:锁定关键系统文件优化
对关键系统账号文件和启动文件进行锁定,防止用户篡改。
chattr +i /etc/passwd /etc/shadow /etc/group #<==锁定关键账户文件,防删防改。 chattr +i /etc/inittab /etc/fstab /etc/sudoers #<==锁定其他关键文件。 lsattr /etc/passwd /etc/shadow /etc/group /etc/inittab /etc/fstab /etc/ sudoers #<==查看结果。 mv /usr/bin/chattr /opt/oldboy #<==移走关键命令。 cp /usr/bin/xargs /usr/bin/chattr#<==用其他命令伪装一下,用户需妥善保存关键命令
16.基础优化操作项:清理系统版本信息
清理系统版本信息的命令如下。
说明:系统对外显示的信息越少越安全 [root@web01~]# cat /etc/issue \S Kernel \r on an \m [root@web01~]# cat /etc/issue.net \S Kernel \r on an \m [root@web01~]# >/etc/issue.net [root@web01~]# >/etc/issue [root@web01~]# cat /etc/issue [root@web01~]# >/etc/issue.net
17.基础优化操作项:为GRUB增加密码
默认情况下,用户可以随意进入GRUB引导界面,这样就会存在安全隐患。例如,有人靠近设备就可以破解root密码,为了防止别人进入单用户模式破解密码,可以添加GRUB密码。
[root@web01~]# grub2-setpassword Enter password: Confirm password: [root@web01~]# cat /boot/grub2/user.cfg GRUB 2_PASSWORD=grub.pbkdf2.sha512.10000.6EF80A70EC860EDACB2D3049195338DE2F3F3 0D3629C57BC1825E4DB4C260E743B5454FEEBCBA4002E8CD27F08ECD9B67D7456F99C0FB66 4481F4F4F28B76565.52C99D9A59314094A560F670B194E0E2548A3D3658E7840CE56A2F76 C7082BEDD98684E07A7F237EAAE9334B5E190FBB77BDF6D429FB4F3D589CCEE610B795C3
此时系统重启后,进入系统GRUB菜单后就会出现输入密码的提示(见图2-3)。
图2-3 设置密码后进入GRUB菜单提示输入密码图
18.基础优化操作项:禁止用户ping服务器IP地址
禁止用户ping服务器IP地址的目的,也是让黑客用户以为服务器停机或者不可用,或禁止返回有效信息。
[root@web01~]# echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.conf [root@web01~]# sysctl -p net.ipv4.icmp_echo_ignore_all = 1
2.4.2 集群节点模板机统一扩展优化
1.扩展优化操作项:优化系统提示符(可根据个人喜好选择)
有时输入命令或查询信息时会刷屏输出很多信息,此时会出现比较尴尬的局面,不知输出的信息是从哪看起,可能正常都应该从输入命令后的信息看起,但如果刷屏好多页,如何快速定位输入命令的命令行呢?如果有颜色进行区分,就能回滚屏幕进行快速定位了。
# echo "PS1='\[\e[32;1m\][\u@\h \W]\\$ \[\e[0m\]'" >>/etc/profile # source /etc/profile
2.扩展优化操作项:定义系统别名
系统别名只是系统中的一个小功能,虽然功能简单,但用处非常大。有时需要输入的命令会跟上一长串的参数信息,而这样的命令又经常使用,因此定义别名可以简化命令的输出,提升工作的效率。
# echo "alias grep='grep --color=auto'" >>/etc/profile 说明:定义grep命令查找的内容有颜色显示,便于查看,CentOS7默认已经配置好了。 # echo "alias ll='ls -l --color=auto --time-style=long-iso'" >>/etc/profile 说明:定义ls命令的长格式显示,是输出信息格列完全对齐显示 # source /etc/profile 提示:以上只是笔者工作中常用的基本别名设置,读者可根据实际工作情况自行定义。
3.扩展优化操作项:修改yum.conf文件配置信息
将yum.conf中的keepcache=0改为keepcache=1,为日后一键安装网站集群留好rpm及依赖工具包。
[root@oldboy ~]# vim /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/$releasever #<==定义保存yum安装软件包的默认 路径。 说明:$basearch变量信息默认为# uname -m命令输出结果,即显示系统是64位还是32位平台信息 $releasever变量信息默认为系统的发行版本信息,如果是CentOS6版本下载的,发行版本为 6,即显示6作为目录,以上只是保存的默认路径信息,软件包下载时也有默认保存路径。 keepcache=1 #<==设置为1表示保存yum安装软件包,设置为0表示不保存。 debuglevel=2 #<==调试级别(0-10),默认为2(具体调试级别的应用,笔者也不 了解)。 logfile=/var/log/yum.log #<==yum的日志文件所在的位置。 exactarch=1 #<==在更新的时候,是否允许更新不同版本的rpm包,比如是否在 i386上更新i686的rpm包。 obsoletes=1 #<==这是一个update的参数,具体请参阅yum(8),简单来说就是 相当于upgrade,允许更新陈旧的rpm包。 gpgcheck=1 #<==是否检查GPG(GNU Private Guard),一种密钥方式签名。 plugins=1 #<==是否允许使用插件,默认是0不允许,但是我们一般会用yum- fastestmirror这个插件。 installonly_limit=5 #<==允许保留多少个内核包。 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=19&\ ref=http://bugs.centos.org/bug_report_page.php?category=yum distroverpkg=centos-release
4.扩展优化操作项:自动快速配置主机名和IP地址
自动快速配置主机名和IP地址的命令如下。
[root@oldboy scripts]# cat modify.sh #! /bin/sh if [ $# -ne 2 ]; then echo "/bin/sh $0 hostname PartIP" exit 1 fi hostnamectl set-hostname $1 sed -i "/IPADDR/s#200#$2#g" /etc/sysconfig/network-scripts/ifcfg-eth0 #<==模板机IP最后8位默认是200。 sed -i "/IPADDR/s#200#$2#g" /etc/sysconfig/network-scripts/ifcfg-eth1 systemctl restart network exit
执行命令如下。
# sh modify.sh主机名IP地址后8位,在VMware中的虚拟机里执行。 [root@web01 scripts]# sh modify.sh oldboy 7 #<==7是172.16.1.7,结尾的7。
2.4.3 集群节点模板机统一优化总结
Linux基础优化与安全重点小结
1)不用root登录管理系统,而以普通用户登录通过sudo授权管理。
2)更改默认的远程连接SSH服务端口,禁止root用户远程连接,甚至更改SSH服务只监听内网IP(本章未优化端口、用户以及服务监听的IP)。
3)定时自动更新服务器的时间,使其和互联网时间同步。
4)配置yum更新源,从国内更新源下载安装软件包。
5)关闭SELinux及Iptables/firewalld。
在工作场景中,如果有外部IP一般要打开防火墙,高并发高流量服务器可能无法开启。
6)调整文件描述符的大小,进程及文件的打开都会消耗文件描述符。
7)精简并保留必要的开机自启动服务(如crond、sshd、Network、rsyslog、sysstat、irqbalance)。
8)Linux内核参数优化/etc/sysctl.conf,执行sysctl -p生效。
9)更改系统字符集为“zh_CN.UTF-8”,使其支持中文,防止出现乱码。
10)锁定关键系统文件如/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/etc/inittab,处理以上内容后把chattr、lsattr改名为oldboy并转移,这样就安全多了。
11)清空/etc/issue、/etc/issue.net,去除系统及内核版本登录前的屏幕显示。
12)清除多余的系统虚拟用户账号(不是在严苛环境下不做)。
13)为GRUB引导菜单加密码。
14)禁止主机被ping。
15)打补丁升级系统及有已知漏洞的软件。
16)全网域名和自身内网IP实现hosts对应解析。
17)安装系统默认没有的常用工具。
18)提升命令行操作安全性(超时和历史记录)。