运维经典面试真题汇总系列

运维经典面试真题汇总系列

  1. 如何判断 mysql 主从是否同步?该如何使其同步?**
Slave_IO_Running
Slave_SQL_Running;
略

2. 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. 慢 SQL 语句过多
4. 网络延迟 5. master 负载

主库读写压力大,导致复制延迟,架构的前端要加 buffer 及缓存层 6. slave 负载

一般的做法是,使用多台 slave 来分摊读请求,再从这些 slave 中取一台专用的服务器,只作为备份用,不进行其他任何操作。

另外, 2 个可以减少延迟的参数:
–slave-net-timeout=seconds 单位为秒 默认设置为 3600 秒
#参数含义:当 slave 从主数据库读取 log 数据失败后,等待多久重新建立连接并获取数据

–master-connect-retry=seconds 单位为秒 默认设置为 60 秒
#参数含义:当重新建立主从连接时,如果连接建立失败,间隔多久后重试。

通常配置以上 2 个参数可以减少网络问题导致的主从数据同步延迟

MySQL 数据库主从同步延迟解决方案

最简单的减少 slave 同步延时的方案就是在架构上做优化,尽量让主库的 DDL 快速执行。

还有就是主库是写,对数据安全性较高,比如 sync_binlog=1,innodb_flush_log_at_trx_commit

= 1 之类的设置,而 slave 则不需要这么高的数据安全,完全可以讲 sync_binlog 设置为 0 或者关闭 binlog,innodb_flushlog 也可以设置为 0 来提高 sql 的执行效率。

另外就是使用比主库更好的硬件设备作为 slave。

3. osi 七层模型,tcp 三次握手过程,tcp 连接断开过程,什么情况下 tcp 进入 time_wait?

答:其他问题答案略

什么情况下 tcp 进入 time_wait?

当关闭一个 socket 连接时,主动关闭一端的 socket 将进入 TIME_WAIT 状态,而被动关闭一方则转入 CLOSED 状态。

具体过程如下:

  1. 客户端发送 FIN 报文段,进入 FIN_WAIT_1 状态。
  2. 服务器端收到 FIN 报文段,发送 ACK 表示确认,进入 CLOSE_WAIT 状态。
  3. 客户端收到 FIN 的确认报文段,进入 FIN_WAIT_2 状态。
  4. 服务器端发送 FIN 报文端,进入 LAST_ACK 状态。
  5. 客户端收到 FIN 报文端,发送 FIN 的 ACK,同时进入 TIME_WAIT 状态,启动 TIME_WAIT 定时器,超时时间设为 2MSL。
  6. 服务器端收到 FIN 的 ACK,进入 CLOSED 状态。
  7. 客户端在 2MSL 时间内没收到对端的任何响应,TIME_WAIT 超时,进入 CLOSED 状态。

4. 海量文件如何存储?

答:使用分布式存储,如 mfs、hadoop 等

5. 如何重置 mysql root 密码?

答:一、 在已知 MYSQL 数据库的 ROOT 用户密码的情况下,修改密码的方法:

1、 在 SHELL 环境下,使用 mysqladmin 命令设置:mysqladmin –u root –p password “新密码”   回车后要求输入旧密码
2、 在 mysql>环境中,使用 update 命令,直接更新 mysql 库 user 表的数据:
Update  mysql.user  set  password=password(‘新密码’)  where  user=’root’;
flush   privileges;
注意:mysql 语句要以分号”;”结束
3、 在 mysql>环境中,使用 grant 命令,修改 root 用户的授权权限。
grant  all  on  *.*  to   root@’localhost’  identified  by  ‘新密码’;

二、 如查忘记了 mysql 数据库的 ROOT 用户的密码,又如何做呢?方法如下:

1、 关闭当前运行的 mysqld 服务程序:service  mysqld  stop(要先将 mysqld 添加为系统服务)
2、 使用 mysqld_safe 脚本以安全模式(不加载授权表)启动 mysqld 服务
/usr/local/mysql/bin/mysqld_safe  --skip-grant-table  &
3、 使用空密码的 root 用户登录数据库,重新设置 ROOT 用户的密码
#mysql  -u   root
Mysql> Update  mysql.user  set  password=password(‘新密码’)  where  user=’root’;
Mysql> flush   privileges;

6. 把/data 目录及其子目录下所有以扩展名.txt 结尾的文件中包含 oldgirl 的字符串全部替换为 oldboy

答:
find /data/ -type f -name "*.txt" | xargs sed -i 's/oldgirl/oldboy/g'

7. 创建目录/data/oldboy,并且在该目录下创建文件 oldboy.txt,然后在文件“oldboy.txt”里写入内容“inet addr : 10.0.0.8 Bcast : 10.0.0.255 Mask : 255.255.255.0 ”(不包含引号)

答:# mkdir -p /data/oldboy
# echo "inet addr: 10.0.0.8 Bcast: 10.0.0.255 Mask:255.255.255.0" >> /data/oldboy/oldboy.txt

8. 脚本计算 1+2+3…. +100=?

答:
[root@localhost ~]# cat sum.sh
#!/bin/bash
num=1
sum=0
while [ $num -le 100 ]
dosum=$(expr $sum + $num)
   let num++
done
echo "1+2+3...+100="$sum
[root@localhost ~]# sh sum.sh
1+2+3...+100=5050

9. 统计一下/var/log/nginx/access.log 日志中访问量最多的前十个 IP?

cat access_log | awk ‘{print $1}’ | uniq -c|sort -rn|head -10

或

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr -k1 | head -n 10

10. 怎么查看当前系统中每个 IP 的连接数,怎么查看当前磁盘的 IO,怎么查看当前网络的 IO?

怎么查看当前系统中每个 IP 的连接数:

# netstat -n | awk '/^tcp/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c| sort –rn

sort 命令:进行排序,-r 反向排序 -n 使用纯数字进行排序

