运维面试必会题目
副标题[/!--empirenews.page--]
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 7. 通过 kill -9 野蛮粗鲁杀死数据库导致数据库启动故障,给出排除方法或者经验。 暂时没有答案: 8.IDC 机房带宽突然从平时 100M 增加到 400M,请你分析问题所在,并解决。 .真实遭受DDOS攻击(遇到过几次,造成影响的不多见,其中还有黑客勒索的案例)。 b.内部服务器中毒,大量外发流量(这个问题老男孩接警5次以上) c.网站元素(如图片)被盗连,在门户页面被推广导致大量流量产生(接警3次以上) d.合作公司来抓数据,如:对合作单位提供了API数据接口(有合作的公司的朋友了解这个) e.购买了CDN业务,CDN猛抓源站(这个次数也不少)。 9.正在工作的 linux,发现文件系统只读了,你觉得导致问题的原因是什么,如何解决? 1、重启看是否可以修复(很多机器可以) 2、使用用 fsck – y /dev/hdc6 (/dev/hdc6指你需要修复的分区) 来修复文件系统 3、若,在进行修复的时候有的分区会报错,重新启动系统问题依旧 查看下分区结构 [root@localhost ~]# mount /dev/sda3 on / type ext3 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) /dev/sda1 on /boot type ext3 (ro) tmpfs on /dev/shm type tmpfs (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) 查看ro挂载的分区,如果发现有ro,就重新mount umount /dev/sda1 mount /dev/sda1 /boot 如果发现有提示“device is busy”,找到是什么进程使得他busy fuser -m /boot 将会显示使用这个模块的pid fuser -mk /boot 将会直接kill那个pid 然后重新mount即可。 4、直接remount,命令为 [root@localhost ~]# mount -o rw,remount /boot 10.磁盘报错“No space left on device”,但是 df -h 查看磁盘空间没满,请问为什么?
1.1首先查看我们的磁盘剩余情况
[root@admin /]# df -h #发现磁盘没有满 还有%47
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 6.9G 3.1G 3.5G 47% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 33M 147M 19% /boot 1.2 创建目录测试报错 #创建目录报错文件还是正常 [root@admin/]# mkdir test mkdir: cannot create directory `test': No space left on device
#查看磁盘inode
[root@admin/]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 462384 462384 0 100% /
tmpfs 125517 1 125516 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
#最后发现目录backup中inode 满了
[root@admin/]# df -i /backup/
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 462384462384 0 100% /
1.3解决方案#删除backup目录中不常用的文件数据
#由于本文是测试inode满 所以删除所有数据,工作中要注意汇报上级。
[root@admin /]# rm -rf /backup/
#公司解决方案
删除/backup目录中的部分文件,释放出/backup分区的一部分inode,特别要留意那些spool出来的文件,这种文件一般会占用比较多的节点,因为比较小而且零碎,同时要多留意日志文件信息等
2、用软连接将空闲分区/opt中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/backup分区inode不足的问题:
ln-s /opt/newcache /data/cache
3、更换服务器,用高配置的服务器替换低配置的服务器。很多时候用钱去解决问题比用技术更有效,堆在我办公桌上5台全新的DELL PowerEdge 1950 服务器即将运往IDC机房。一般不建议
1.4检查inode
Filesystem InodesIUsed IFree IUse% Mounted on
/dev/sda3 462384 59141403243 13% /
tmpfs 125517 1 125516 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot 11、磁盘空间满了,删除了一部分 nginx access 日志,但是,发现磁盘空间还是满的,请问 为什么? 删除的日志信息,一部分可能还是被进程调用,因此,需要重启nginx服务来释放进程; 或者实际生产环境中使用&gt;/log/access.log清空文件 12.请利用 shell 开发一个 rsync 服务的启动停止脚本并通过 chkconfig 进行开关机管理
root@sky9896 /]# chkconfig --add rsyncd rsyncd 服务不支持 chkconfig [root@sky9896 /]# cat /etc/init.d/rsyncd #/bin/bash # chkconfig: 2345 20 80 #添加该条即解决服务支持chkconfig
[root@sky9896 /]# chkconfig --add rsyncd [root@sky9896 /]# chkconfig --list rsyncd rsyncd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@sky9896 /]# /etc/init.d/rsyncd start -bash: /etc/init.d/rsyncd: 权限不够
[root@sky9896 /]# chmod 777 /etc/init.d/rsyncd #授权后,即解决 [root@sky9896 /]# /etc/init.d/rsyncd start #启动服务 rsyncd is started. [root@sky9896 /]# netstat -lnt|grep 873 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN tcp 0 0 :::873
设置开机自启动的过程: [root@sky9896 /]# chkconfig --add rsyncd #添加服务 [root@sky9896 /]# chkconfig --list rsyncd #显示服务 rsyncd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭 [root@sky9896 /]# chkconfig --del rsyncd #删除该服务 [root@sky9896 /]# chkconfig --list rsyncd rsyncd 服务支持 chkconfig,但它在任何级别中都没有被引用(运行“chkconfig --add rsyncd”) 13.写一个 tomcat 启动脚本,手工 OK,但是放入定时任务就是不执行,请问为什么? 最近遇到了一些sh不能在crontab定时任务中自动执行的问题 期间由于不太了解,故走了一点弯路,现在总结下来可能第一次 进行设置遇到的问题。以绝后患!我所用过的操作系统为HP-unix&linux&sco-unix,均测试通过 1,首先确保sh脚本具有可执行属性 即chmod +x ***.sh 或chmod +777 ***.sh 2,确保sh脚本手工执行正常 即在当前系统内手工执行sh脚本以后能收到自己期望得到的结果 3,加载环境变量 (编辑:好传媒网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |