一、系统安装和分区经验

1、磁盘RAID经验

系统盘:raid1
数据盘:raid5/raid1/raid10

2、Linux版本选择之我见

推荐版本:Centos5.8/6.5x86_64对应RHEL5.8/6.5

3、Linux分区经验

系统分区和数据分区分离原则
LVM是否需要
业务对数据读写有要求的化不建议使用
多分区原则(/、/boot、/var、/usr、 /data)

4、swap使用建议

大内存服务器是否还需要swap?
线上服务器swap设置建议
一定要设置,象征意义的设置4-8G
阿里云真的不需要swap吗?
尽量设置下

5、软件安装建议

精简安装策略:
1、仅安装需要的,按需安装、不用不装
2、开发包、基本网络包、基本应用包

image.png
Centos7.x下的设置:
image.png

二、服务器网络配置

centos6引入一个netmanage 会造成配置IP不生效的问题。可以关掉这个服务

1、服务器IP地址配置

/etc/sysconfig/network-scripts/ifcfg- eth0/1/2.
重启网卡命令:
service network restart或者/etc/init.d/network restart

2、网关/主机名配置

/etc/sysconfig/network

3、DNS配置

/etc/resolv.conf

HOSTS文件配置

/etc/hosts

三、网络安全设置

1、Selinux配置

如何关闭selinux
cat /etc/selinux/config
SELINUX的状态:
enforcing开启状态
permissive提醒的状态
disabled关闭状态
命令行关闭:setenforce 0

2、iptables配置

/etc/sysconfig/iptables
推荐配置:
iptables -P INPUT ACCEPT # ssh链接的话把INPUT 链完全打开
iptables -F 清除所有规则来暂时停止防火墙 警告:这只适合在没有配置防火墙的环境中
通过iptables -L 看到如下信息
Chain INPUT (policy DROP 0 packets, 0 bytes) (注意 是DROP)
执行/sbin/iptables -F就肯定立马断开连接
当执行了
/sbin/iptables -P INPUT ACCEPT
再次通过iptables -L看信息的话就是
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
所以现在是可以安全使用
/sbin/iptables -F了
iptables -A INPUT -p tcp -m tcp —dport 80 -j ACCEPT
iptables -AINPUT -s 1.1.11 -p tcp-m tcp —dport22 -j ACCEPT
iptables -A INPUT -s 2.2.22 -p tcp-mtcp —dport22 -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT # 一般内网全开 外网有限制的开放
iptables -A INPUT-i lo -j ACCEPT

—web应用的安全防护措施
iptables -AINPUT -m state —state RELATED,ESTABLISHED - jACCEPT
iptables - A INPUT -p tcp -m tcp —tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE - DROP
iptables -A INPUT -p tcp -m tcp —tcp-flags FIN,SYN FIN,SYN - j DROP
iptables -AINPUT -p tcp -mtcp —tcp-flags SYN,RST SYN,RST-j DROP
iptables -A INPUT -p tcp -m tcp —tcp-flags FIN,RST FIN,RST-j DROP
iptables -AINPUT -ptcp -mtcp —tcp-flags FIN,ACK FIN -j DROP
iptables -A INPUT -p tcp -m tcp —tcp-flags PSH,ACK PSH - DROP
iptables -A INPUT -p tcp -m tcp —tcp-flags ACK,URGURG-jDROP

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
查看iptables命令
iptables -L -n

四、系统登录安全与SSH配置

1、授权用户登录与sudo设定

/etc/sudoers文件
=
常见配置:
iiveylinux ALL=(ALL)
NOPASSWD:ALL

2、ssh安全登录经验

备份:cp/etc/ssh/sshdconfig sshd config_bak(运维必备守则)
vi /etc/ssh/sshd_config
#SSH链接默认端[#不使用DNS反查,可提高ssh连接速度
UseDNS no
#关闭GSSAPI验证,可提高ssh连接速度
GSSAPIAuthentication no
#禁止root账号登陆
PermitRootLogin no

3、保持ssh连接配置

方法有以下两种

  • 修改server端的etc/ssh/sshd_config (windows在 ~/.ssh/config)