uniq 将重复的数据仅仅列出一个来显示,uniq -c,进行计数
awk -F: '{print $1}'  以 F 为分界符,取出第一个:之前的数据

怎么查看当前磁盘的 IO:

1) iostat 可以提供丰富的 IO 状态数据。

iostat 是 sysstat 工具集的一个工具,需要安装。

[root@localhost ~]# iostat -d -k 1 10
Linux 3.10.0-327.el7.x86_64 (localhost.localdomain) 03/23/2017 _x86_64_(2 CPU)
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              16.60       597.83        29.44     384048      18909
scd0              0.03         0.10         0.00         66          0
dm-0             15.78       551.54        26.20     354311      16831
dm-1              0.22         1.97         0.00       1268          0

参数 -d 表示,显示设备(磁盘)使用状态;-k 某些使用 block 为单位的列强制使用 Kilobytes 为单位;1 10 表示,数据显示每隔 1 秒刷新一次,共显示 10 次。

tps:该设备每秒的传输次数。

kB_read/s:每秒从设备读取的数据量;kB_wrtn/s:每秒向设备写入的数据量;kB_read:读取的总数据量;kB_wrtn:写入 的总数量数据量;这些单位都为 Kilobytes。

-x 参数:使用-x 参数我们可以获得更多统计信息。

iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(%await)

await:每一个 IO 请求的处理的平均时间(单位是微秒)。这里可以理解为 IO 的响应时间,一般地系统 IO 响应时间应该低于 5ms,如果大于 10ms 就比较大了。

%util:在统计时间内所有处理 IO 时间,除以总共统计时间。

例如,如果统计间隔 1 秒,该 设备有 0.8 秒在处理 IO,而 0.2 秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。

一般地,如果该参数是 100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util 是 100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

2)使用 iotop 命令

要安装 iotop 软件包

iotop 命令是一个用来监视磁盘 I/O 使用状况的 top 类工具。

iotop 具有与 top 相似的 UI。

Linux 下的 IO 统计工具如:iostat,nmon 等大多数是只能统计到 per 设备的读写情况,如果你想知道每个进程是如何使用 IO 的就比较麻烦,使用 iotop 命令可以很方便的查看。

怎么查看当前网络的 IO:

iftop 查看网络带宽情况(必须从 epel 源安装)

11. 写一个脚本,实现批量添加 20 个用户,用户名为:user1-20,密码为 user 后面跟着 5 个随机字符或数字

[root@localhost ~]# cat useradd.sh
#!/bin/bash
name="user"
for number in $(seq 1 20)
do
   password=$(cat /dev/urandom | head -1 | md5sum | head -c 5)
   useradd $name$numberecho "user$password" | passwd --stdin user$number &> /dev/null
   echo "$name$number user$password" >> userinfo.txt
done

12. dmesg 命令中看到 ip-conntrack:table full,dropping packet,如何解决?

答:

线上 web 服务器在访问量很大时,就会出现网络连接丢包的问题,通过 dmesg 命令查看日志,

发现如下信息:

ip_conntrack: table full, dropping packet.

为什么会出现 ip_conntrack: table full, dropping packet 呢?

这里面关键的信息是"ip_conntrack: table full, dropping packet", 从这里可以判断出这跟 iptables 有关系了,

因为 iptables 防火墙使用了 ip_conntrack 内核模块实现连接跟踪功能,所有的进出数据包都会记录在连接跟踪表中,包括 tcp,udp,icmp 等,

一旦连接跟踪表被填满以后,就会发生丢包,导致网络不稳定。当这张表满了,就会在日志里面写入该信息(执行命令 dmesge | more 查看)。

而当我们的服务器确实打开了 iptables 防火墙,并且都是在网站流量非常高的时候经常会出现这个问题。

这个问题的原因是由于 web 服务器收到了大量的连接,在启用了 iptables 的情况下,iptables 会把所有的连接都做链接跟踪处理,

这样 iptables 就会有一个链接跟踪表,当这个表满的时候,就会出现上面的错误。

查看当前连接数:

[root@localhost ~]# cat /proc/sys/net/netfilter/nf_conntrack_count
0

iptables 的链接跟踪表最大容量配置文件如下:

[root@localhost ~]# cat /proc/sys/net/netfilter/nf_conntrack_max
65536

注:

由于 nf_conntrack 工作在 3 层,支持 IPv4 和 IPv6,而 ip_conntrack 只支持 IPv4,

因此 nf_conntrack 模块在 Linux 的 2.6.15 内核中被引入,而 ip_conntrack 在 Linux 的 2.6.22 内核被移除(centos6.x 版本),因此不同版本的系统,

配置文件也就不尽相同了。

目前大多的 ip_conntrack_已被 nf_conntrack_ 取代,很多 ip_conntrack_*仅仅是个软链接,原先的 ip_conntrack 配置目录/proc/sys/net/ipv4/netfilter/ 仍然存在,

但是新的 nf_conntrack 在/proc/sys/net/netfilter/中,这样做是为了能够向下的兼容。

这个问题该如何解决,解決方法一般有两个:

方法 1:

[root@localhost ~]# sysctl -w net.nf_conntrack_max=100000
net.nf_conntrack_max = 100000
[root@localhost ~]# cat /proc/sys/net/netfilter/nf_conntrack_max
100000
sysctl-p

注:

严格来看重启 iptables/ip6tables 会重新加载 nf_conntrack 相关的模块, 引起参数恢复成默认值。

以免重启 iptables 引起参数失效,也可以在 /etc/sysconfig/iptables-config 文件中开启选项 IPTABLES_SYSCTL_LOAD_LIST=”.nf_conntrack”, iptables 重启后会进行 sysctl 操作.

方法 2:

不使用 ip_conntrack,nf_conntrack_ipv4,xt_state 模块

13. varnish nginx squid 各自缓存的优缺点

要做 cache 服务的话,我们肯定是要选择专业的 cache 服务,优先选择 squid 和 varnish。

高性能、开源的反向代理服务器和内存缓存服务器。

优点:

\1. 高性能;

\2. 多核支持;

\3. 支持 0-60 秒的精确缓存时间。

缺点:

\1. 不具备自动容错和恢复功能,重启后数据丢失;

\2. 在线扩容比较难。

\3. 32 位机器上缓存文件大小为最大 2GB;

\4. 不支持集群。

应用场景:

并发要求不是很大的小型系统和应用

1、不支持带参数的动态链接

2、Nginx 缓存内部没有缓存过期和清理的任何机制,这些缓存的文件会永久性地保存在机器上,如果要缓存的东西非常多,那就会撑暴整个硬盘空间。

3、只能缓存 200 状态码,因此后端返回 301/302/404 等状态码都不会缓存,假如恰好有一个访问量很大的伪静态链接被删除,那就会不停穿透导致后端承载不小压力

4、Nginx 不会自动选择内存或硬盘作为存储介质,一切由配置决定,当然在当前的操作系统里都会有操作系统级的文件缓存机制,所以存在硬盘上也不需要过分担心大并发读取造成的 io 性能问题。

Squid,很古老的反向代理软件,拥有传统代理、身份验证、流量管理等高级功能,但是配置太复杂。

它算是目前互联网应用得最多的反向缓存代理服务器,工作于各大古老的 cdn 上 squid 的优势在于完整的庞大的 cache 技术资料,和很多的应用生产环境

14、查询 DNS 的深层结构

当 DNS 客户机需要查询程序中使用的名称时,它会查询本地 DNS 服务器来解析该名称。

客户机发送的每条查询消息都包括 3 条信息,以指定服务器应回答的问题。

  • 指定的 DNS 域名,表示为完全合格的域名 (FQDN) 。
  • 指定的查询类型,它可根据类型指定资源记录,或作为查询操作的专门类型。
  • DNS 域名的指定类别。

对于 DNS 服务器,它始终应指定为 Internet 类别。

例如,指定的名称可以是计算机的完全合格的域名,如 im.qq.com,并且指定的查询类型用于通过该名称搜索地址资源记录。

DNS 查询以各种不同的方式进行解析。

客户机有时也可通过使用从以前查询获得的缓存信息就地应答查询。DNS 服务器可使用其自身的资源记录信息缓存来应答查询,也可代表请求客户机来查询或联系其他 DNS 服务器,以完全解析该名称,并随后将应答返回至客户机。

这个过程称为递归。

另外,客户机自己也可尝试联系其他的 DNS 服务器来解析名称。

如果客户机这么做,它会使用基于服务器应答的独立和附加的查询,该过程称作迭代,

即 DNS 服务器之间的交互查询就是迭代查询。

DNS 查询的过程如下图所示:

1、在浏览器中输入 www.qq.com 域名,操作系统会先检查自己本地的 hosts 文件是否有这个网址映射关系,如果有,就先调用这个 IP 地址映射,完成域名解析。

2、如果 hosts 里没有这个域名的映射,则查找本地 DNS 解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

3、如果 hosts 与本地 DNS 解析器缓存都没有相应的网址映射关系,首先会找 TCP/ip 参数中设置的首选 DNS 服务器,在此我们叫它本地 DNS 服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

4、如果要查询的域名,不由本地 DNS 服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个 IP 地址映射,完成域名解析,此解析不具有权威性。

5、如果本地 DNS 服务器本地区域文件与缓存解析都失效,则根据本地 DNS 服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地 DNS 就把请求发至 13 台根 DNS,根 DNS 服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个 IP。

本地 DNS 服务器收到 IP 信息后,将会联系负责.com 域的这台服务器。

这台负责.com 域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com 域的下一级 DNS 服务器地址(qq.com)给本地 DNS 服务器。当本地 DNS 服务器收到这个地址后,就会找 qq.com 域服务器,重复上面的动作,进行查询,直至找到 www.qq.com 主机。

6、如果用的是转发模式,此 DNS 服务器就会把请求转发至上一级 DNS 服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根 DNS 或把转请求转至上上级,以此循环。

不管是本地 DNS 服务器用是是转发,还是根提示,最后都是把结果返回给本地 DNS 服务器,由此 DNS 服务器再返回给客户机。

从客户端到本地 DNS 服务器是属于递归查询,而 DNS 服务器之间就是的交互查询就是迭代查询。

15、lvs 的三种模式

一、NAT 模式(VS-NAT)

原理:就是把客户端发来的数据包的 IP 头的目的地址,在负载均衡器上换成其中一台 RS 的 IP 地址,

并发至此 RS 来处理,RS 处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原 IP 地址改为自己的 IP,将目的地址改为客户端 IP 地址即可期间。

无论是进来的流量,还是出去的流量,都必须经过负载均衡器。

优点:集群中的物理服务器可以使用任何支持 TCP/IP 操作系统,只有负载均衡器需要一个合法的 IP 地址。

缺点:扩展性有限。当服务器节点(普通 PC 服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。

当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!

二、IP 隧道模式(VS-TUN)

原理:首先要知道,互联网上的大多 Internet 服务的请求包很短小,而应答包通常很大。

那么隧道模式就是,把客户端发来的数据包,封装一个新的 IP 头标记(仅目的 IP)发给 RS,RS 收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端。

不需要再经过负载均衡器注意,由于 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、lvs/nginx/haproxy 优缺点

Nginx 的优点是:

  1. 工作在网络的 7 层之上,可以针对 http 应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比 HAProxy 更为强大和灵活,这也是它目前广泛流行的主要原因之一,Nginx 单凭这点可利用的场合就远多于 LVS 了。
  2. Nginx 对网络稳定性的依赖非常小,理论上能 ping 通就就能进行负载功能,这个也是它的优势之一;相反 LVS 对网络稳定性依赖比较大,这点本人深有体会;
  3. Nginx 安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来。LVS 的配置、测试就要花比较长的时间了,LVS 对网络依赖比较大。
  4. 可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比 LVS 相对小些。
  5. Nginx 可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持 url 来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx 会把上传切到另一台服务器重新处理,而 LVS 就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。
  6. Nginx 不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的 Web 应用服务器。LNMP 也是近几年非常流行的 web 架构,在高流量的环境中稳定性也很好。
  7. Nginx 现在作为 Web 反向加速缓存越来越成熟了,速度比传统的 Squid 服务器更快,可以考虑用其作为反向代理加速器。
  8. Nginx 可作为中层反向代理使用,这一层面 Nginx 基本上无对手,唯一可以对比 Nginx 的就只有 lighttpd 了,不过 lighttpd 目前还没有做到 Nginx 完全的功能,配置也不那么清晰易读,社区资料也远远没 Nginx 活跃。
  9. Nginx 也可作为静态网页和图片服务器,这方面的性能也无对手。还有 Nginx 社区非常活跃,第三方模块也很多。

Nginx 的缺点是:

  1. Nginx 仅能支持 http、https 和 Email 协议,这样就在适用范围上面小些,这个是它的缺点。
  2. 对后端服务器的健康检查,只支持通过端口来检测,不支持通过 url 来检测。不支持 Session 的直接保持,但能通过 ip_hash 来解决。

LVS

LVS:使用 Linux 内核集群实现一个高性能、高可用的负载均衡服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability) 和可管理性(Manageability)。

LVS 的优点是:

  1. 抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,对内存和 cpu 资源消耗比较低。
  2. 配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率。
  3. 工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案,如 LVS+Keepalived,不过我们在项目实施中用得最多的还是 LVS/DR+Keepalived。
  4. 无流量,LVS 只分发请求,而流量并不从它本身出去,这点保证了均衡器 IO 的性能不会收到大流量的影响。
  5. 应用范围比较广,因为 LVS 工作在4层,所以它几乎可以对所有应用做负载均衡,包括 http、数据库、在线聊天室等等。

LVS 的缺点是:

  1. 软件本身不支持正则表达式处理,不能做动静分离;而现在许多网站在这方面都有较强的需求,这个是 Nginx/HAProxy+Keepalived 的优势所在。
  2. 如果是网站应用比较庞大的话,LVS/DR+Keepalived 实施起来就比较复杂了,特别后面有 Windows Server 的机器的话,如果实施及配置还有维护过程就比较复杂了,相对而言,Nginx/HAProxy+Keepalived 就简单多了。

HAProxy

HAProxy 的特点是:

  1. HAProxy 也是支持虚拟主机的。
  2. HAProxy 的优点能够补充 Nginx 的一些缺点,比如支持 Session 的保持,Cookie 的引导;同时支持通过获取指定的 url 来检测后端服务器的状态。
  3. HAProxy 跟 LVS 类似,本身就只是一款负载均衡软件;单纯从效率上来讲 HAProxy 会比 Nginx 有更出色的负载均衡速度,在并发处理上也是优于 Nginx 的。
  4. HAProxy 支持 TCP 协议的负载均衡转发,可以对 MySQL 读进行负载均衡,对后端的 MySQL 节点进行检测和负载均衡,大家可以用 LVS+Keepalived 对 MySQL 主从做负载均衡。
  5. HAProxy 负载均衡策略非常多,HAProxy 的负载均衡算法现在具体有如下 8 种:

① roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;

② static-rr,表示根据权重,建议关注;

③ leastconn,表示最少连接者先处理,建议关注;

④ source,表示根据请求源 IP,这个跟 Nginx 的 IP_hash 机制类似,我们用其作为解决session问题的一种方法,建议关注;

⑤ ri,表示根据请求的 URI;

⑥ rl_param,表示根据请求的 URl 参数’balance url_param’ requires an URL parameter name;

⑦ hdr(name),表示根据 HTTP 请求头来锁定每一次 HTTP 请求;

⑧ rdp-cookie(name),表示根据据 cookie(name)来锁定并哈希每一次 TCP 请求。

17、linux 系统监控命令,查看 cpu 负载内存等情况

top命令是 Linux 下常用的性能分析工具,比如 cpu、内存的使用,能够实时显示系统中各个进程的资源占用状况,类似于 Windows 的任务管理器。top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.
比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中 CPU 最“敏感”的任务列表.该命令可以按 CPU 使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。
top命令参数
d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用 s 交互命令来改变之。
p 通过指定监控进程 ID 来仅仅监控某个进程的状态。
q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S 指定累计模式
s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i 使top不显示任何闲置或者僵死进程。
c 显示整个命令行而不只是显示命令名
常用操作
top   //每隔 5 秒显式所有进程的资源占用情况
top -d2//每隔 2 秒显式所有进程的资源占用情况
top -c//每隔 5 秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -p12345-p6789//每隔 5 秒显示 pid 是 12345 和 pid 是 6789 的两个进程的资源占用情况
top -d2-c-p123456//每隔 2 秒显示 pid 是 12345 的进程的资源使用情况,并显式该进程启动的命令行参数

常用操作

top //每隔 5 秒显式所有进程的资源占用情况
top -d2//每隔 2 秒显式所有进程的资源占用情况
top -c//每隔 5 秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -p12345-p6789//每隔 5 秒显示 pid 是 12345 和 pid 是 6789 的两个进程的资源占用情况
top -d2-c-p123456//每隔 2 秒显示 pid 是 12345 的进程的资源使用情况,并显式该进程启动的命令行参数

18、查看网络流量的命令

watch -n 1 "/sbin/ifconfig eth0 | grep bytes"

19、docker 四中网络模式

1)host 模式

众所周知,Docker 使用了 Linux 的 Namespaces 技术来进行资源隔离,如 PID Namespace 隔离进程,Mount

Namespace 隔离文件系统,Network Namespace 隔离网络等。

一个 Network Namespace 提供了一份独立的网络环境,包括网卡、路由、Iptable 规则等都与其他的 Network Namespace 隔离。一个 Docker 容器一般会分配一个独立的 Network

Namespace。

但如果启动容器的时候使用 host 模式,那么这个容器将不会获得一个独立的 Network Namespace,而是和宿主机共用一个 Network Namespace。容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的 IP 和端口。

例如,

我们在 10.10.101.105/24 的机器上用 host 模式启动一个含有 web 应用的 Docker 容器,监听 tcp80 端口。

当我们在容器中执行任何类似 ifconfig 命令查看网络环境时,看到的都是宿主机上的信息。

而外界访问容器中的应用,则直接使用 10.10.101.105:80 即可,不用任何 NAT 转换,就如直接跑在宿主机中一样。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

2)container 模式

在理解了 host 模式后,这个模式也就好理解了。

这个模式指定新创建的容器和已经存在的一个容器共享一个 Network

Namespace,而不是和宿主机共享。

新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。

同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。

两个容器的进程可以通过 lo 网卡设备通信。

3)none 模式

这个模式和前两个不同。在这种模式下,Docker 容器拥有自己的 Network Namespace,但是,并不为 Docker 容器进行任何网络配置。也就是说,这个 Docker 容器没有网卡、IP、路由等信息。需要我们自己为 Docker 容器添加网卡、配置 IP 等。

4)bridge 模式

bridge 模式是 Docker 默认的网络设置,此模式会为每一个容器分配 Network Namespace、设置 IP 等,并将一个主机上的 Docker 容器连接到一个虚拟网桥上。下面着重介绍一下此模式。host 模式

使用 Docker run 时使用–net=host 指定 Docker 使用的网络实际上和宿主机一样,在容器内看到的网卡 ip 是宿主机上的 ip。

docker 常用命令

  1. docker version 查看 docker 的版本号,包括客户端、服务端、依赖的 Go 等
  2. docker info 查看系统(docker)层面信息,包括管理的 p_w_picpaths, containers 数等
  3. docker search 在 docker index 中搜索 p_w_picpath
  4. docker pull 从 docker registry server 中下拉 p_w_picpath
  5. docker push 推送一个 p_w_picpath 或 repository 到 registry
  6. docker push :TAG 同上,指定 tag
  7. docker inspect 查看 p_w_picpath 或 container 的底层信息
  8. docker p_w_picpaths 查看本机 p_w_picpaths
  9. docker p_w_picpaths –a 列出所有的 p_w_picpaths
  10. dockerps 默认显示正在运行中的 container

20、实现高可用工具有哪些

  • hearbeat
  • keepalived

21、mysql 数据备份工具

mysqldump 工具

Mysqldump 是 mysql 自带的备份工具,目录在 bin 目录下面:/usr/local/mysql/bin/mysqldump,支持基于 innodb 的热备份。

但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景。Mysqldump 完全备份+二进制日志可以实现基于时间点的恢复。

基于 LVM 快照备份

在物理备份中,有基于文件系统的物理备份(LVM 的快照),也可以直接用 tar 之类的命令对整个数据库目录进行打包备份,但是这些只能进行泠备份,不同的存储引擎备份的也不一样,myisam 自动备份到表级别,而 innodb 不开启独立表空间的话只能备份整个数据库。

tar 包备份

percona 提供的 xtrabackup 工具

支持 innodb 的物理热备份,支持完全备份,增量备份,而且速度非常快,支持 innodb 存储引起的数据在不同数据库之间迁移,支持复制模式下的从机备份恢复备份恢复

,为了让 xtrabackup 支持更多的功能扩展,可以设立独立表空间,打开 innodb_file_per_table 功能,启用之后可以支持单独的表备份。

22、awk 和 sed 的区别

awk 是一种程序语言,对文档资料的处理具有很强的功能。awk 擅长从格式化报文或从一个大的文本文件中抽取数据。

awk 的命令格式为:

awk [-F filed-separator] “commands” input-file(s)

awk 将一行文字按分隔符(filed-separator)分为多个域,依次记为$ 1,$ 2 . . . $ n。$0代表所有域值。因此 awk 更适合于以域为单位来处理文件。加之 ARGIND 等内置变量,使 awk 能处理多个文件。典型的应用为查找一个文件中的某个字段是否在另一个文件中出现

sed 是一个精简的、非交互式的编辑器。它能执行与编辑 vi 和 emacs 相同的编辑任务,但 sed 编辑器不提供交互使用方式,只能在命令行下输入编辑命令。

sed 的命令格式为:

sed [options] 'command' file(s)
sed [options] -f scrīptfile file(s)

作为编辑器,当然少不了插入(a/、i/)、删除(d)、查找替换(s)等命令。

如果文件是格式化的,即由分隔符分为多个域的,优先使用 awk

awk 适合按列(域)操作,sed 适合按行操作

awk 适合对文件的抽取整理,sed 适合对文件的编辑。

23、介绍 CDN 的作用

CDN 加速简单的来说,就是把原服务器上数据复制到其他服务器上,用户访问时,那台服务器近访问到的就是那台服务器上的数据。

CDN 加速优点是成本低,速度快。可以用 CDN best 的 CDN 进行加速,免费,可部署私有,公有 CDN 系统。

可以实现宕机检测,自动切换 ip,分线路,分组解析。也就是

CDN 加速

的主要作用就是保证网站的正常访问,及加快网站访问速度和响应速度,防止网站因黑客攻击,DNS 解析劫持故障等导致的网站服务器的宕机状况的出现。

24、 keepalive 的工作原理和如何做到健康检查

keepalived 是以 VRRP 协议为实现基础的,VRRP 全称 Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,

即将 N 台提供相同功能的路由器组成一个路由器组,这个组里面有一个 master 和多个 backup,master 上面有一个对外提供服务的 vip(该路由器所在局域网内其他机器的默认路由为该 vip),master 会发组播,当 backup 收不到 vrrp 包时就认为 master 宕掉了,这时就需要根据 VRRP 的优先级来选举一个 backup 当 master。

这样的话就可以保证路由器的高可用了。

