Linux运维工程师必备面试题100道及解析(持续更新中)

1. 磁盘使用率检测(用shell脚本)

root@ecs-c13b ~]# cat fdisk.sh
#!/bin/bash
# 截取IP
IP=`ifconfig eth0 |awk -F " " 'NR==2{print $2}'`
# 定义使用率,并转换为数字
SPACE=`df -Ph |awk '{print int($5)}'`

for i in $SPACE
do
if [ $i -ge 90 ]
then
       echo "$IP的磁盘使用率已经超过了90%,请及时处理"
fi
done

2. LVS 负载均衡有哪些策略?

LVS一共有三种工作模式: DR,Tunnel,NAT

3. 谈谈你对LVS的理解?

LVS是一个虚拟的服务器集群系统,在unix系统下实现负载均衡的功能;采用IP负载均衡技术和机遇内容 请求分发技术来实现。

LVS采用三层结构,分别是:

第一层: 负载调度器

第二层: 服务池

第三层:共享存储

负载调度器(load balancer/ Director),是整个集群的总代理,它有两个网卡,一个网卡面对访问网 站的客户端,一个网卡面对整个集群的内部。负责将客户端的请求发送到一组服务器上执行,而客户也 认为服务是来自这台主的。举个生动的例子,集群是个公司,负载调度器就是在外接揽生意,将接揽到 的生意分发给后台的真正干活的真正的主机们。当然需要将活按照一定的算法分发下去,让大家都公平的干活。

服务器池(server pool/ Realserver),是一组真正执行客户请求的服务器,可以当做WEB服务器。就 是上面例子中的小员工。

共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相 同的内容,提供相同的服务。一个公司得有一个后台账目吧,这才能协调。不然客户把钱付给了A,而 换B接待客户,因为没有相同的账目。B说客户没付钱,那这样就不是客户体验度的问题了。

Linux运维工程师必备面试题100道及解析(持续更新中)

4. 负载均衡的原理是什么?

当客户端发起请求时,请求直接发给Director Server(调度器),这时会根据设定的调度算法,将请求 按照算法的规定智能的分发到真正的后台服务器。以达到将压力均摊。

但是我们知道,http的连接时无状态的,假设这样一个场景,我登录某宝买东西,当我看上某款商品 时,我将它加入购物车,但是我刷新了一下页面,这时由于负载均衡的原因,调度器又选了新的一台服 务器为我提供服务,我刚才的购物车内容全都不见了,这样就会有十分差的用户体验。

所以就还需要一个存储共享,这样就保证了用户请求的数据是一样的

5. LVS由哪两部分组成的?

LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

1.ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。

2. ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集 群服务,而谁是后端真实的服务器(Real Server)

6. 与lvs相关的术语有哪些?

DS:Director Server。指的是前端负载均衡器节点。

RS:Real Server。后端真实的工作服务器。

VIP:Virtual IP 向外部直接面向用户请求,作为用户请求的目标的IP地址。

DIP:Director Server IP,主要用于和内部主机通讯的IP地址。

RIP:Real Server IP,后端服务器的IP地址。

CIP:Client IP,访问客户端的IP地址。

7. LVS-NAT模式的原理

Linux运维工程师必备面试题100道及解析(持续更新中)

(a). 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP

(b). PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链

(c). IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器 IP, 然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP

(d). POSTROUTING链通过选路,将数据包发送给Real Server

(e). Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文 的源IP为RIP,目标IP为CIP

(f). Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户 端。 此时报文的源IP为VIP,目标IP为CIP

8. LVS-NAT模型的特性

RS应该使用私有地址,RS的网关必须指向DIP

DIP和RIP必须在同一个网段内

请求和响应报文都需要经过Director Server,高负载场景中,Director Server易成为性能瓶颈

支持端口映射

RS可以使用任意操作系统 缺陷:对Director Server压力会比较大,请求和响应都需经过director server

9. LVS-DR模式原理

Linux运维工程师必备面试题100道及解析(持续更新中)

