Stonith,全称Shoot The Other Node In The Head,用于防止集群出现脑裂现象。简单来说,一旦集群中的节点相互之间失去了通信,无法知道其他节点的状态,此时集群中的每个节点将尝试fence(隔离或“射杀”)失去通信的节点,确保这些节点不再抢夺资源,然后才继续启动服务资源,对外提供服务。
在3台集群主机上安装fence-agents软件包。
安装完毕后可查看到系统支持的stonith设备类型:
以上输出中的每个Fence agent都是一种Stonith设备,从名字的后缀可以看出,这些Agent有以下几类:
前两种都属于电源类型的Stonith设备,而第三种和电源无关,之所以要这样划分,是因为:
以下以fence_scsi为例进行实验。
安装 《在CentOS7上配置iSCSI》 中的方法,通过一台专用的存储节点ha-disks为集群中的3个主机提供共享存储(即在ha-disks上创建iscsi硬盘,然后将其映射到3个集群主机上)。
在iscsi-disks上创建3个100M的硬盘fen1,fen2,fen3,挂载到主机上后设备名称分别为sdb,sdc,sdd
测试一下这些硬盘是否支持PR Key:
首先使用一个fence盘/dev/sdb来进行实验:
使用sg_persist -s参数获取/dev/sdb上的所有信息:
可以看到,3个节点使用不同的PR Key在这个磁盘上进行了注册(register),并且ha-host1保留(reservation)成功,类型为“Write Exclusive, registrants only”。表明此时只有ha-host1对该磁盘进行写 *** 作。
此时如果断开其中两个节点的的链接,如ha-host1和ha-host3:
可以看到,经过协商后,ha-host3退出集群,并且也删除在fencing磁盘中的注册信息。由于stonith资源运行在ha-host2上,所以在ha-host2的日志中可以看到ha-host3被fence的过程:
ha-host3被fence之后,必须重启才能重新注册PR Key,否则即使网络恢复,其也无法运行需要stonith支持的资源。
问题:仲裁机制保证了必须有超过半数的节点的partition才能启动资源,拿为什么还需要stonith设备?
给大家分享一些Linux面试题的笔记,从负载均衡、nginx、MySQL、redis、kafka、zabbix、k8s等方面拆解 Linux 知识点。用来对个人技术点进行查漏补缺。目录:
1. 磁盘使用率检测(用shell脚本)
2. LVS 负载均衡有哪些策略?
3. 谈谈你对LVS的理解?
4. 负载均衡的原理是什么?
5. LVS由哪两部分组成的?
6. 与lvs相关的术语有哪些?
7. LVS-NAT模式的原理
8. LVS-NAT模型的特性
9. LVS-DR模式原理
10. LVS-DR模型的特性
11. LVS三种负载均衡模式的比较
12. LVS的负载调度算法
13. LVS与nginx的区别
14. 负载均衡的作用有哪些?
15. nginx实现负载均衡的分发策略
16. keepalived 是什么?
17. 你是如何理解VRRP协议的
18. keepalived的工作原理?
19. 出现脑裂的原因
20. 如何解决keepalived脑裂问题?
21. zabbix如何监控脑裂?
22. nginx做负载均衡实现的策略有哪些
23. nginx做负载均衡用到哪些模块
24. 负载均衡有哪些实现方式
25. nginx如何实现四层负载?
26. 你知道的web服务有哪些?
27. 为什么要用nginx
28 . nginx的性能为什么比apache高?
29 . epoll的组成
30 . nginx和apache的区别
31. Tomcat作为web的优缺点?
32. tomcat的三个端口及作用
33. fastcgi 和cgi的区别
34. nginx常用的命令
35. 什么是反向代理,什么是正向代理,以及区别?
36. Squid、Varinsh、Nginx 有什么区别?
37. nginx是如何处理http请求的
38. nginx虚拟主机有哪些?
39. nginx怎么实现后端服务的健康检查
40. apache中的Worker 和 Prefork 之间的区别是什么?
41. Tomcat缺省端口是多少,怎么修改
42. Tomcat的工作模式是什么?
43. Web请求在Tomcat请求中的请求流程是怎么样的?
44. 怎么监控Tomcat的内存使用情况
45. nginx的优化你都做过哪些?
46. Tomcat你做过哪些优化
47. nginx的session不同步怎么办
48. nginx的常用模块有哪些?
49. nginx常用状态码
50. 访问一个网站的流程
51. 三次握手,四次挥手
52. 什么是动态资源,什么是静态资源
53. worker支持的最大并发数是什么?
54. Tomcat和Resin有什么区别,工作中你怎么选择?
55. 什么叫网站灰度发布?56.. 统计ip访问情况,要求分析nginx访问日志,找出访问页面数量在前十位的ip
57. nginx各个版本的区别
58. nginx最新版本
59. 关于nginx access模块的面试题
60. nginx默认配置文件
61. location的规则
62. 配置nginx防盗链
63. drop,delete和truncate删除数据的区别?
64. MySQL主从原理
65. MySQL主从复制存在哪些问题?
66. MySQL复制的方法
67. 主从延迟产生的原因及解决方案?
68. 判断主从延迟的方法
69. MySQL忘记root密码如何找回
70. MySQL的数据备份方式
71. innodb的特性
72. varchar(100) 和varchar(200)的区别
73. MySQL主要的索引类型
74. 请说出非关系型数据库的典型产品、特点及应用场景?
75. 如何加强MySQL安全,请给出可行的具体措施?
76. Binlog工作模式有哪些?各什么特点,企业如何选择?
77. 生产一主多从从库宕机,如何手工恢复?
78. MySQL中MyISAM与InnoDB的区别,至少5点
79. 网站打开慢,请给出排查方法,如是数据库慢导致,如何排查并解决,请分析并举例?
80. xtrabackup的备份,增量备份及恢复的工作原理
81.误执行drop数据,如何通过xtrabackup恢复?
82. 如何做主从数据一致性校验?
83. MySQL有多少日志
84. MySQL binlog的几种日志录入格式以及区别
85. MySQL数据库cpu飙升到500%的话他怎么处理?
86. redis是单线程还是多线程?
87. redis常用的版本是?
88. redis 的使用场景?
89. redis常见的数据结构
90. redis持久化你们怎么做的?
91. 主从复制实现的原理
92. redis哨兵模式原理
93. memcache和redis的区别
94. redis有哪些架构模式?
95. 缓存雪崩?
96. 缓存穿透
97. 缓存击穿
98. redis为什么这么快
99. memcache有哪些应用场景
100. memcache 服务特点及工作原理
101. memcached是如何做身份验证的?
102. mongoDB是什么?
103. mongodb的优势
104. mongodb使用场景
105. kafka 中的ISR,AR代表什么,ISR伸缩又代表什么
106.kafka中的broker 是干什么的
107. kafka中的 zookeeper 起到什么作用,可以不用zookeeper么
108. kafka follower如何与leader同步数据
109. kafka 为什么那么快
110. Kafka中的消息是否会丢失和重复消费?
111. 为什么Kafka不支持读写分离?
112. 什么是消费者组?
113. Kafka 中的术语114. kafka适用于哪些场景
115. Kafka写入流程:
116. zabbix有哪些组件
117. zabbix的两种监控模式
118. 一个监控系统的运行流程
119. zabbix的工作进程
120. zabbix常用术语
121. zabbix自定义发现是怎么做的?
122. 微信报警
123. zabbix客户端如何批量安装
124. zabbix分布式是如何做的
125. zabbix proxy 的使用场景
126. prometheus工作原理
127. prometheus组件
128. ELK工作流程
129. logstash的输入源有哪些?
130. logstash的架构
131. ELK相关的概念
132. es常用的插件
134. zabbix你都监控哪些参数
135. MySQL同步和半同步
136. CI/CD
137 K8S监控指标
138. k8s是怎么做日志监控的
139. 【运维面试】k8s中service和ingress的区别
140. k8s组件的梳理
141. 关于tcp/IP协议
142. 谈谈你对CDN的理解
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
Keepalived采用是模块化设计,不同模块实现不同的功能。
keepalived主要有三个模块,分别是core、check和vrrp。
core :是keepalived的核心,负责主进程的启动和维护,全局配置文件的加载解析等
check : 负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析;可基于脚本检查对IPVS后端服务器健康状况进行检查
vrrp :VRRPD子进程,VRRPD子进程就是来实现VRRP协议的
keepalived 配置文件:
Keepalived 配置文件为:keepalived.conf;
主要有三个配置区域,分别是:全局配置(Global Configuration)、VRRPD配置、LVS配置
全局配置又包括两个子配置: 全局定义(global definition) 静态IP地址/路由配置(static ipaddress/routes)
Keepalived服务VRRP的工作原理:
Keepalived高可用对之间是通过 VRRP进行通信的, VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主宕机的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务
在 Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP广播包,告诉备它还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快
出现脑裂的原因:
高可用服务器对之间心跳线链路发生故障,导致无法正常通信。
因心跳线坏了(包括断了,老化)。
因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)
因心跳线间连接的设备故障(网卡及交换机)
因仲裁的机器出问题(采用仲裁的方案)
高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。
高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败
其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。
如何解决脑裂:
① 同时使用串行电缆和以太网电缆连接,同时用两条心跳线路,这样一条线路坏了,另一个还是好的,依然能传送心跳消息。
② 当检测到裂脑时强行关闭一个心跳节点(这个功能需特殊设备支持,如Stonith、feyce)。相当于备节点接收不到心跳消患,通过单独的线路发送关机命令关闭主节点的电源。
③ 做好对裂脑的监控报警(如邮件及手机短信等或值班).在问题发生时人为第一时间介入仲裁,降低损失。管理员可以通过手机回复对应数字或简单的字符串 *** 作返回给服务器.让服务器根据指令自动处理相应故障这样解决故障的时间更短。
####################################################################
大家知道keepalived会有四种状态的变化,每种状态变化时,都可以调用一个脚本
当进入Master状态时会呼叫notify_master
当进入Backup状态时会呼叫notify_backup
当发现异常情况时进入Fault状态呼叫notify_fault
当Keepalived程序终止时则呼叫notify_stop
进入Master和Backup这两种状态很容易理解了,就是分别变为主和从
进入Fault,简单的说就是keepalived发现自己有问题了,不能能再去参与Master竞选了,你得修好他才行。
进入这种状态一般是keepalived自身出问题了,或者keepalived检测的网卡出问题不通了,再或者就是我们自己写的检测业务的脚本返回错误
进入Stop 这个就容易理解了,执行service keepalived stop 或者 systemctl stop keepalived 就会进入这个状态。
设置selinux为宽松模式
# setenforce 0
# sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
CentOS防火墙默认是不允许keepalived使用 vrrp的组播。
如果不开启组播ip,keepalived双机不能实现热备的效果,只能实现负载的效果,即虚拟ip不能实现漂移 。
Check that the multicast IP and protocol for VRRP are allowed in the firewall on both servers.
For firewalld:
添加规则
# firewall-cmd --direct --permanent--add-rule ipv4 filterINPUT 0 --in-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
# firewall-cmd --direct --permanent--add-ruleipv4 filterOUTPUT 0 --out-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
# firewall-cmd --reload
删除规则
# firewall-cmd --direct --permanent--remove-ruleipv4 filterINPUT 0 --in-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
# firewall-cmd --direct --permanent--remove-rule ipv4 filterOUTPUT 0 --out-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
# firewall-cmd --reload
For iptables:
添加规则
# iptables -A INPUT -p vrrp -j ACCEPT
# iptables -A OUTPUT -p vrrp -j ACCEPT
# service iptables save
删除规则
# iptables -D INPUT -p vrrp -j ACCEPT
# iptables -D OUTPUT -p vrrp -j ACCEPT
# service iptables save
keepalived基本应用解析
http://blog.51cto.com/pangge/1301878
keepalived官方文档
http://www.keepalived.org/doc/introduction.html
使用keepalived实现redis的故障切换
http://peiqiang.net/2014/11/21/keepalived-and-redis.html
Kamailio High Availability Done Right with Keepalived
http://blog.unicsolution.com/2015/01/kamailio-high-availability-with.html
Keepalived Check and Notify Scripts
https://tobrunet.ch/keepalived-check-and-notify-scripts
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)