19年年初应聘Linux运维工程师被问到的面试题挑重点总结一下</a />

备注:这篇博客是从我旧的hexo博客里面迁移过来的,这一批大概30多篇旧博客的发表日期统一均为2020年3月2日,你可以从右上角文章归档里面一窥端倪,而我本人并没有在这前后面试过任何Linux运维工程师职位哦~

请描述LVS负载均衡原理

  • LVS叫做Linux虚拟服务器,是一种使用负载均衡技术将多台服务器组成一个虚拟服务器的技术。
    LVS是一种易于扩展,而价格低廉的负载均衡解决方案。LVS 由2部分程序组成,包括ipvs和
    ipvsadm。LVS 的工作模式主要有4种:最常用的叫DR,也称直接路由模式,其它的还有
    NAT,TUNNEL,Full-NAT模式。LVS最常用的调度方案分别是轮询,加权轮询,最少连接数,
    加权最少连接数,目标地址散列调度算法,源地址散列调度算法。

请描述Nginx负载均衡原理

  • 客户端向反向代理发送请求,接着反向代理根据某种负载机制转发请求至运行着相同的
    应用目标服务器,并把获得的内容返回给客户端。Nginx的负载均衡实现主要由upstream和
    proxy两个模块实现;Nginx常用的调度算法有轮询,ip_hash,url_hash和fair四种。

请描述Redis集群原理

  • Redis集群是一个去中心化、多实例Redis间进行数据共享的集群。
    由于被设计为无中心节点和无代理节点,Redis集群可以实现集群节点的在线线性伸缩,
    并通过主从复制模型来提供一定程度的高可用,在实际环境中某个节点故障不可用时,
    集群其他节点可以持续提供服务。关于数据分片,Redis cluster并没有采用一致性hash,
    而是引入了hash slot。为了使集群中部分节点故障或者失去联系的情况下集群其他节点可以提供持续服务,
    Redis cluster 采用主从复制模型。简单的说,就是每个对外提供服务的节点,我们称之为master节点,
    并为每个master节点提供一个slave节点。当其中一个master节点故障时,
    其slave节点替代原有的master节点,以保证不会因为找不到slot而使整个集群不可用。

请描述MySQL主从复制原理

  • mysql主库在事务提交时会把数据库变更作为事件Events记录在二进制文件binlog中,
    然后主库会把二进制文件binlog中的事件推送到从库的中继日志relay log中,最后从库根据中继
    日志重做数据库变更操作。

请描述python列表的去重算法

  • 我的回答是数据量小的话直接用set()算法,不过面试官显然不太满意,继续追问我有没有其它的
    做法,我没有回答上来,事后我百度了一下,有一种用循环的方法可以用来去重,我猜想如果回答上了
    这一个,面试官可能会满意一些,具体就是先定义一个空列表然后在遍历需要去重的列表的同时判断元
    素是否在空列表中如果不在的话就append到空列表中去,具体代码如下:
L3 = [1,2,3,4,5,6,6,5,4,3,2,1]
L4 = []
for x in L3:
    if x not in L4:
        L4.append(x)
print(L4) #[1, 2, 3, 4, 5, 6]

有没有想过用脚本自动化添加Nginx的虚拟服务器

MySQL主从复制延迟的主要原因是什么

  • 网络延迟
  • 慢SQL语句过多
  • 从库硬件比主库差,导致复制延迟
  • master负载,主库读写压力大,导致复制延迟,架构的前端要加buffer及缓存层
  • 主从复制单线程,如果主库写并发太大,来不及传送到从库就会导致延迟,更高版本的mysql可以支持多线程复制
  • slave负载,一般的做法是,使用多台slave来分摊读请求,再从这些slave中取一台专用的服务器只作为备份用,不进行其他任何操作.