(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此 时报文的源IP为CIP,目标IP为VIP

(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链

(c) IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的 MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的 源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址

(d) 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为 RIP的MAC地址,那么此时数据包将会发至Real Server。

(e) RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通 过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP

(f) 响应报文最终送达至客户端

10. LVS-DR模型的特性

特点1:保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS

RS可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问

RS跟Director Server必须在同一个物理网络中

所有的请求报文经由Director Server,但响应报文必须不能进过Director Server

不支持地址转换,也不支持端口映射

RS可以是大多数常见的操作系统

RS的网关绝不允许指向DIP(因为我们不允许他经过director)

RS上的lo接口配置VIP的IP地址

缺陷:RS和DS必须在同一机房中

11. LVS三种负载均衡模式的比较

三种负载均衡: nat,tunneling,dr

|类目|NAT|TUN|DR|

|--|--|--|--|

操作系统|任意|支持隧道|多数(支持non-arp)

|服务器网络|私有网络|局域网/广域网|局域网

|服务器数目|10-20|100|大于100

|服务器网关|负载均衡器|自己的路由|自己的路由|

效率|一般|高|最高

12. LVS的负载调度算法

13. LVS与nginx的区别

vs的优势(互联网老辛):

  1. 抗负载能力强,因为lvs工作方式的逻辑是非常简单的,而且工作在网络的第4层,仅作请求分 发用,没有流量,所以在效率上基本不需要太过考虑。lvs一般很少出现故障,即使出现故障 一般也是其他地方(如内存、CPU等)出现问题导致lvs出现问题。
  2. 配置性低,这通常是一大劣势同时也是一大优势,因为没有太多的可配置的选项,所以除了增减 服务器,并不需要经常去触碰它,大大减少了人为出错的几率。
  3. 工作稳定,因为其本身抗负载能力很强,所以稳定性高也是顺理成章的事,另外各种lvs都有完整 的双机热备方案,所以一点不用担心均衡器本身会出什么问题,节点出现故障的话,lvs会自动判 别,所以系统整体是非常稳定的。
  4. 无流量,lvs仅仅分发请求,而流量并不从它本身出去,所以可以利用它这点来做一些线路分流之 用。没有流量同时也保住了均衡器的IO性能不会受到大流量的影响。
  5. lvs基本上能支持所有应用,因为lvs工作在第4层,所以它可以对几乎所有应用做负载均衡,包括 http、数据库、聊天室等。

nginx与LVS的对比:

两者配合使用:

nginx用来做http的反向代理,能够upsteam实现http请求的多种方式的均衡转发。由于采用的是异步转 发可以做到如果一个服务器请求失败,立即切换到其他服务器,直到请求成功或者最后一台服务器失败 为止。这可以最大程度的提高系统的请求成功率。

lvs采用的是同步请求转发的策略。这里说一下同步转发和异步转发的区别。同步转发是在lvs服务器接收 到请求之后,立即redirect到一个后端服务器,由客户端直接和后端服务器建立连接。异步转发是nginx 在保持客户端连接的同时,发起一个相同内容的新请求到后端,等后端返回结果后,由nginx返回给客户 端。

进一步来说:当做为负载均衡服务器的nginx和lvs处理相同的请求时,所有的请求和响应流量都会经过 nginx;但是使用lvs时,仅请求流量经过lvs的网络,响应流量由后端服务器的网络返回。

也就是,当作为后端的服务器规模庞大时,nginx的网络带宽就成了一个巨大的瓶颈。

但是仅仅使用lvs作为负载均衡的话,一旦后端接受到请求的服务器出了问题,那么这次请求就失败了。 但是如果在lvs的后端在添加一层nginx(多个),每个nginx后端再有几台应用服务器,那么结合两者的 优势,既能避免单nginx的流量集中瓶颈,又能避免单lvs时一锤子买卖的问题。

14. 负载均衡的作用有哪些?

1、转发功能

按照一定的算法【权重、轮询】,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高 系统并发量。

2、故障移除

通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器期宕掉,自动将请求发送到 其他应用服务器。

3、恢复添加

如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。

15. nginx实现负载均衡的分发策略

Nginx 的 upstream目前支持的分配算法:

1)、轮询 ——1:1 轮流处理请求(默认)

每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,自动剔除,剩下的继续轮询。

2)、权重 ——you can you up 通过配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。

3)、ip_哈希算法 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个应用服务器,可以解决session共享 的问题。

16. keepalived 是什么?

广义上讲是高可用,狭义上讲是主机的冗余和管理

Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模 型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工 作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是 自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。

后来Keepalived又加入了VRRP的功能,VRRP(VritrualRouterRedundancyProtocol,虚拟路由冗余协 议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此 Keepalvied一方面具有服务器状态检测和故障隔离功能,另外一方面也有HAcluster功能。

所以keepalived的核心功能就是健康检查和失败且换。 所谓的健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后 面的实际的服务器(通常是承载真实业务的服务器)进行保活;

而失败切换主要是应用于配置了主备模式的负载均衡器,利用VRRP维持主备负载均衡器的心跳,当主负载均衡器出现问题时,由备负载均衡器承载对应的业务,从而在最大限度上减少流量损失,并提供服务的稳定性

17. 你是如何理解VRRP协议的

为什么使用VRRP?

主机之间的通信都是通过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障,通 信就会失效,因此这种通信模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP 协议。

VRRP协议是一种容错的主备模式的协议,保证当主机的下一跳路由出现故障时,由另一台路由器来代替 出现故障的路由器进行工作,通过VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的 数据通信。

VRRP的三种状态:

VRRP路由器在运行过程中有三种状态:

  1. Initialize状态: 系统启动后就进入Initialize,此状态下路由器不对VRRP报文做任何处理;
  2. Master状态;
  3. Backup状态; 一般主路由器处于Master状态,备份路由器处于Backup状态。

18. keepalived的工作原理?

keepalived采用是模块化设计,不同模块实现不同的功能。

keepalived主要有三个模块,分别是core、check和vrrp。

core:是keepalived的核心,负责主进程的启动和维护,全局配置文件的加载解析等

check: 负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的 配置解析;可基于脚本检查对IPVS后端服务器健康状况进行检查

vrrp:VRRPD子进程,VRRPD子进程就是来实现VRRP协议的

Keepalived高可用对之间是通过 VRRP进行通信的, VRRP是通过竞选机制来确定主备的,主的优先级高 于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主宕机的时候,备节点就会接 管主节点的资源,然后顶替主节点对外提供服务

在Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP广播包,告诉备它还活着,此时备不会 抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连 续性.接管速度最快

19. 出现脑裂的原因

什么是脑裂?

都有哪些原因导致脑裂?

高可用服务器对之间心跳线链路发生故障,导致无法正常通信。

因心跳线坏了(包括断了,老化)。

因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)

因心跳线间连接的设备故障(网卡及交换机)

因仲裁的机器出问题(采用仲裁的方案)

高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。

高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败

其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。

20. 如何解决keepalived脑裂问题?

解决常见方案:

21.zabbix如何监控脑裂?

监控只是监控发生脑裂的可能性,不能保证一定是发生了脑裂,因为正常的主备切换VIP也是会到备上的

监控脚本:

[root@slave ~]# mkdir -p /scripts && cd /scripts
[root@slave scripts]# vim check_keepalived.sh
#!/bin/bash

if [ `ip a show ens33 |grep 192.168.32.250|wc -l` -ne 0 ]
then
       echo "keepalived is error!"
else
       echo "keepalived is OK !"
fi
Linux运维工程师必备面试题100道及解析(持续更新中)

Linux运维工程师必备面试题100道及解析(持续更新中)

22. nginx做负载均衡实现的策略有哪些

23. nginx做负载均衡用到哪些模块

upstream 定义负载节点池。

location 模块 进行URL匹配。

proxy模块 发送请求给upstream定义的节点池。

24. 负载均衡有哪些实现方式

Linux运维工程师必备面试题100道及解析(持续更新中)

25. nginx如何实现四层负载?

四层负载分为动态和静态负载

Nginx的四层静态负载均衡需要启用ngx_stream_core_module模块

默认情况下,ngx_stream_core_module是没有启用的,需要在安装Nginx时,添加--with-stream配置

参数启用

配置HTTP负载均衡时,都是配置在http指令下,配置四层负载均衡,则是在stream指令下,结构如下 所示.

