Linux HA 集群原理和配置-03

Linux HA 集群原理和配置-03,第1张

本文介绍在Linux HA集群中的stonith模块功能。

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/6248334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-19
下一篇 2023-03-19

发表评论

登录后才能评论

评论列表(0条)

保存