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
- 通过 kill -9 野蛮粗鲁杀死数据库导致数据库启动故障,给出排除方法或者经验。
8.IDC 机房带宽突然从平时 100M 增加到 400M,请你分析问题所在,并解决。
.真实遭受DDOS攻击(遇到过几次,造成影响的不多见,其中还有黑客勒索的案例)。
b.内部服务器中毒,大量外发流量(这个问题老男孩接警5次以上)
c.网站元素(如图片)被盗连,在门户页面被推广导致大量流量产生(接警3次以上)
d.合作公司来抓数据,如:对合作单位提供了API数据接口(有合作的公司的朋友了解这个)
e.购买了CDN业务,CDN猛抓源站(这个次数也不少)。
为跟着我自学一些徒弟即将面试找工作,整理全部面试答案一部分如下:想看文档联系我