ClientAliveInterval 60 #server每隔60秒发送一次请求给client,然后client响应,从而保持连接
ClientAliveCountMax 3 #server发出请求后,客户端没有响应得次数达到3,就自动断开连接

systemctl reload sshd

  • 修改client端的etc/ssh/ssh_config (windows在 ~/.ssh/config)

ServerAliveInterval 60 #client每隔60秒发送一次请求给server,然后server响应,从而保持连接
ServerAliveCountMax 3 #client发出请求后,服务器端没有响应得次数达到3,就自动断开连接

五、更新yum源已经软件版本

1、常用yum源

epel源I: https://fedoraproject.org/wiki/EPEL
repoforge源: http://repoforge.org/use/
rpm-ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

2、升级系统内核以及更新软件清空yum缓存

yumclean all
生存缓存
yum makecache
开始更新系统以及内核
yum upgrade
必备软件
yum install ntpdate wget -y

六、调整服务器时间NTP设置

1、通过crontab设置时间同步

推荐时间服务器:ntp.sjtu.edu.cn
/usr/sbin/ntpdate ntp.sjtu.edu.cn>>/var/log/ntp.log 2>&1;/sbin/hwclock-w

2、架设ntp server

关注两个文件:
/etc/ntp/ntpserver.conf
/etc/ntp.conf

七、系统资源调优

1、关注ulimit命令

ulinit -a
ulimit -n(最大打开文件数)
常见案例日志:java.net.SocketException: Too many open files
相关配置文件:/etc/security/limits.conf
/etc/security/limits.d/90-nproc.conf(centos6.x版本)
soft nofile 65536
hard nofile 65536
ulimit -u(最大用户数)
* soft nproc 65536
root soft nproc unlimited

2、系统内核资源调优

ip_conntrack_max参数
常见案例日志:kernel:ipconntrack: table full, dropping packet
/proc/sys/net/ipv4/netfilter/ip
conntrackmax 或者
/proc/sys/net/ipv4/ip_conntrack_max (centos5.x)
/proc/sys/net/netfilter/nf_conntrack
max(centos6.x)

在/etc/sysctl.conf加入
net.ipv4.netfilter.ipconntrack max=655360 (centos5.x)
net.nfconntrack max = 100000 (centos6.x)
更新配置
sysctl -p
swappiness参数
表示使用swap的概率,此值越大,表示使用swap的概率越大。推荐配置如下:
查看目前配置:cat/proc/sys/vm/swappiness
添加如下内容到/etc/sysctl.conf
有redis 服务需要把这个参数设为0,一般10-30都可以,按需求
vm.swappiness=10
表示当内存使用率超过(100-vm.swappiness)%时,才开始使用swap。
我们线上web服务器配置参考(每天3亿的量)
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce-2
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recyde=1
net.ipv4.tcp_fin_timeout=10

net.ipv4.tcp_max_syn_backlog=20000
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768

net.core.wmem_default=8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

net.ipv4.tcp_timestamps=0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_tw_reuse=1

net.ipv4.tcp_mem=94500000 915000000 927000000
net.ipv4.tcp_max_orphans=3276800
net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_max_tw_buckets=80000
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_keepalive_intvl=15
net.ipv4.tcp_keepalive_probes =5

net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce=2

net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=10

net.ipv4.tcp_max_syn_backlog =20000
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768

net.core.wmem_default=8388608
net.core.rmem_default = 8388608
net.core.rmem_max=16777216
net.core.wmem_max=16777216

net.ipv4.tcp_timestamps=0
net.ipv4.tcp_synack_retries=2
net.ipv4.tcp_syn_retries=2

3、文件系统优化

  • ext2: linux下标准文件系统,无日志记录(inode)功能。
  • ext3:在ext2基础,上增加了日志记录功能(inode),仅支持32000个子目录
  • ex4 :ext3的后续版本,Linux2.6.28内核开始支持。无限子目录支持,快速fsck文件修复。
  • xfs:高性能文件系统,linux3.10内核开始默认支持。