keepalived 主要有三个模块,
分别是 core、check 和 vrrp。core 模块为 keepalived 的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check 负责健康检查,包括常见的各种检查方式。

vrrp 模块是来实现 VRRP 协议的。
Keepalived 健康检查方式配置
HTTP_GET|SSL_GET
HTTP_GET | SSL_GET
{
url {
path /# HTTP/SSL 检查的 url 可以是多个
digest  # HTTP/SSL 检查后的摘要信息用工具 genhash 生成
status_code 200# HTTP/SSL 检查返回的状态码
}
connect_port 80 # 连接端口
bindto
connect_timeout 3 # 连接超时时间
nb_get_retry 3 # 重连次数
delay_before_retry 2 #连接间隔时间
}

25、 squid 的默认缓存大小是多少?

1024MB。

26、查看 Linux 系统的所有配置的命令(除了 cpuinfo 和 meinfo)

查看主板的序列号: dmidecode | grep -i ’serial number’

用硬件检测程序 kuduz 探测新硬件:service kudzu start ( or restart)

查看 CPU 信息:cat /proc/cpuinfo [dmesg | grep -i 'cpu'][dmidecode -t processor]

查看内存信息:cat /proc/meminfo [free -m][vmstat]

查看板卡信息:cat /proc/pci

查看显卡/声卡信息:lspci |grep -i ‘VGA’[dmesg | grep -i 'VGA']

查看网卡信息:dmesg | grep -i ‘eth’[cat /etc/sysconfig/hwconf | grep -i eth][lspci | grep -i 'eth']  www.2cto.com


查看 PCI 信息:lspci (相比 cat /proc/pci 更直观)

查看 USB 设备:cat /proc/bus/usb/devices

查看键盘和鼠标:cat /proc/bus/input/devices

查看系统硬盘信息和使用情况:fdisk& disk – l &df

查看各设备的中断请求(IRQ):cat /proc/interrupts

查看系统体系结构:uname -a

27、用 shell 脚本或命令将/opt 目录下的大于 15KB 的文件都移到 /tmp 目录下

find /opt -size +15k -exec mv {} /tmp/ \;

28、写过哪些 python 脚本?

这个程序的作用是跳过最新的 7*24 个备份,删除其他的时间更长的

          # -*- coding: cp936 -*-

import os  #os 是 python 自带的一个扩展库,用来进行跟系统相关的操作

skipNum = 24 * 7  #保留文件夹的数目(小时 * 天)

print '\n*************清除时间超过 ' + str(skipNum /24) + ' 天的自动备份文件**************\n\n'

backupDir = os.path.abspath(__file__) + '\\..\\..' + '\\servedatabase_autobackup'
for dir in os.listdir(backupDir):  #os.listdir(xxx)函数返回的是一个文件列表
  if dir[-4:] == '.map':
      mapDir = backupDir + '\\' + dir
     print '正在清除备份目录:' + os.path.abspath(mapDir)
      subDirs = os.listdir(mapDir) #获取文件列表
      subDirs.reverse()        #逆序
      i = 0
      for subDir in subDirs:
        i+=1
        if i>skipNum:
          print '正在清除备份: ' + subDir 
          os.system('rmdir ' + mapDir + '\\' + subDir + ' /s/q') #相当于执行控制台命令

1、写一个脚本查找最后创建时间是三天前,后缀是 *.log 的文件并删除

find .-ctime +3 -name '*.log' | rm -rf

2、统计 ip 访问情况,要求分析 nginx 访问日志,找出访问页面数量在前十位的 ip

cataccess.log | awk '{print $1}' | uniq -c | sort -rn | head -10

3、使用 tcpdump 监听主机为 192.168.1.1,tcp 端口为 80 的数据,同时将输出结果保存输出到 tcpdump.log。

tcpdump 'host 192.168.1.1 and port 80' > tcpdump.log

4、利用 Python 打印前一天的本地时间,格式为 '2016-03-29 13:58:34’

time.strftime('%y-%m-%d%H:%M%:%S' time.locatime(time.time() -86400))

5、用 Python 将‘123456’反转为‘654321’

‘123456’[::-1]

6、利用 Python 执行 shell 命令并取得返回结果

>>> import subprocess
>>> a=subprocess.popen('ls',shell=True,stdout=subprocoss.PIPE,
stderr=subprocess.PIPE)
>>>stdout,sterr = a.communicate()
>>>print stdout

7、请用 Python 继承 process,并写一个并行执行的类,并写出使用过程。

import multiprocessing
import time
class ClockProcess(multiprocessing.Process):def __init__(self, interval):
        multiprocessing.Process.__init__(self)
        self.interval = interval
    def run(self):
        n = 5while n > 0:
            print("the time is {0}".format(time.ctime()))
            time.sleep(self.interval)
            n -= 1

8、有文件 file1

  • 请用 shell 查询 file1 里面空行的所在行号
#awk '$0 ~ /^$/ {print NR}' file1

grep -n "^$" file1
  • 编写 ShellScript 查询 file1 以 abc 结尾的行
grep "abc$" file1

sed -n '/abc$/ p' file1
  • 打印出 file1 文件第 1 到第 3 行
sed  -n '1,3p' file1

9、如何将本地 80 端口的请求转发到 8080 端口,当前主机 IP 为 192.168.2.1

Iptables –t nat -A PREROUTING -d 192.168.2.1 -p tcp  –dport 80 -j REDIRECT --to 8080

10、在 11 月份内,每天的早上 6 点到 12 点中,每隔 2 小时执行一次 /usr/bin/httpd.sh 怎么实现

0 6-12/2 * 11 * /usr/bin/httpd.sh

11、编写个 shell 脚本将 /usr/local/test 目录下大于 100K 的文件转移到 /tmp 目录下

find /usr/local/test -type f -size +100k -exec mv {} /tmp/

#!/bin/bash
filelist=$(ls  /usr/local/test -l | grep "^-" | awk '{print $9}') 
filepath="/usr/local/test"
for file in $filelist
do
    filesize=$(du -s $filepath$file |awk '{print $1}')
    if [ $filesize -gt 100]
    then
    mv $filepath$file /tmp/
