运维必回的面试题目带答案

1、如何实现 Nginx 代理的节点访问日志记录客户的 IP 而不是代理的 IP?

 在nginx代理文件中怎加一行配置文件:proxy_set_header  X-Real-IP $remote_addr;

2./var/log/messages 日志出现 kernel: nf_conntrack: table full, dropping packet.请问是什么原因

导致的?如何解决?

这是iptables的报错信息“连接跟踪表已满,开始丢包”,再想到网站那面将memcached的连接改为短连接,由于iptables会记录每个连接的跟踪信息,而连接关闭关闭过于频繁导致连接跟踪表满,出现丢包。

解决方法:

首先将memcached的连接方法改为长链接,然后再针对nf_conntrack进行修改,主要有以下几种方式:

1.关闭防火墙

2.加大iptables跟踪表大小,调整对应的系统参数

3.使用裸表,不添加跟踪标志

4.删除连接跟踪模块

3.linux 系统 nginx php 环境,发现 PHP-FPM 进程占用 CPU 高,请问可能的原因,以及如
何解决?

一、进程跟踪

top //找出CPU使用率高的进程PID

strace -p PID //跟踪进程

ll /proc/PID/fd //查看该进程在处理哪些文件

将有可疑的PHP代码修改之,如:file_get_contents没有设置超时时间。

二、内存分配

如果进程跟踪无法找到问题所在,再从系统方面找原因,会不会有可能内存不够用?据说一个较为干净的PHP-CGI打开大概20M-30M左右的内存,决定于PHP模块开启多少。

通过pmap指令查看PHP-CGI进程的内存使用情况

pmap $(pgrep php-cgi |head -1)

按输出的结果,结合系统的内存大小,配置PHP-CGI的进程数(max_children)。

三、监控

最后,还可以通过监控与自动恢复的脚本保证服务的正常运转。下面是我用到的一些脚本:

只要一个php-cgi进程占用的内存超过 %1 就把它kill掉

#!/bin/sh

PIDS=ps aux|grep php-cgi|grep -v grep|awk’{if($4>=1)print $2}’

for PID in $PIDS

do

echo date +%F….%T>>/data/logs/phpkill.log

echo $PID >> /data/logs/phpkill.log

kill -9 $PID

done

检测php-fpm进程

#!/bin/bash

netstat -tnlp | grep “php-cgi” >> /dev/null #2&> /data/logs/php_fasle.log

if [ “$?” -eq “1” ];then #&& [ netstat -tnlp | grep 9000 | awk '{ print $4}' | awk -F ":" '{print $2}' -eq “1” ];then

/usr/local/webserver/php/sbin/php-fpm start

echo date +%F….%T “System memory OOM.Kill php-cgi. php-fpm service start. ” >> /data/logs/php_monitor.log

fi

通过http检测php执行

#!/bin/bash

status=curl -s –head “http://127.0.0.1:8080/chk.php” | awk ‘/HTTP/ {print $2}’

if [ $status != “200” -a $status != “304” ]; then

/usr/local/webserver/php/sbin/php-fpm restart

echo date +%F….%T “php-fpm service restart” >> /data/logs/php_monitor.log

fi

4.一主多从,主库宕机,如何切换到从库,其他的从库如何处理?

1.确保所有的relay log全部更新完毕,在每个从库上执行stop slave io_thread; show processlist;直到看到Has read all relay log,则表示从库更新都执行完毕了

2.登陆所有从库,查看master.info文件,对比选择pos最大的作为新的主库。

3.登陆192.168.1.102,执行stop slave; 并进入数据库目录,删除master.info和relay-log.info文件, 配置my.cnf文件,开启log-bin,如果有log-slaves-updates和read-only则要注释掉,执行reset master

4.创建用于同步的用户并授权slave,同第五大步骤

5.登录另外一台从库,执行stop slave停止同步

6.根据第七大步骤连接到新的主库

7.执行start slave;

8.修改新的master数据,测试slave是否同步更新

5.误操作 drop 语句导致数据破坏,请给出恢复思想及实际步骤。

思想:

法1:  1、通过防火墙禁止web等应用向主库写数据或者锁表,让数据库停止更新。



              ##检查全备及binlog日志 ;



       2、将全备恢复;



          mysqlbinlog -d databasename mysql-bin.000014 > bin.sql



       3、将所有binlog汇总,转成sql语句,剔除drop语句,恢复数据;



          mysql -uroot -p123456 databasename < bin.sql



          (注意数据的备份,不要破坏原始数据)



       4、后续:(数据无法写入)所以无需恢复。



          5、如果是update语句(也需要停止访问)



法2:1、如果主库持续有数据写入;



     2、停止一个从库;然后在主库刷新binlog;



      3、把mysql-bin.000014恢复成bin.sql(去掉drop语句);



      4、把全备数据sql及操作前的增量bin.sql恢复到从库。



      5、停止主库;把主库刷新后的binlog解析为sql恢复到从库;



      5、切换为从库提供服务;



      #法2可能会有主键冲突等其它的问题,可以通过修改id或者延迟解决,尽量使用法1停库解决;



     #平时工作要注意数据库的权限管理及流程管理,防患于未然。

6.请举一个生产中实际的例子网站打开慢由于数据库慢导致的。

数 据库负载高,有慢查询,做联合索引案例

数据库负载高,有慢查询,分析web日志,可能有爬虫,封其ip

  1. 通过 kill -9 野蛮粗鲁杀死数据库导致数据库启动故障,给出排除方法或者经验。

8.IDC 机房带宽突然从平时 100M 增加到 400M,请你分析问题所在,并解决。

.真实遭受DDOS攻击(遇到过几次,造成影响的不多见,其中还有黑客勒索的案例)。
b.内部服务器中毒,大量外发流量(这个问题老男孩接警5次以上)
c.网站元素(如图片)被盗连,在门户页面被推广导致大量流量产生(接警3次以上)
d.合作公司来抓数据,如:对合作单位提供了API数据接口(有合作的公司的朋友了解这个)
e.购买了CDN业务,CDN猛抓源站(这个次数也不少)。

为跟着我自学一些徒弟即将面试找工作,整理全部面试答案一部分如下:想看文档联系我 想看视频面试形式分享可以关注我51cto学院搜张凯老师 地址https://edu.51cto.com/sd/9529c
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39418469/article/details/114777112
今日推荐