一、如何实现 Nginx 代理的节点访问日志记录客户的 IP 而不是代理的 IP?html
在nginx代理文件中怎加一行配置文件:proxy_set_header X-Real-IP $remote_addr;java
2./var/log/messages 日志出现 kernel: nf_conntrack: table full, dropping packet.请问是什么缘由node
致使的?如何解决?mysql
这是iptables的报错信息“链接跟踪表已满,开始丢包”,再想到网站那面将memcached的链接改成短链接,因为iptables会记录每一个链接的跟踪信息,而链接关闭关闭过于频繁致使链接跟踪表满,出现丢包。linux
解决方法:nginx
首先将memcached的链接方法改成长连接,而后再针对nf_conntrack进行修改,主要有如下几种方式:web
1.关闭防火墙面试
2.加大iptables跟踪表大小,调整对应的系统参数sql
3.使用裸表,不添加跟踪标志
4.删除链接跟踪模块
3.linux 系统 nginx php 环境,发现 PHP-FPM 进程占用 CPU 高,请问可能的缘由,以及如
何解决?
1、进程跟踪
# top //找出CPU使用率高的进程PID
# strace -p PID //跟踪进程
# ll /proc/PID/fd //查看该进程在处理哪些文件
将有可疑的PHP代码修改之,如:file_get_contents没有设置超时时间。
2、内存分配
若是进程跟踪没法找到问题所在,再从系统方面找缘由,会不会有可能内存不够用?听说一个较为干净的PHP-CGI打开大概20M-30M左右的内存,决定于PHP模块开启多少。
经过pmap指令查看PHP-CGI进程的内存使用状况
# pmap $(pgrep php-cgi |head -1)
按输出的结果,结合系统的内存大小,配置PHP-CGI的进程数(max_children)。
3、监控
最后,还能够经过监控与自动恢复的脚本保证服务的正常运转。下面是我用到的一些脚本:
只要一个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: 一、经过防火墙禁止web等应用向主库写数据或者锁表,让数据库中止更新。
##检查全备及binlog日志 ;
二、将全备恢复;
mysqlbinlog -d databasename mysql-bin.000014 > bin.sql
三、将全部binlog汇总,转成sql语句,剔除drop语句,恢复数据;
mysql -uroot -p123456 databasename < bin.sql
(注意数据的备份,不要破坏原始数据)
四、后续:(数据没法写入)因此无需恢复。
五、若是是update语句(也须要中止访问)
法2:一、若是主库持续有数据写入;
二、中止一个从库;而后在主库刷新binlog;
三、把mysql-bin.000014恢复成bin.sql(去掉drop语句);
四、把全备数据sql及操做前的增量bin.sql恢复到从库。
五、中止主库;把主库刷新后的binlog解析为sql恢复到从库;
五、切换为从库提供服务;
#法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,发现文件系统只读了,你以为致使问题的缘由是什么,如何解决?
一、重启看是否能够修复(不少机器能够)
二、使用用 fsck – y /dev/hdc6 (/dev/hdc6指你须要修复的分区) 来修复文件系统
三、若,在进行修复的时候有的分区会报错,从新启动系统问题依旧
查看下分区结构
[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便可。
四、直接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出来的文件,这种文件通常会占用比较多的节点,由于比较小并且零碎,同时要多留意日志文件信息等
二、用软链接将空闲分区/opt中的newcache目录链接到/data/cache,使用/opt分区的inode来缓解/backup分区inode不足的问题:
ln-s /opt/newcache /data/cache
三、更换服务器,用高配置的服务器替换低配置的服务器。不少时候用钱去解决问题比用技术更有效,堆在我办公桌上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
十一、磁盘空间满了,删除了一部分 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,加载环境变量
这个问题是常常容易被忽略的问题,一般咱们在第二步的时候手动执行脚本能获得本身想要的结果,但是设置好crontab以后,总不能获得本身想要的结果,总感受脚本没有被执行。或者执行后没有获得正常的结果。不少均是因为没有加载所在用户的环境变量所引发的。所以最好在本身的脚本首两行添加环境变量的导入。以下:其中telstar是我在操做系统下所在的用户。在该目录下执行ls -a能够查看到.cshrc文件。咱们在本身的sh脚本中增长source 该文件,将本用户的环境变量加载,那么如下的内容就能正常被执行了
#!/bin/csh#source /telstar/.cshrc
下面贴出个人定时重启tomcat的一个例子
#!/bin/csh#source /telstar/.cshrckill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`cd /telstar/tomcat/binsleep 15./startup.sh &
其实这里不加载环境变量的话,sh前加上绝对路径,应该也能够,这个没有测试,有兴趣的朋友能够尝试一下
#!/bin/csh
#source /telstar/.cshrc
kill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`
sleep 15
/telstar/tomcat/bin./startup.sh &
总之不少手动能正常执行的sh,crontab不能执行大多数状况是因为没有加载环境变量引发的,这里贴出来,以绝后患
#!/bin/csh
#source /telstar/.cshrc
kill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`
cd /telstar/tomcat/bin
sleep 15
./startup.sh &
14.apache 服务的经常使用工做模式及对应特色,企业如何选择对应模式。
apache的工做模式有:beos,event,worker,prefork,mpmt_os2。
查看:http –l
apachectl –l
beos工做模式(跟linux关系不大,或者暂时用不上)
在Beos系统上的工做模式,使用一个单独的控制线程来建立和控制处理请求的工做线程。
event工做模式(不太稳定,或者说暂时用不上)
event 模式因为把服务进程从连接中分离出来,在开启KeepAlive场合下相对worker模式可以承受的了更高的负载。event模式为 worker开发的变种模式,配置以及指令与worker彻底相同。不过event模式不能很好的支持https的访问,有时还会出现一系列的问题。
worker工做模式(与php配合很差)
worker模式因为使用线程来进行处理请求,因此可以处理海量请求,而系统资源的开销要小于基于进程的服务器。同时worker模式也使用了多进程,每一个进程又有着多个线程,以得到基于进程服务器的稳定性。
mpmt_os2工做模式(不多用,或者说暂时用不上)
mpmt_os2是专门针对OS/2优化过的混合多进程多线程多路处理模块(MPM) 。
重点:prefork工做模式。
一、编译的时候使用#–with-mpm=prefork对应的工做模式名称来修改工做模式。
二、prefork工做模式是linux下apache安装时候的默认工做模式,是使用最广泛的工做模式。
三、原理:有一台正在运行的apache服务器,用户A访问该apache的时候apache创建一个新的进程1处理用户A的请求。
这时又有一个用户B访问该apache,apache又创建一个新的进程2处理用户B的请求。
后来又有用户C,D,E访问该apache,apache又创建三个进程3,4,5处理他们的请求。
若是每当一个新用户访问该apache,apache再创建一个新的进程处理用户的请求,是否是太慢了呢?
因此apache的prefork模式在apache第一次启动的时候就创建5个进程,等待用户的链接请求,有一个用户访问,就有一个进程处理他的请求。
那么若是有5个用户同时访问apache,apache第一次创建的5个进程所有用光了,因此apache就再重新在创建5个进程,等待下一批用户的请求。
prefork模式会根据服务器的硬件状况,设定apache最多只能同时创建256个进程。再多的请求就只能等待前面的进程处理完毕在进行处理。
15.请描述 raid 0 1 5 10 的原理、相关特色 ,性能区别,集群中各角色如何选择 RAID。
RAID是磁盘冗余阵列(redundant array of independent disks)简称磁盘阵列。
RAID是一种把多块独立的物理磁盘按不一样的raid级别组合起造成一个磁盘组,在逻辑上看是一块大的磁盘,能够提供比单个物理磁盘更大的存储容量或更高的存储性能,同时又能提供不一样级别数据冗余备份的一种技术。
用RAID最直接的好处是:
-
提高数据安全性
-
提高数据读写性能
-
提供更大的单一逻辑磁盘数据容量存储
1.2.实现模式
-
软件磁盘阵列(software RAID),主要由电脑主板CPU处理数组存储做业,缺点为耗损较多CPU资源运算RAID,优势是价格低。
-
硬件磁盘阵列(Hardware RAID),RAID卡上内置处理器,不须要服务器的CPU运算。优势是读写性能最快,不占用服务器资源,能够用于任何操做系统,缺点是其售价很高,但在企业生产环境首选硬RAID解决方案。
DELL服务器,默认就会支持RAID0,1,若是RAID5,10就须要买raid卡了。
1.3 raid与LVM区别
LVM是在硬盘的硬盘分区上又建立一个逻辑层,以方便系统管理硬盘分区系统。
区别:
LVM:灵活的管理磁盘的容量,有必定的冗余和性能功能,但很弱。
RAID:更侧重性能和数据安全。
1.4 RAID级别间优缺点对比
运维生产环境经常使用RAID级别为RAID0,RAID1, RAID5 ,RAID10
RAID级别 |
最少磁盘要求 |
关键优势 |
关键缺点 |
实际应用场景 |
RAID0 |
1块 |
读写速度快 |
没有任何冗余 |
MySQL Slave(数据库的从库),集群的节点RS |
RAID1 |
2块(只能) |
100%冗余,镜像 |
读写性能通常,成本高 |
单独的,数据很重要,且不能宕机的业务,监控,系统盘 |
RAID5 |
3块 |
具备必定性能和冗余,能够坏一块盘 |
写入性能不高 |
通常的业务均可以用 |
RAID10 |
4块 |
读写速度很快,100%冗余 |
成本高 |
性能和冗余要求很好的业务。数据库主库和存储的主节点。 |
2.1 raid 0介绍
RAID 0 又称为Stripe(条带化)或striping(条带模式),它在全部RAID级别中具备最高的存储性能(磁盘容量不浪费,读写很快)。
RAID0 提升存储性能的原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就能够被多个磁盘并行的执行,每一个磁盘执行属于它本身的那部分数据请求,这种数据上的并行操做能够充分利用总线的带宽,显著提升磁盘总体存取性能。
要制做RAID0至少要1块物理磁盘,例如DELL服务器带有RAID卡,若是不作RAID就不能使用磁盘,除非将磁盘直接接入主板,所以将一块磁盘坐RAID0使用。
2.2 raid0 特色
关注点 |
描述 |
容量 |
是5块盘加在一块儿的容量。在全部RAID级别中具备最高的存储性能,原理是把连续的数据分散到多个磁盘上存取。 |
性能 |
理论上磁盘读写速度比单盘提高5倍,但因为总线带宽等多种因素的影响,实际的提高速率确定会低于理论值,可是,大量数据并行传输与串行传输比较,提速效果显然毋庸置疑,磁盘越多倍数越小。 |
冗余 |
无任何冗余,坏1块盘,整个RAID就不能用了 |
场合 |
适合于大规模并发读写,但对数据安全性要求不高的状况,如mysql slave(数据块从库),集群的节点RS(服务员) |
特色 |
速度快,无冗余,容量无损失 |
3.1RAID 1 介绍
RAID 1 又称为Mirror 或Mirrooring(镜像),它的宗旨是最大限度的保证用户数据的可用性和可修复性,RAID 1 的操做方式是把用户写入硬盘的数据百分之百的自动复制到另一个硬盘上,从而实现存储双份的数据。
要制做RAID 1,只支持两块盘,整个RAID大小等于两个磁盘中最小的那块的容量,所以,最好使用一样大小的磁盘,在存储时同时写入两块磁盘,实现数据完整备份,但相对下降了写入性能,可是读取数据时能够并发,至关于两块RAID 0的读取效率。
关注点 |
描述 |
容量 |
损失50%的数据容量,列如2块1T的盘,作完RAID1后容量为1T |
性能 |
Mirror不能提升存储性能,理论上写性能和单盘差很少。 |
冗余 |
在全部RAID级别中,RAID1提供最高的数据安全保障,冗余度100% |
特色 |
100%冗余,容量损失半。 |
4.1 RAID 5介绍
RAID 是一种存储性能,数据安全和存储成本兼顾的存储解决方案。
RAID 5须要三块或以上的物理磁盘,能够提供热备盘实现故障恢复,采用奇偶校验,可靠性强,只有同时损坏2块盘时数据才会损坏,只损坏1块盘时,系统会根据存储的奇偶校验位重建数据,临时提供服务,此时若是有热备盘,系统还会自动在热备盘上重建故障磁盘上的数据。
数据存储方式如图所示DP为D1,D2,D3的奇偶校验信息,其余以此类推,由图看出,RAID5 不对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成的RAID5的各个磁盘上,而且奇偶校验信息和相对应的数据分布存储于不一样的磁盘上,当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息区恢复被损坏的数据。
关注点 |
描述 |
性能 |
RAID 5 具备和RAID 0 相近的数据读取速度,只是多了奇偶校验信息,写入数据速度比单个磁盘写入操做稍慢。 |
容量 |
损失一块盘的数据容量10*600G 9*600G |
冗余 |
可损失一块盘,RAID数据安全保障程度比RAID 1 低而磁盘空间利用率要比raid 1 高 |
场合 |
RAID 5 能够理解为是RAID 0 和RAID 1的折中方案,适合对性能和冗余都有必定要求,又都不是十分高的状况。 mysql的主从库均可以,存储也能够,普通的服务器为了减小维护成本,又保持必定冗余和读性能均可以作RAID 5 |
特色 |
容量损失一块盘,写数据经过奇偶校验,RAID 1和 RAID 0的折中方案。 |
5.1 raid10介绍
RAID 1+0 也被称为RAID 10标准,实际是将RAID 1和RAID 0标准结合的产物,在连续地以位或字节为单位分割数据而且并行读/写多个磁盘的同时,为每一块磁盘做磁盘镜像进行冗余。它的优势是同时拥有RAID 0的超凡速度和RAID 1的数据高可靠性,可是CPU占用率一样也更高,并且磁盘的利用率比较低。
极高的读写效率和较高的数据保护、恢复能力
注意一下Raid 10 和 Raid01的区别:
RAID01又称为RAID0+1,先进行条带存放(RAID0),再进行镜像(RAID1)。
RAID10又称为RAID1+0,先进行镜像(RAID1),再进行条带存放(RAID0)。
关注点 |
描述 |
性能 |
极高的读写效率和较高的数据保护、恢复能力 |
冗余 |
RAID10提供100%的数据冗余 |
应用场合 |
RAID 10适用于数据库存储服务器等须要高性能、高容错但对容量要求不大的场合 |
特色 |
RAID 1和RAID 0标准结合的产物 |