fi
done

12、简述 raid0 raid1 raid5 三种工作模式的工作原理及特点。

RAID 0:带区卷,连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率,但它没有数据冗余,
RAID 0 只是单纯地提高性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0 不能应用于数据安全性要求高的场合。
RAID 1:镜像卷,它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据,不能提升写数据效率。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此 RAID
1 可以提高读取性能。RAID 1 是磁盘阵列中单位成本最高的,镜像卷可用容量为总容量的1/2,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据。
RAID5:至少由3块硬盘组成,分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上,任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据(最多允许1块硬盘损坏)。所以 raid5可以实现数据冗余,确保数据的安全性,同时 raid5也可以提升数据的读写性能。

13、oracle 数据库备份方式

物理与逻辑的角度分类:

**物理备份:**对数据库操作系统的物理文件(如数据文件、控制文件、日志文件等)的备份,物理备份又分为冷备份和热备份,前者是在关闭数据库的时候进行的,后者对正以归档日志方式进行的数据库备份,可以使用 RMAN 进行数据库的物理备份

**逻辑备份:**对数据库逻辑组件(如表、表空间、存储过程等数据库对象)的备份逻辑备份的手段很多,如 exp、数据泵 expdp、数据库闪回技术等

数据库的备份策略角度分类:

  • 完全备份:每次对数据库进行完整备份
  • 增量备份:只有那些在上次完全备份或者增量备份后被修改的文件才会被备份。
  • 差异备份:备份那些自从上次完全备份之后被修改过的文件。

14、如何查看占用端口 8080 的进程

netstat -anpt | grep 8080
或
 lsof -i :8080

15、请写出 apache2.X 版本的两种工作模式,以及各自工作原理。如何查看 apache 当前所支持的模块,并且查看是工作在哪种模式下?

prefork(多进程,每个子进程产生一个线程)和 worker(多进程多线程,每个进程生成多个线程)

其主要工作方式是:

当 Apache 服务器启动后,mpm_prefork 模块会预先创建多个子进程(默认为 5 个),每个子进程只有一个线程,当接收到客户端的请求后,mpm_prefork 模块再将请求转交给子进程处理,并且每个子进程同时只能用于处理单个请求。

如果当前的请求数将超过预先创建的子进程数时,mpm_prefork 模块就会创建新的子进程来处理额外的请求。

Apache 总是试图保持一些备用的或者是空闲的子进程用于迎接即将到来的请求。

这样客户端的请求就不需要在接收后等候子进程的产生。

由于在 mpm_prefork 模块中,每个请求对应一个子进程,因此其占用的系统资源相对其他两种模块而言较多。

不过 mpm_prefork 模块的优点在于它的每个子进程都会独立处理对应的单个请求,这样,如果其中一个请求出现问题就不会影响到其他请求。

Prefork 在效率上要比 Worker 要高,但是内存使用大得多不擅长处理高并发的场景。

Worker 模式(多线程多进程):

和 prefork 模式相比,worker 使用了多进程和多线程的混合模式,worker 模式也同样会先预派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会被分配到一个线程来服务。

线程比起进程会更轻量,因为线程是通过共享父进程的内存空间,因此,内存的占用会减少一些,在高并发的场景下会比 prefork 有更多可用的线程,表现会更优秀一些;

另外,如果一个线程出现了问题也会导致同一进程下的线程出现问题,如果是多个线程出现问题,也只是影响 Apache 的一部分,而不是全部。

总的来说,prefork 方式速度要稍高于 worker,然而它需要的 cpu 和 memory 资源也稍多于 woker。

可以通过命令 httpd -M 或 httpd -l 可以查看 apache 当前的模块

可以通过命令 httpd -V 查看是工作在哪种模式下

16、你使用过监控软件吗?说说其特点

使用 nagios 对服务器进行监控,其特点侧重于对检测项的状态监控,主要通过 nrpe 实现对远程主机的监控,但也可以通过 snmp 对设备(如路由器、交换机)进行监控,可实时实现手机短信、电子邮件、MSN、飞信报警。

使用 cacti 对服务器进行监控,其特点侧重性能和流量监控并通过图表显示;

主要通过 snmp 协议收集监测项数据,可实时实现手机短信、电子邮件、使用 zabbix 对服务器进行监控,zabbix 是完全开源的工具,整合了 cacti 和 nagios 等特性。

zabbix 可以对主机的性能监控、网络设备性能监控、数据库、FTP 等通用协议监控、多种告警方式、详细的报表图表绘制

支持自动发现网络设备和服务器(可以通过配置自动发现服务器规则来实现)

支持分布式,能集中展示、管理分布式的监控点,扩展性强

可以自己开发完善各类监控(根据相关接口编写程序实现),编写插件容易,可以自定义监控项,报警级别的设置。

数据收集,支持 snmp(包括 trapping and polling ),IPMI,JMX,SSH,TELNET;

17、你对现在运维工程师的理解和以及对其工作的认识

运维工程师在公司当中责任重大,需要保证时刻为公司及客户提供最高、最快、最稳定、最安全的服务。

运维工程师的一个小小的失误,很有可能会对公司及客户造成重大损失,因此运维工程师的工作需要严谨及富有创新精神。

18、第一部分 基础题

  • 仅列出 /test 目录下的所有目录,请写出完整命令
ls /test -l | grep "^d"
  • umask 022 ,请描述该命令的含义
umask设置文件或目录的缺省权限,umask 022表示目录的缺省权限为755,文件的缺省权限为644
  • 在排除 /test/a 目录的条件下,归档并 gzip 压缩整个 /test 目录,请写出完整的操作命令 t
tar zcvf backup.tar.gz --exclude /test/a /test
  • 查询并列出 test 进程所打开的当前所有文件,请写出完整的操作命令
lsof -c test
  • 查询并列出 test.rpm 包里所包含的所有文件,请写出完整的操作命令