stream {
  upstream mysql_backend {
    server 192.168.175.100:3306 max_fails=2 fail_timeout=10s weight=1;
    least_conn;
  }
  server { #监听端口,默认使用的是tcp协议,如果需要UDP协议,则配置成listen 3307 udp;
listen 3307; #失败重试 proxy_next_upstream on;
  proxy_next_upstream_timeout 0;
  proxy_next_upstream_tries 0; #超时配置 #配置与上游服务器连接超时时间,默认60s
proxy_connect_timeout 1s; #配置与客户端上游服务器连接的两次成功读/写操作的超时时间,如果超
时,将自动断开连接 #即连接存活时间,通过它可以释放不活跃的连接,默认10分钟 proxy_timeout 1m;
#限速配置 #从客户端读数据的速率,单位为每秒字节数,默认为0,不限速 proxy_upload_rate 0; #从
上游服务器读数据的速率,单位为每秒字节数,默认为0,不限速 proxy_download_rate 0; #上游服务器
proxy_pass mysql_backend;
  }
}

使用Nginx的四层动态负载均衡有两种方案:使用商业版的Nginx和使用开源的nginx-stream-upsyncmodule模块。注意:四层动态负载均衡可以使用nginx-stream-upsync-module模块,七层动态负载均 衡可以使用nginx-upsync-module模块。

26. 你知道的web服务有哪些?

27. 为什么要用nginx

28 . nginx的性能为什么比apache高?

nginx采用的是epoll模型和kqueue网络模型,而apache采用的是select模型

举一个例子来解释两种模型的区别:

菜鸟驿站放着很多快件,以前去拿快件都是短信通知你有快件,然后你去了之后,负责菜鸟驿站的人在 一堆快递里帮你找,直到找到为止。

但现在菜鸟驿站的方式变了,他会发你一个地址,比如 3-3-5009. 这个就是第三个货架的第三排,从做 往右第九个。

如果有几百个人同时去找快递,这两种方式哪个更有效率,不言而喻。

之前还看到这个例子也比较形象:

> 假设你在大学读书,住的宿舍楼有很多间房间,你的朋友要来找你。
select版宿管大妈就会带着你的朋友挨个房间去找,直到找到你为止。
而epoll版宿管大妈会先记下每位同学的房间号,
你的朋友来时,只需告诉你的朋友你住在哪个房间即可,不用亲自带着你的朋友满大楼找人。
如果来了10000个人,都要找自己住这栋楼的同学时,select版和epoll版宿管大妈,谁的效率更高,不言自
明。
同理,在高并发服务器中,轮询I/O是最耗时间的操作之一,select和epoll的性能谁的性能更高,同样十分
明了

select 采用的是轮询的方式来处理请求,轮询的次数越多,耗时也就越多。

29 . epoll的组成

epoll的接口非常简单,一共就三个函数:

1. int epoll_create(int size);
创建一个epoll的句柄,size用来告诉内核这个监听的数目一共有多大。

这个参数不同于select()中的第一个参数,给出最大监听的fd+1的值。

需要注意的是,当创建好epoll句柄后,它就是会占用一个fd值,在linux下如果查看/proc/进程id/fd/,
是能够看到这个fd的,所以在使用完epoll后,必须调用close()关闭,否则可能导致fd被耗尽。

2. int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
epoll的事件注册函数,它不同与select()是在监听事件时告诉内核要监听什么类型的事件,

而是在这里先注册要监听的事件类型。第一个参数是epoll_create()的返回值,
第二个参数表示动作,用三个宏来表示:

EPOLL_CTL_ADD:注册新的fd到epfd中;
EPOLL_CTL_MOD:修改已经注册的fd的监听事件;
EPOLL_CTL_DEL:从epfd中删除一个fd;

第三个参数是需要监听的fd,第四个参数是告诉内核需要监听什么事

3. int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int
timeout);
等待事件的产生,类似于select()调用。

参数events用来从内核得到事件的集合,maxevents告之内核这个events有多大,这个 maxevents的值不
能大于创建epoll_create()时的size,参数timeout是超时时间(毫秒,0会立即返回,-1将不确定,也
有说法说是永久阻塞)。

该函数返回需要处理的事件数目,如返回0表示已超时

30 . nginx和apache的区别

Nginx

Apache

两者最核心的区别在于 apache 是同步多进程模型,一个连接对应一个进程,而 nginx 是异步的,多个 连接(万级别)可以对应一个进程。 需要稳定用apache,需要高性能用nginx