建议:读操作频繁,同时小文件众多的应用:首选ext4文件系统,接下来依次是xfs、ext3
写操作频繁的应用,首选是xfs,接下来依次是ext4和ext3
对性能要求不高、数据安全要求不高的业务,ext3是比较好的选择。

八、精简系统服务和开机进程

1、线上服务器建议开启的服务

八、精简系统服务和开机进程1、线上服务器建议开启的服务
I
crond, network, syslog, sshd, iptables. udev-post, sysstat
快捷开启方法:
先关闭所有
for serv in ‘chkconfig —listlgrep 3:on|awk “{print $1}”;do chkconfig —level 3 $ serv
off;done
然后开启需要的服务:for serv in ]crond network syslog sshd iptables udev-post sysstat;do chkconfig
—level 3 $serv on;done

2、可删除的系统用户组

删除不必要的用户userdel adm
userdel lp
userdel sync
userdel shutdown
userdel halt
userdel news
userdel uucp
userdel video
userdel games
userdel gopher
userdel ftp
#删除不必要的群组groupdel adm
groupdel lp
groupdel news
groupdel uucp
groupdel games
groupdel dip

九、linux故障排查思路

1、重视报错提示信息

每个错误的出现都是给出错误提示信息,一般情况下这个提示基本定位了问题的所在,因此一定要重视这个报错信息,如果对这些错误信息视而不见,问题永远得不到解决.

2、永远不要忘记日志文件

日志是排查问题的第一思路,一定要学会查看日志的习惯。
系统日志:dmesg(内存信息)、/var/log/messages、 /var/log/secure(ssh登陆日志)
应用日志:
Apache : $APACHE_BASE/logs/error_log $APACHE_BASE/logs/access_log
Nginx : $NGINX_BASE/ logs/error_log $NGINX_BASE/logs/access_log
Tomcat : $TOMCAT BASE/logs/catalina.out

3、分析、定位问题、解决问题

综合分析过程,要以日志为导向,配合应用环境,根据报错信息,排除故障。

4、网络故障排除思路

(1)网络硬件传输问题
(2)检查网卡是否能正常工作,可以从网卡是否正常加载、网卡IP设置是否正确
(3)检查DNS是否设定正确
(4)服务是否正常打开
(5)访问权限是否打开(iptables/selinux)
(6)局域网主机之间联机是否正常
二、影响Linux性能的各种因素1系统硬件资源
多核CPU单个核心的性能是单个单核个物理 CPU性能的30%左右
(1)CPU
如何判断多核CPU与超线程
消耗CPU的业务:动态web服务、mail服务
(2)内存
物理内存与swap的取舍
选择64位Linux操作系统
消耗内存的业务:内存数据库(redis/hbase/mongodb)
(3)磁盘I/O
RAID技术(RAIDO/1/5/01/10)
SSD磁盘
消耗磁盘的业务:数据库服务器
(4)网络带宽
网卡/交换机的选择
操作系统双网卡绑定
2、操作系统相关资源(1)系统安装优化
磁盘分区、RAID设置、swap设置
(2)内核参数优化
ulimit-n(最大打开文件数)
ulimit -u(最大用户数)
(3)文件系统优化
ext2: linux下标准文件系统,无日志记录(inode)功能。
ext3:在ext2基础,上增加了日志记录功能(inode),仅支持32000个子目录
ex4 :ext3的后续版本,Linux2.6.28内核开始支持。无限子目录支持,快速fsck。
xfs:高性能文件系统,linux3.10内核开始默认支持。
消耗带宽的业务:hadoop平台、视频业务平台

5、程序问题此类问题

需要开发人员查看代码介入处理。但作为运维人员需要给出程序问题的有力证据。

十、Linux性能优化工具

1、cpu性能评估工具

vmstat

利用vmstat命令可以对操作系统的内存信息、进程状态CPU活动等进行监视。

