运维面试必会题目

编程之家收集整理的这篇文章主要介绍了运维面试必会题目编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

搜索热词

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服务来释放进程;

或者实际生产环境中使用&amp;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工作模式。

    1、编译的时候使用#–with-mpm=prefork对应的工作模式名称修改工作模式。

    2、prefork工作模式是linux下apache安装时候的默认工作模式,是使用最普遍的工作模式。

    3、原理:有一台正在运行的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标准结合的产物

总结

以上是编程之家为你收集整理的运维面试必会题目全部内容,希望文章能够帮你解决运维面试必会题目所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢寻找一群志同道合、互帮互助的学习伙伴,可以点击下方链接加入:
编程之家官方1群:1065694478(已满)
编程之家官方2群:163560250(已满)
编程之家官方3群:312128206(已满)
编程之家官方4群:230427597

相关文章

猜你在找的运维面试题相关文章

无论对Spark集群,还是Hadoop集群等大数据相关的集群进行调优,对linux系统层面的调优都是必不可少的,这里主要介绍3种常用的调优和linux常见面试题
北京朗途融通信息科技有限公司 1、用_________创建一个隐藏的共享文件夹 2、常用的三种解析计算机命的方法有______,______,______。
1、如何实现Nginx代理的节点访问日志记录客户的IP而不是代理的IP? 在nginx代理文件中怎加一行配置文件:proxy_set_header X-Real-IP $remote_addr;
PS:这个iptables脚本不错,很实用,根据实际应用改一下就可以自己用。分享出来,供大家来参考。原作者佚名。源代码如下:#!/bin/sh#modprobe ipt_MASQUERADEmodprobe ip_conntrack_ftpmodprobe ip_nat_ftpiptables -Fiptables -t nat -Fiptables -Xiptables -t nat -X###########################INPUT键###################################iptables -P INPUT DROPiptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -p tcp -m multiport --dports 110,80,25 -j ACCEPTiptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 139 -j ACCEPT#允许内网samba,smtp,pop3,连接iptables -A INPUT -i eth1 -p udp -m multiport --dports 53 -j ACCEPT#允许dns连接iptables -A INPUT -p tcp --dport 1723 -j ACCEPTiptables -A INPUT -p gre -j ACCEPT#允许外网vpn连接iptables -A INPUT -s 192.186.0.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -i ppp0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP#为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃iptables -A INPUT -s 192.186.0.0/24 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP#为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃iptables -A INPUT -p icmp -m limit --limit 3/s -j LOG --log-level INFO --log-prefix "ICMP packet IN: "iptables -A INPUT -p icmp -j DROP#禁止icmp通信-ping 不通iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE#内网转发iptables -N syn-floodiptables -A INPUT -p tcp --syn -j syn-floodiptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURNiptables -A syn-flood -j REJECT#防止SYN攻击 轻量#######################FORWARD链###########################iptables -P FORWARD DROPiptables -A FORWARD -p tcp -s 192.168.0.0/24 -m multiport --dports 80,110,21,25,1723 -j ACCEPTiptables -A FORWARD -p udp -s 192.168.0.0/24 --dport 53 -j ACCEPTiptables -A FORWARD -p gre -s 192.168.0.0/24 -j ACCEPTiptables -A FORWARD -p icmp -s 192.168.0.0/24 -j ACCEPT#允许 vpn客户走vpn网络连接外网iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -mtime --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的8:00-12:30禁止qq通信iptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -mtime --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的8:00-12:30禁止qq通信iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -mtime --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROPiptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -mtime --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的13:30-20:30禁止QQ通信iptables -I FORWARD -s 192.168.0.0/24 -m string --string "qq.com" -mtime --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的8:00-12:30禁止qq网页iptables -I FORWARD -s 192.168.0.0/24 -m string --string "qq.com" -mtime --timestart 13:00 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的13:30-20:30禁止QQ网页iptables -I FORWARD -s 192.168.0.0/24 -m string --string "ay2000.net" -j DROPiptables -I FORWARD -d 192.168.0.0/24 -m string --string "宽频影院" -j DROPiptables -I FORWARD -s 192.168.0.0/24 -m string --string "色情" -j DROPiptables -I FORWARD -p tcp --sport 80 -m string --string "广告" -j DROP#禁止ay2000.net,宽频影院,色情,广告网页连接 !但中文 不是很理想iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROPiptables -A FORWARD -p tcp -m ipp2p --ares -j DROPiptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP#禁止BT连接iptables -A FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 --connlimit-mask 24#######################################################################sysctl -w net.ipv4.ip_forward=1 &>/dev/null#打开转发#######################################################################sysctl -w net.ipv4.tcp_syncookies=1 &>/dev/null#打开 syncookie (轻量级预防 DOS 攻击)sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=3800 &>/dev/null#设置默认 TCP 连接痴呆时长为 3800 秒(此选项可以大大降低连接数)sysctl -w net.ipv4.ip_conntrack_max=300000 &>/dev/null#设置支持最大连接树为 30W(这个根据你的内存和 iptables 版本来,每个 connection 需要 300 多个字节)#######################################################################iptables -I INPUT -s 192.168.0.50 -j ACCEPTiptables -I FORWARD -s 192.168.0.50 -j ACCEPT#192.168.0.50是我的机子,全部放行!############################完#########################################
 1. 你听说过Linux下面的iptables和Firewalld么?知不知道它们是什么,是用来干什么的?答案 : iptables和Firewalld我都知道,并且我已经使用iptables好一段时间了。iptables主要由C语言写成,并且以GNU GPL许可证发布。它是从系统管理员的角度写的,最新的稳定版是iptables 1.4.21。iptables通常被用作类UNIX系统中的防火墙,更准确的说,可以称为iptables/netfilter。管理员通过终端/GUI工具与iptables打交道,来添加和定义防火墙规则到预定义的表中。Netfilter是内核中的一个模块,它执行包过滤的任务。Firewalld是RHEL/CentOS 7(也许还有其他发行版,但我不太清楚)中最新的过滤规则的实现。它已经取代了iptables接口,并与netfilter相连接。2. 你用过一些iptables的GUI或命令行工具么?答案 : 虽然我既用过GUI工具,比如与Webmin结合的Shorewall;以及直接通过终端访问iptables,但我必须承认通过Linux终端直接访问iptables能给予用户更高级的灵活性、以及对其背后工作更好的理解的能力。GUI适合初级管理员,而终端适合有经验的管理员。3. 那么iptables和firewalld的基本区别是什么呢?答案 : iptables和firewalld都有着同样的目的(包过滤),但它们使用不同的方式。iptables与firewalld不同,在每次发生更改时都刷新整个规则集。通常iptables配置文件位于‘/etc/sysconfig/iptables‘,而firewalld的配置文件位于‘/etc/firewalld/‘。firewalld的配置文件是一组XML文件。以XML为基础进行配置的firewalld比iptables的配置更加容易,但是两者都可以完成同样的任务。例如,firewalld可以在自己的命令行界面以及基于XML的配置文件下使用iptables。4. 如果有机会的话,你会在你所有的服务器上用firewalld替换iptables么?答案 : 我对iptables很熟悉,它也工作的很好。如果没有任何需求需要firewalld的动态特性,那么没有理由把所有的配置都从iptables移动到firewalld。通常情况下,目前为止,我还没有看到iptables造成什么麻烦。IT技术的通用准则也说道“为什么要修一件没有坏的东西呢?”。上面是我自己的想法,但如果组织愿意用firewalld替换iptables的话,我不介意。5. 你看上去对iptables很有信心,巧的是,我们的服务器也在使用iptables。iptables使用的表有哪些?请简要的描述iptables使用的表以及它们所支持的链。答案 : 谢谢您的赞赏。至于您问的问题,iptables使用的表有四个,它们是:Nat 表Mangle 表Filter 表Raw 表Nat表 : Nat表主要用于网络地址转换。根据表中的每一条规则修改网络包的IP地址。流中的包仅遍历一遍Nat表。例如,如果一个通过某个接口的包被修饰(修改了IP地址),该流中其余的包将不再遍历这个表。通常不建议在这个表中进行过滤,由NAT表支持的链称为PREROUTING 链,POSTROUTING 链和OUTPUT 链。Mangle表 : 正如它的名字一样,这个表用于校正网络包。它用来对特殊的包进行修改。它能够修改不同包的头部和内容。Mangle表不能用于地址伪装。支持的链包括PREROUTING 链,OUTPUT 链,Forward 链,Input 链和POSTROUTING 链。Filter表 : Filter表是iptables中使用的默认表,它用来过滤网络包。如果没有定义任何规则,Filter表则被当作默认的表,并且基于它来过滤。支持的链有INPUT 链,OUTPUT 链,FORWARD 链。Raw表 : Raw表在我们想要配置之前被豁免的包时被使用。它支持PREROUTING 链和OUTPUT 链。6. 简要谈谈什么是iptables中的目标值(能被指定为目标),他们有什么用答案 : 下面是在iptables中可以指定为目标的值:ACCEPT : 接受包QUEUE : 将包传递到用户空间 (应用程序和驱动所在的地方)DROP : 丢弃包RETURN : 将控制权交回调用的链并且为当前链中的包停止执行下一调用规则7. 让我们来谈谈iptables技术方面的东西,我的意思是说实际使用方面你怎么检测在CentOS中安装iptables时需要的iptables的rpm?答案 : iptables已经被默认安装在CentOS中,我们不需要单独安装它。但可以这样检测rpm:# rpm -qa iptablesiptables-1.4.21-13.el7.x86_64如果您需要安装它,您可以用yum来安装。# yum install iptables-services8. 怎样检测并且确保iptables服务正在运行?答案 : 您可以在终端中运行下面的命令来检测iptables的状态。# service status iptables [On CentOS 6/5]# systemctl status iptables [On CentOS 7]如果iptables没有在运行,可以使用下面的语句---------------- 在CentOS 6/5下 ----------------# chkconfig --level 35 iptables on# service iptables start---------------- 在CentOS 7下 ----------------# systemctl enable iptables# systemctl start iptables我们还可以检测iptables的模块是否被加载:# lsmod | grep ip_tables9. 你怎么检查iptables中当前定义的规则呢?答案 : 当前的规则可以简单的用下面的命令查看:# iptables -L示例输出Chain INPUT (policy ACCEPT)target prot opt source destinationACCEPT all -- anywhere anywhere state RELATED,ESTABLISHEDACCEPT icmp -- anywhere anywhereACCEPT all -- anywhere anywhereACCEPT tcp -- anywhere anywhere state NEW tcp dpt:sshREJECT all -- anywhere anywhere reject-with icmp-host-prohibitedChain FORWARD (policy ACCEPT)target prot opt source destinationREJECT all -- anywhere anywhere reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT)target prot opt source destination10. 你怎样刷新所有的iptables规则或者特定的链呢?答案 : 您可以使用下面的命令来刷新一个特定的链。# iptables --flush OUTPUT要刷新所有的规则,可以用:# iptables --flush11. 请在iptables中添加一条规则,接受所有从一个信任的IP地址(例如,192.168.0.7)过来的包。答案 : 上面的场景可以通过运行下面的命令来完成。# iptables -A INPUT -s 192.168.0.7 -j ACCEPT我们还可以在源IP中使用标准的斜线和子网掩码:# iptables -A INPUT -s 192.168.0.7/24 -j ACCEPT# iptables -A INPUT -s 192.168.0.7/255.255.255.0 -j ACCEPT12. 怎样在iptables中添加规则以ACCEPT,REJECT,DENY和DROP ssh的服务?答案 : 但愿ssh运行在22端口,那也是ssh的默认端口,我们可以在iptables中添加规则来ACCEPT ssh的tcp包(在22号端口上)。# iptables -A INPUT -p tcp --dport 22 -j ACCEPTREJECT ssh服务(22号端口)的tcp包。# iptables -A INPUT -p tcp --dport 22 -j REJECTDENY ssh服务(22号端口)的tcp包。# iptables -A INPUT -p tcp --dport 22 -j DENYDROP ssh服务(22号端口)的tcp包。# iptables -A INPUT -p tcp --dport 22 -j DROP13. 让我给你另一个场景,假如有一台电脑的本地IP地址是192.168.0.6。你需要封锁在21、22、23和80号端口上的连接,你会怎么做?答案 : 这时,我所需要的就是在iptables中使用‘multiport‘选项,并将要封锁的端口号跟在它后面。上面的场景可以用下面的一条语句搞定:# iptables -A INPUT -s 192.168.0.6 -p tcp -m multiport --dport 22,23,80,8080 -j DROP可以用下面的语句查看写入的规则。# iptables -LChain INPUT (policy ACCEPT)target prot opt source destinationACCEPT all -- anywhere anywhere state RELATED,ESTABLISHEDACCEPT icmp -- anywhere anywhereACCEPT all -- anywhere anywhereACCEPT tcp -- anywhere anywhere state NEW tcp dpt:sshREJECT all -- anywhere anywhere reject-with icmp-host-prohibitedDROP tcp -- 192.168.0.6 anywhere multiport dports ssh,telnet,http,webcacheChain FORWARD (policy ACCEPT)target prot opt source destinationREJECT all -- anywhere anywhere reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT)target prot opt source destination 
