|
) B: _) n! J8 Y; b8 F
服务器架构服务器系统为Centos7首先需要知晓系统的对外的架构一般架构:1.域名--->云服务器(ECS)2.域名--->CDN--->云服务器(OSS)3.域名--->CDN--->云服务器ECS+数据库RDS+缓存Redis
+ d4 a* E @2 r" j( J$ g4 ^- R 4.域名--->CDN--->负载均衡--->云服务器ECS+数据库RDS(主从)+缓存Redis5.域名--->CDN-->WAF防火墙--->负载均衡--->云服务器ECS+数据库RDS(主从)+缓存Redis 8 K1 x5 R$ Z7 z- N" U; R
再根据实际情况出现的问题,一步步排查。
5 @& W4 x' v. j1 m* }6 b 发现问题一、发现问题首先发现问题,及时确定哪个服务出现问题,以便方便快速定位问题。查找对应的域名和设备Zabbix监控发钉钉告警
$ ~# z. D9 I0 r4 M, w% u 阿里云监控告警短信【阿里云】尊敬的***,云监控-云数据库RDS版于发生报警,CPU使用率(91.88>=80),持续时间4分钟3.shell脚本邮件告警 2 ^. o8 v8 `, d% U' ]! Z
4.其他同事客服、市场同事等钉钉、电话报告出现的问题二、快速定位问题网络带宽(CDN是否异常)域名是否解析到源站登录阿里云CDN后台查看相应流量负载均衡检查负载均衡是否正常运行,是否流量异常应用层服务器
/ r R' v; ^4 p- Z0 n ECS服务器负载是否正常、cpu、内存负载是否过高,硬盘使用率是否达到100%等缓存服务器redis服务器负载是否正常、内存使用率如何数据库服务器数据库连接数是否正常列出当前用户的所有连接信息;show
6 z; O( _4 y$ l$ m fullprocesslist; 杀进程,时长消耗太长的sql进程selectconcat(kill , id, ;) from information_schema.processlist where
0 J9 K/ ^! S/ Y% l' k command != Sleepandtime > 2*60orderbytimedesc; 让将sql语句发给后端研发分析远程连接服务器问题:CPU高,负载高,访问慢(数据库正常)系统层面查看负载查看负载、CPU、内存、上线时间、高资源进程 / a& l2 X, I$ d
# top( s8 |/ b" O. t9 v S
安装: yum -y install htop. d" H$ E& G1 y0 A
# htop 查看top服务器负载,内存消耗,df -h查看硬盘top& [0 ^3 S, R3 d* R# F& Y: O0 S
df 查看nginx日志如果有nginx日志,进入nginx日志目录按照日志大小排列
& _9 t5 C/ k% l- [3 f+ k- Y: Z2 ] 判断日志访问、相应时长,url等cd/data/wwwroot/logll-Srhtail-f XXX.XXX.COM-access.log分析日志,找出最多的IP日志、最多的URL等GoAccess、ELK后台查看日志 ) t5 O+ J( j( z: j
查看磁盘使用情况df -h查看磁盘当前情况iostat-x-k33avg-cpu:%user%nice%system%iowait%steal%idle3.700.002.250.410.0093.64 / _# M4 [7 N: S2 b e5 C; q
Device:rrqm/swrqm/sr/sw/srkB/swkB/savgrq-szavgqu-szawaitr_awaitw_awaitsvctm%utilvda0.010.830.301.4811.34
! ? S# l2 a- I8 G. V( r4 G% h: Y 12.1326.300.016.157.415.890.240.04vdb0.000.170.020.280.082.7519.150.003.222.013.290.260.01vdc0.100.84
7 n; d* E3 [. z R 3.090.56105.2220.5768.940.027.963.2933.741.330.49如果发现当前磁盘忙碌,则查看是哪个PID在忙碌:安装yuminstall-yiotop# iotop -o -P -k -d 5
6 Q5 M% S# I: g% Q! S; h( X 查看对外服务和端口# netstat -tunplActiveInternetconnections(onlyservers)ProtoRecv-QSend-QLocalAddressForeignAddress # j7 J: L) V8 V* \* ]/ u6 ]! B
StatePID/Programnametcp000.0.0.0:629200.0.0.0:*LISTEN29177/vsftpdtcp000.0.0.0:80800.0.0.0:*LISTEN4393 0 G% }: w5 j; G5 D
/httpdtcp000.0.0.0:73000.0.0.0:*LISTEN 4697/php-fpm:maste查看 PID 具体在安装yum install lsoflsof-p PIDlsof
6 y+ D3 v: \! H: k -p 29177lsof-p 4697 查看系统日志tail -400f /var/log/messages
( O4 ^- Z# g3 J* D9 v tail -f /var/log/messages) n: Z2 e+ O8 U0 ~9 r8 w& p5 X
tail -n100 /var/log/messages- e* s: i9 }: |+ d. I6 B
head -n100 /var/ " @/ \1 \( [% K) u$ v! t1 p
log/messages查看简化线程树pstree -a >> /root/pstree.log网络问题ping域名pingwww.XXX.com查看网络节点情况安装: yuminstall-ytraceroute 5 u( L( v4 a5 R& |7 U6 T3 z
traceroutewww.baidu.com问题:CPU 低,负载高,访问慢(数据库)判断的数据库1.慢查询检查慢查询日志,可能是慢查询引起负载高,根据配置文件查看存放位置:log_slow_queries * O6 z t! b# @& x' r
2.是否有系统瓶颈升级系统cpu、内存、硬盘,优化架构增加主从,一主多从等3.sleep连接是否过多showfullprocesslist;4.查看最大连接数查看设置的最大连接数8 O6 o; p5 w- t2 a7 Z0 X
showvariables。
, X- C/ j: i9 L5 r: ] likemax_connections;
; u" J5 z& d6 ?7 z6 `/ G 重新设置最大连接数
7 X* U/ w' B8 P9 z setGLOBAL max_connections=300Nginx防护基本命令如果有一些异常访问,可以加入配合阿里云的WAF访问最多真实用户的IP。
" x) S' i0 s" c5 J0 R# s cat www.XXXX.com-access.log |awk {print $5}| awk -F":"{print $NF} |sort|uniq -c|sort -nr|head -10查看访问排行前10的url
$ F6 m& f [3 Y& s) [8 k# l8 G cat www.XXX.com-access.log | awk {print $10} | sort | uniq -c | sort -nr | head -n 10执行时间最长10条cat www.XXX.com-access.
, {: L/ i$ d0 _# F* } log | sort -nr | head -n 10查看http_referer来路:cat www.XXX.com-access.log | awk -F"from:"{print $NF} |sort ) Q: H+ _% L0 @% |7 u9 F4 S
|uniq -c|sort -nr|head -10封IP,查看特定的referer来源地址服务器防火墙封ip封IP段/sbin/iptables-IINPUT-s61.37.80.0/24-jDROP
4 s1 Z, X% F7 f ] #屏蔽单个IP的命令是deny123.45.6.7#封整个段即从123.0.0.1到123.255.255.254的命令deny123.0.0.0/8禁止特定用户代理(User Agents)访问if (
; r B6 Z+ A+ s! u, C( x, S/ t $http_user_agent~* (wget|curl|Firefox) ) {
# _% k3 \2 F" x G6 n4 _ return404;* B& S v9 W$ ~
}特定的地址攻击做跳转rewrite ^/accounts/\+\$str\+ http://127.0.0.1/ 8 w, O4 {8 k9 y: F7 f2 g, Z/ R
redirect;根据 user_agent 控制客户端访问location / {
' S/ g s+ k; C3 ]& B/ W1 h if ($http_user_agent~ bingbot/2.0|MJ12bot/v1.4.2|Spider/3.0|YoudaoBot|Tomato|Gecko/20100315) ' i* _ _4 h6 i) R
{
& U2 T/ K1 {9 Z7 w. o. q: Q. J return403;
( d) c4 I o, x6 \8 E# J/ Q. m. ~ }
3 e+ s9 b1 ~6 t) ?' w- b" D }图片防盗链valid_referersnoneblocked *.XXX.com server_names ~\.google\. ~\.baidu\.;
, }) S8 p9 m6 g1 v. E & B6 U j$ f5 M% M
if ($invalid_referer) {
" H/ k6 a+ _. [; Z& s- v # return 403;rewrite ^/ http://www.XXX.com/daoling.png;
+ K" {: A% [5 A- S& i }
& ]8 l% K6 _2 T! A2 V 不允许host为localhost访问if ($host = localhost) {" c! h! t# H. }" h
return403;9 T' p* Z8 m) Q9 x0 H4 U7 @: }
}不允许agent为空if ($http_user_agent & a5 i/ \4 O/ y$ ^0 w6 A7 s
~ ^$){! J. P) F7 w( K4 r4 M
return403;' L& m0 s3 T0 m1 k3 \
}不允许绑定host主机访问if ($http_x_forwarded_for~ ^$){
( a! W! H5 q, R, h$ m
# e- W0 [5 e- N. K% V# w return402;
/ U& ?* |0 ^; `; d; z% K }
; U" G: i/ O9 t* R
( F- t) ^! n) B: v7 h4 r, I+ O: E8 @* d" u6 J, x
* t$ o! o" F6 r$ B
- q3 y9 [( y6 o |