常用方式:vmstat 3 5
表示每3秒更新一次输出信息,统计5次后停止输出。
procs — ————-memory————— —-swap— ——-io—— -system— ———cpu——-
r b swpd free buff cache si so bi bo in cs us sy id wa st
4 0 0 257844 83352 1195656 0 0 1 35 8 5 1 1 98 0 0
0 0 0 257816 83352 1195672 0 0 0 65 201 462 1 1 98 0 0
0 0 0 257008 83352 1195672 0 0 0 20 220 463 1 1 99 0 0
0 0 0 260884 83352 1195676 0 0 0 31 187 412 0 1 98 0 0
0 0 0 260884 83352 1195676 0 0 0 11 197 411 0 1 99 0 0
r 正在处理的进程数,如果大于cpu核心数说明cpu任务比较重
b 正在等待资源的进程数 不能经常大于CPU总核数
si 临时数据放入交换分区的数量
so 内存交换区放入物理内存的数量
bi 快设备读取数据的大小 单位KB
bo 写入到快设备的数量大小
in 某一个事件间隔内检测到的每秒设备的中断数
cs 某一个事件间隔内每秒上下文切换数
us 用户进程消耗cpu百分比
sy 系统进程(内核)消耗cpu百分比 # us+sy 长期大于80%说明cpu资源不是很足
id 空闲状态占比
wa I/O等待占比 # 超过20% 检查磁盘I/O是否存在问题 超过50%大概率存在问题
st

iostat(需要安装sysstat工具包)

iostat是1/0 statistics(输入/输出统计)的缩写,主要的功能是对系统的磁盘I/O操
作进行监视
常用方式:iostat -c 3 5
其中,-c表示显示CPU的使用情况,-d: 显示磁盘的使用情况(默认)。

Device tps kB_read/s kB_wrtn/s kB_read kB_wrtnvda
4.61 0.84 34.93 3243099 135130745
scd0 0.00 0.00 0.00 6688 0
loop0 0.00 0.00 0.00 2102 0

-c
avg-cpu: %user %nice %system %iowait %steal %idle
0.82 0.02 0.83 0.16 0.00 98.18
avg-cpu: %user %nice %system %iowait %steal %idle
0.67 0.00 0.33 0.00 0.00 99.00

%user #用户空间的CPU使用
#%nice 改变过优先级的进程的CPU使用率
#%system 内核空间的CPU使用率
#%iowait CPU等待IO的百分比
#%steal 虚拟机的虚拟机CPU使用的CPU
#%idle 空闲的CPU

uptime

uptime是监控系统性能最常用的一个命令,主要用来统计系统当前的运行状况,输出的信 息依次为系统现在的时间、系统从上次开机到现在运行了多长时间、系统目前有多少登陆用户、系统在一分钟内、五分钟内、十五分钟内的平均负载。
[root@VM-0-5-centos ~]# uptime
当前时间 启动 了 44天.. 当前登陆用户1 1/5/15/分钟之内整体的负载状态
18:35:28 up 44 days, 18:49, 1 user, load average: 0.00, 0.01, 0.00

top

2、内存性能评估

free

free命令是监控linux内存使用状况最常用的指令
常见用法:free-mimage.png Cache:缓存区,是高速缓存,是位于CPU和主内存之间的容量较小但速度很快的存储器,因为CPU的速度远远高于主内存的速度,CPU从内存中读取数据需等待很长的时间,而 Cache保存着CPU刚用过的数据或循环使用的部分数据,这时从Cache中读取数据会更快,减少了CPU等待的时间,提高了系统的性能。
Cache并不是缓存文件的,而是缓存块的(块是I/O读写最小的单元);Cache一般会用在I/O请求上,如果多个进程要访问某个文件,可以把此文件读入Cache中,这样下一个进程获取CPU控制权并访问此文件直接从Cache读取,提高系统性能。
Buffer:缓冲区,用于存储速度不同步的设备或优先级不同的设备之间传输数据;通过buffer可以减少进程间通信需要等待的时间,当存储速度快的设备与存储速度慢的设备进行通信时,存储慢的数据先把数据存放到buffer,达到一定程度存储快的设备再读取buffer的数据,在此期间存储快的设备CPU可以干其他的事情。
Buffer:一般是用在写入磁盘的,例如:某个进程要求多个字段被读入,当所有要求的字段被读入之前已经读入的字段会先放到buffer中。

sar(sysstat工具包)/pidstat