下面是一名资深Linux运维求职数十家公司总结的Linux运维面试精华,助力大家年后跳槽找个高薪好工作。 1、什么是运维?什么是游戏运维?1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术运维又包括很多种,有DBA运维、网站运维、虚拟化运维、监控运维、游戏运维等等2)游戏运维又有分工,分为开发运维、应用运维(业务运维)和系统运维开发运维:是给应用运维开发运维工具和运维平台的应用运维:是给业务上线、维护和做故障排除的,用开发运维开发出来的工具给业务上线、维护、做故障排查系统运维:是给应用运维提供业务上的基础设施,比如:系统、网络、监控、硬件等等总结:开发运维和系统运维给应用运维提供了“工具”和“基础设施”上的支撑开发运维、应用运维和系统运维他们的工作是环环相扣的2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?游戏运营要做的一个事情除了协调工作以外还需要与各平台沟通,做好开服的时间、开服数、用户导量、活动等计划3、现在给你三百台服务器,你怎么对他们进行管理?管理3百台服务器的方式:1)设定跳板机,使用统一账号登录,便于安全与登录的考量。2)使用salt、ansiable、puppet进行系统的统一调度与配置的统一管理。3)建立简单的服务器的系统、配置、应用的cmdb信息管理。便于查阅每台服务器上的各种信息记录。 4、简述raid0 raid1 raid5 三种工作模式的工作原理及特点RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据还有一个大功能,多块盘放在一起可以有冗余(备份)RAID整合方式有很多,常用的:0 1 5 10RAID 0,可以是一块盘和N个盘组合 其优点读写快,是RAID中最好的缺点:没有冗余,一块坏了数据就全没有了RAID 1,只能2块盘,盘的大小可以不一样,以小的为准10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高RAID 5 ,3块盘,容量计算10*(n-1),损失一块盘特点,读写性能一般,读还好一点,写不好冗余从好到坏:RAID1 RAID10 RAID 5 RAID0性能从好到坏:RAID0 RAID10 RAID5 RAID1成本从低到高:RAID0 RAID5 RAID1 RAID10单台服务器:很重要盘不多,系统盘,RAID1数据库服务器:主库:RAID10 从库 RAID5RAID0(为了维护成本,RAID10)WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)有多台,监控、应用服务器,RAID0 RAID5我们会根据数据的存储和访问的需求,去匹配对应的RAID级别 5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?LVS: 是基于四层的转发HAproxy: 是基于四层和七层的转发,是专业的代理服务器Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发区别: LVS由于是基于四层的转发所以只能做端口的转发而基于URL的、基于目录的这种转发LVS就做不了工作选择:HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器配置简单,所以中小型企业推荐使用HAproxy6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?Squid、Varinsh和Nginx都是代理服务器什么是代理服务器:能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网 区别:1)Nginx本来是反向代理/web服务器,用了插件可以做做这个副业      但是本身不支持特性挺多,只能缓存静态文件2)从这些功能上。varnish和squid是专业的cache服务,而nginx这些是第三方模块完成3)varnish本身的技术上优势要高于squid,它采用了可视化页面缓存技术在内存的利用上,Varnish比Squid具有优势,性能要比Squid高。还有强大的通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存它是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的4)squid的优势在于完整的庞大的cache技术资料,和很多的应用生产环境工作中选择:要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择squid或者varnish。7、Tomcat和Resin有什么区别,工作中你怎么选择?区别:Tomcat用户数多,可参考文档多,Resin用户数少,可考虑文档少最主要区别则是Tomcat是标准的java容器,不过性能方面比resin的要差一些但稳定性和java程序的兼容性,应该是比resin的要好工作中选择:现在大公司都是用resin,追求性能;而中小型公司都是用Tomcat,追求稳定和程序的兼容8、什么是中间件?什么是jdk? 中间件介绍:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递通过中间件,应用程序可以工作于多平台或OS环境。jdk:jdk是Java的开发工具包它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境9、讲述一下Tomcat8005、8009、8080三个端口的含义?8005==》 关闭时使用8009==》 为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口8080==》 一般应用使用10、什么叫CDN?- 即内容分发网络- 其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度11、什么叫网站灰度发布?灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度12、简述DNS进行域名解析的过程?用户要访问www.baidu.com,会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器,二级域服务器只能提供三级域名服务器.baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站www.baidu.com,然后发给请求的服务器,保存一份之后,再发给客户端13、RabbitMQ是什么东西?RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地14、讲一下Keepalived的工作原理?在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP通告信息,BACKUP不会抢占MASTER,除非它的优先级更高。当MASTER不可用时(BACKUP收不到通告信息)多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性由于安全性考虑,VRRP包使用了加密协议进行加密。BACKUP不会发送通告信息,只会接收通告信息15、讲述一下LVS三种模式的工作过程?LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式) VS/DR(路由模式) VS/TUN(隧道模式) 一、NAT模式(VS-NAT)原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址并发至此RS来处理,RS处理完后把数据交给负载均衡器,负载均衡器再把数据包原IP地址改为自己的IP将目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时大量的数据包都交汇在负载均衡器那,速度就会变慢! 二、IP隧道模式(VS-TUN)原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RSRS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议,所以,在RS的内核中,必须编译支持IPTUNNEL这个选项优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上 三、直接路由模式(VS-DR)原理:负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应所有RS对本身这个IP的ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域也可以简单的理解为在同一台交换机上优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。 16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?mysql的innodb如何定位锁问题:在使用 show engine innodb status检查引擎状态时,发现了死锁问题在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎)innodb_trx         ## 当前运行的所有事务innodb_locks     ## 当前出现的锁innodb_lock_waits  ## 锁等待的对应关系 mysql如何减少主从复制延迟:如果延迟比较大,就先确认以下几个因素:1. 从库硬件比主库差,导致复制延迟2. 主从复制单线程,如果主库写并发太大,来不及传送到从库    就会导致延迟。更高版本的mysql可以支持多线程复制3. 慢SQ
SQL常见面试题1.用一条SQL 语句 查询出每门课都大于80 分的学生姓名name   kecheng   fenshu张三    语文       81张三     数学       75李四     语文       76李四     数学       90王五     语文       81王五     数学       100王五     英语       90A: select distinct name from table where name not in (select distinct name from table where fenshu<=80)select name from table group by name having min(fenshu)>802. 学生表 如下:自动编号   学号   姓名 课程编号 课程名称 分数1        2005001 张三 0001     数学    692        2005002 李四 0001      数学    893        2005001 张三 0001      数学    69删除除了自动编号不同, 其他都相同的学生冗余信息A: delete tablename where 自动编号 not in(select min( 自动编号) from tablename group by学号, 姓名, 课程编号, 课程名称, 分数)3.一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合.你先按你自己的想法做一下,看结果有我的这个简单吗?答:select a.name, b.namefrom team a, team b where a.name < b.name4.请用SQL 语句实现:从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。请注意:TestDB 中有很多科目,都有1 -12 月份的发生额。AccID :科目代码,Occmonth :发生额月份,DebitOccur :发生额。数据库名:JcyAudit ,数据集:Select * from TestDB答:select a.*from TestDB a ,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) bwhere a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur************************************************************************************5.面试题:怎么把这样一个表儿year   month amount1991   1     1.11991   2     1.21991   3     1.31991   4     1.41992   1     2.11992   2     2.21992   3     2.31992   4     2.4查成这样一个结果year m1   m2   m3   m41991 1.1 1.2 1.3 1.41992 2.1 2.2 2.3 2.4 答案一、select year, (select amount from   aaa m where month=1   and m.year=aaa.year) as m1,(select amount from   aaa m where month=2   and m.year=aaa.year) as m2,(select amount from   aaa m where month=3   and m.year=aaa.year) as m3,(select amount from   aaa m where month=4   and m.year=aaa.year) as m4from aaa   group by year*******************************************************************************6. 说明:复制表( 只复制结构, 源表名:a新表名:b) SQL: select * into b from a where 1<>1       (where1=1,拷贝表结构和数据内容)Oracle:create table bAsSelect * from a where 1=2 [<>(不等于)(SQL Server Compact)  比较两个表达式。 当使用此运算符比较非空表达式时,如果左操作数不等于右操作数,则结果为 TRUE。 否则,结果为 FALSE。] 7. 说明:拷贝表( 拷贝数据, 源表名:a目标表名:b) SQL: insert into b(a, b, c) select d,e,f from a; 8. 说明:显示文章、提交人和最后回复时间SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b9. 说明:外连接查询( 表名1 :a表名2 :b)SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUTER JOIN b ON a.a = b.cORACLE:select a.a, a.b, a.c, b.c, b.d, b.f from a ,bwhere a.a = b.c(+)10. 说明:日程安排提前五分钟提醒SQL: select * from 日程安排 where datediff('minute',f 开始时间,getdate())>511. 说明:两张关联表,删除主表中已经在副表中没有的信息SQL: Delete from info where not exists (select * from infobz where info.infid=infobz.infid )*******************************************************************************12.有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value这道题的SQL 语句怎么写?update b set b.value=(select a.value from a where a.key=b.key) where b.id in(select b.id from b,a where b.key=a.key);*************************************************************************** 13.高级sql 面试题原表:courseid coursename score-------------------------------------1 Java 702 oracle 903 xml 404 jsp 305 servlet 80-------------------------------------为了便于阅读, 查询此表后的结果显式如下( 及格分数为60):courseid coursename score mark---------------------------------------------------1 Java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 pass---------------------------------------------------写出此查询语句select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course完全正确SQL> desc course_vName Null? Type----------------------------------------- -------- ----------------------------COURSEID NUMBERCOURSENAME VARCHAR2(10)SCORE NUMBERSQL> select * from course_v;COURSEID COURSENAME SCORE---------- ---------- ----------1 java 702 oracle 903 xml 404 jsp 305 servlet 80SQL> select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course_v;COURSEID COURSENAME SCORE MARK---------- ---------- ---------- ----1 java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 passSQL面试题(1)create table testtable1(id int IDENTITY,department varchar(12) )select * from testtable1insert into testtable1 values('设计')insert into testtable1 values('市场')insert into testtable1 values('售后')/*结果id department1   设计2   市场3   售后 */create table testtable2(id int IDENTITY,dptID int,name varchar(12))insert into testtable2 values(1,'张三')insert into testtable2 values(1,'李四')insert into testtable2 values(2,'王五')insert into testtable2 values(3,'彭六')insert into testtable2 values(4,'陈七')/*用一条SQL语句,怎么显示如下结果id dptID department name1   1      设计        张三2   1      设计        李四3   2      市场        王五4   3      售后        彭六5   4      黑人        陈七*/答案:SELECT testtable2.* , ISNULL(department,'黑人')FROM testtable1 right join testtable2 on testtable2.dptID = testtable1.ID也做出来了可比这方法稍复杂。sql面试题(2)有表A,结构如下: A: p_ID p_Num s_id 1 10 01 1
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注