31. Tomcat作为web的优缺点?

缺点:

tomcat 只能用做java服务器,处理静态请求的能力不如nginx和apache。,高并发能力有限 优点:动态解析容器,处理动态请求,是编译JSP/Servlet的容器,轻量级

32. tomcat的三个端口及作用

8005: 关闭Tomcat通信接口

8009: 与其他httpd服务器通信接口,用于http服务器的集合

8080: 建立httpd连接用,如浏览器访问

33. fastcgi 和cgi的区别

cgi:

web 服务器会根据请求的内容,然后会 fork 一个新进程来运行外部 c 程序(或 perl 脚本…), 这个进 程会把处理完的数据返回给 web 服务器,最后 web 服务器把内容发送给用户,刚才 fork 的进程也随之退出。

如果下次用户还请求改动态脚本,那么 web 服务器又再次 fork 一个新进程,周而复始的进行。

fastcgi

web 服务器收到一个请求时,他不会重新 fork 一个进程(因为这个进程在 web 服务器启动时就开启 了,而且不会退出),web 服务器直接把内容传递给这个进程(进程间通信,但 fastcgi 使用了别的方 式,tcp 方式通信),这个进程收到请求后进行处理,把结果返回给 web 服务器,最后自己接着等待下 一个请求的到来,而不是退出。

34. nginx常用的命令

启动 nginx 。
停止 nginx -s stop 或 nginx -s quit 。
重载配置 ./sbin/nginx -s reload(平滑重启) 或 service nginx reload 。
重载指定配置文件 .nginx -c /usr/local/nginx/conf/nginx.conf 。
查看 nginx 版本 nginx -v 。
检查配置文件是否正确 nginx -t 。
显示帮助信息 nginx -h 。

35. 什么是反向代理,什么是正向代理,以及区别?

正向代理:

所谓的正向代理就是: 需要在用户端去配置的。配置完再去访问具体的服务,这叫正向代理

正向代理,其实是"代理服务器"代理了"客户端",去和"目标服务器"进行交互。

正向代理的用途:

反向代理:

反向代理是 在服务端的,不需要访问用户关心。用户访问服务器A, A服务器是代理服务器,将用户服务 再转发到服务器B.这就是反向代理

反向代理的作用:

36. Squid、Varinsh、Nginx 有什么区别?

三者都实现缓存服务器的作用

在内存的利用上,Varnis h比 Squid 具有优势,性能要比 Squid 高。
还有强大的通过 Varnish 管理端口,可以使用正则表达式快速、批量地清除部分缓存
Varnish 是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的。

要做 cache 服务的话,我们肯定是要选择专业的 cache 服务,优先选择Squid 或者 Varnish

37. nginx是如何处理http请求的

四个步骤:

读取解析请求行;

读取解析请求头;

开始最重要的部分,即多阶段处理;

nginx把请求处理划分成了11个阶段,也就是说当nginx读取了请求行和请求头之后,将请求封装
了结构体ngx_http_request_t,然后每个阶段的handler都会根据这个ngx_http_request_t,对请
求进行处理,例如重写uri,权限控制,路径查找,生成内容以及记录日志等等;

最后将结果放回给客户单。

也可以这么回答:

接着,设置读写事件处理函数,并添加读写事件来与客户端进行数据的交换。

38. nginx虚拟主机有哪些?

基于域名的虚拟主机

基于端口的虚拟主机

基于IP的虚拟主机

39. nginx怎么实现后端服务的健康检查

方式一,利用 nginx 自带模块 ngx_http_proxy_module 和 ngx_http_upstream_module 对后端节点做 健康检查。

方式二,利用 nginx_upstream_check_module 模块对后端节点做健康检查。(推荐此方法)

40. apache中的Worker 和 Prefork 之间的区别是什么?

它们都是MPM, Worker 和 prefork 有它们各自在Apache上的运行机制. 它们完全依赖于你想要以哪一 种模式启动你的Apache.


如果觉得有用,请点赞收藏,持续更新中...

展开阅读全文

页面更新:2024-04-25

标签:均衡器   报文   节点   负载   缓存   客户端   模块   进程   故障   状态   工程师   目标   地址   方式   服务器   用户   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top