此两个命令主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存设备。
三个公用参数: -u(获取CPU状态) -r(获取内存状态) -d(获取磁盘)
sar
sar -u 3 获取所有进程3秒内的cpu状态

pidstat -r -p 1 3 每3秒获取PID为1的进程在3秒内的状态
image.png
pidstat
image.png
统计某一个进程
pidstat -r -p 1 3
image.png

3、磁盘性能评估

iostat -d 2 3
image.png
pidstat -d -p 2 3
image.pngsar -d 2 3
image.png

4、网络性能评估

ping
netstat
netstat -i(查看路由情况)
netstat -r(查看网络接口状态)
mtr/traceroute命令
跟踪网络路由状态,推荐使用mtr,动态跟踪网络路由,用于排除网络问题非常方便。

一般在windows 来判断网络连通性用ping 和tracert,ping的话可以来判断丢包率,tracert可以用来跟踪路由,在Linux中有一个更好的网络连通性判断工具,它可以结合ping nslookup tracert 来判断网络的相关特性,这个命令就是mtr

  1. [root@10.10.90.97 ~]#mtr -h
  2. usage: mtr [-hvrctglspni46] [--help] [--version] [--report]
  3. [--report-cycles=COUNT] [--curses] [--gtk][--raw] [--split]
  4. [--no-dns] [--address interface][--psize=bytes/-s bytes]
  5. [--interval=SECONDS] HOSTNAME [PACKETSIZE]

mtr -h提供帮助命令
mtr -v显示mtr的版本信息
mtr -r已报告模式显示
mtr -s用来指定ping数据包的大小
mtr -nno-dns不对IP地址做域名解析
mtr -a来设置发送数据包的IP地址 这个对一个主机由多个IP地址是有用的
mtr -i使用这个参数来设置ICMP返回之间的要求默认是1秒
mtr -4IPv4
mtr -6IPv6

  1. [root@10.10.90.97 ~]# mtr -r -c 15 202.108.33.94 # -c:--report-cycles COUNT 默认10
  2. FOCUS9097 Snt: 15 Loss% Last Avg Best Wrst StDev
  3. 220.181.61.252 0.0% 1.9 3.4 1.8 12.9 3.1
  4. 220.181.17.217 0.0% 0.5 0.5 0.4 0.8 0.1
  5. 220.181.16.17 0.0% 0.5 0.6 0.5 2.3 0.5
  6. 202.97.53.14 0.0% 0.7 0.7 0.7 0.7 0.0
  7. 219.158.35.1 0.0% 0.9 0.8 0.8 0.9 0.0
  8. 219.158.5.81 0.0% 1.3 2.8 1.2 22.8 5.5
  9. 123.126.0.138 0.0% 1.1 1.1 1.1 1.2 0.0
  10. 61.148.153.126 0.0% 13.8 7.4 1.6 60.4 15.5
  11. 61.148.143.22 0.0% 1.7 1.6 1.5 1.8 0.1
  12. 210.74.178.198 0.0% 1.6 1.6 1.4 1.7 0.1
  13. 202.108.33.94 0.0% 1.5 1.5 1.4 1.7 0.1

第一列 显示的是IP地址和本机域名,这点和tracert很像
snt 设置每秒发送数据包的数量,默认值是10 可以通过参数 -c来指定。
Loss% 是显示的每个对应IP的丢包率
Last 显示的最近一次的返回时延
Avg 是平均值 这个应该是发送ping包的平均时延
Best 是最好或者说时延最短的
Wrst 是最差或者说时延最常的
StDev 是标准偏差接下来接着说相关参数:

6、一般系统性能标准

性能因素 糟糕
CPU user% + sys%< 70% user% + sys%=85% user%+sys% >=90%
内存 Swap In (si) =0
Swap Out (so)=0
Per CPU with 10 page/s More Swap In & Swap Out
磁盘 iowait % < 20% iowait %=35% iowait % >=50%

%user:表示CPU处在用户模式下的时间百分比。
%sys:表示CPU处在系统模式下的时间百分比。
%iowait:表示CPU等待输,入输出完成时间的百分比。
swapin:即si,表示虚拟内存的页导入,即从SWAP DISK交换到RAM。