rpm -qpl
  test.rpm
  • 将 /test/a 目录建立软链接到 /test/b 目录,请写出完整的操作命令
ln -s /test/a test/b
  • 设置当前用户环境中 test 变量为 123 并使之立即生效,请写出完整操作命令
export test=123
  • 设置系统当前运行级别中 test 服务状态为启动时自动加载,请写出完整操作命令

假设运行级别为 3 级别

chkconfig  --level  3  test  on
  • 列出当前系统中所有的网络连接(包含进程名),请写出完整操作命令
netstat -antuple
(-a 显示所有 socket,包括正在监听的。
  -n 以网络 IP 地址代替名称,显示出网络连接情形。
  -t 显示 TCP 协议的连接情况
  -u 显示 UDP 协议的连接情况。
  -p 显示指定协议信息。
    -l 或--listening 显示监控中的服务器的 Socket。
  -e 显示以太网统计。此选项可以与 -s 选项结合使用。
)
  • 实时抓取并显示当前系统中 tcp 80 端口的网络数据信息,请写出完整操作命令
tcpdump -nn tcp port 80

19、第二部分综合应用

  • 请写出 5 个你常用的系统或网络维护工具的名称
rhel  centos  ubuntu
iotop用于检查 I/O 的使用情况
htop实质上是 top 的一个增强版本。它更容易对进程排序。
ping
traceroute
  • 在 nslookup 使用中,请问如何查看 test.com 域中的 MX 记录
#nslookup
>set type=mx
>test.comc. ftp ,ssh,smtp,pop3,https,请写出这些服务的默认端口 ftp:21
ssh:22
smtp:25
pop3:110
https:443.25G)
  • 请问如何用 iptables 工具阻断来自 192.168.0.1 的所有网络连接
iptable -I INPUT -s 192.168.0.1 -j DROP
  • 请简要描述 Linux 系统下源代码编译方式安装软件的大致步骤
tar 释放源码包
cd 切换到解压目录
./configure 配置
make 编译
make  install  安装
  • 请写出 Tomcat 程序的主配置文件名
server.xml
  • Mysql 客户端工具中,请问如何查询当前所有的连接进程信息
mysql -u user -p password
-e "show processlist"

20、服务器开不了机怎么解决一步步的排查

硬件有无报警灯提示

主面板液晶面板有没有提示什么报错信息,例如 raid 错误的提示信息

先排除硬件还是软件问题

21、Linux 开机模式

0 - 表示关闭系统(千万不要把默认设置成0哦!)1 - 单用户模式2 - 多用户模式,没有 NFS 服务3 - 多用户文本模式5 - 图形模式6 - 系统重新启动
过修改/etc/inittab,使系统在启动时进入不同模式。

22、Linux 系统中病毒怎么解决

找到病毒文件然后删除;中毒之后一般机器 cpu、内存使用率会比较高,机器向外发包等异常情况;
排查方法:
linux 服务器流量剧增,用 iftop 查看有连接外网的情况。netstat 连接的外网 ip 和端口。
#top 命令找到 cpu 使用率高的进程,一般病毒文件命名都比较乱#可以用 ps aux 查看是否有不明进程,找出病毒文件的位置#rm
-f 命令删除病毒文件#检查计划任务、开机启动项和病毒文件目录有无其他可疑文件等
chkconfig    --list     |  grep  3:on
服务器启动级别是3的,检查一下了开机启动项,没有特别明显的服务。然后检查了一下开机启动的一个文件,more   /etc/rc.local

23、发现一个病毒文件你删了他又自动创建怎么解决

ps axu 一个个排查,方法是查看可疑的用户和系统相似而又不是的进程找出进程可疑。
杀掉所有与病毒相关的进程,然后删掉病毒这个可执行文件,最后删除病毒创建的文件

24. 日志文件很大,怎么把他们切分

针对这些日志按每或每周进行分割,例如只保留一周的数据,用 logrotate 来实现日志的轮替。

或者编写日志文件大小监控脚本,定期检查该日志文件的大小,接近设定大小时,进行轮换。

如果日志文件存在并且很大,可以用 Linux 下的split进行文件分割:

模式一:指定分割后文件行数

Split:按指定的行数截断文件格式: split [-n] file [name]参数说明:-n: 指定截断的每一文件的长度,不指定缺省为 1000 行file: 要截断的文件 name:截断后产生的文件的文件名的开头字母,不指定,缺省为 x,即截断后产生的文件的文件名为 xaa,xab…直到 xzz

模式二:指定分割后文件大小

命令:

split -b 10m server.log server_part_

其中 server.log是要分割的文件,server_part_是分割文件的前缀。

对二进制文件我们同样也可以按文件大小来分隔

25. tcp/ip 七层模型

应用层 (Application):
网络服务与最终用户的一个接口。
协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
表示层(Presentation Layer):
数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
格式有,JPEG、ASCll、DECOIC、加密格式等
会话层(Session Layer):
建立、管理、终止会话。(在五层模型里面已经合并到了应用层)
对应主机进程,指本地主机与远程主机正在进行的会话
传输层 (Transport):
定义传输数据的协议端口号,以及流控和差错校验。
协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层
网络层 (Network):
进行逻辑地址寻址,实现不同网络之间的路径选择。
协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
数据链路层 (Link):
建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)
将比特组合成字节进而组合成帧,用 MAC 地址访问介质,错误发现但不能纠正。
物理层(Physical Layer)

26. 你常用的 Nginx 模块,用来做什么

rewrite 模块,实现重写功能
access模块:来源控制
ssl 模块:安全加密
ngx_http_gzip_module:网络传输压缩模块
ngx_http_proxy_module 模块实现代理
ngx_http_upstream_module 模块实现定义后端服务器列表
ngx_cache_purge 实现缓存清除功能

27、请列出你了解的 web 服务器负载架构。

Nginx
haproxy
keepalived
lvs

你可能感兴趣的:(nginx,服务器,centos)