【运维知识进阶篇】集群架构-Nginx高可用Keepalived(二)

简介: 【运维知识进阶篇】集群架构-Nginx高可用Keepalived(二)

将节点1的keepalived停掉

[root@LB01 ~]# systemctl stop keepalived

节点2接管VIP

1. [root@LB02 ~]# ip add | grep 10.0.0.3
2.     inet 10.0.0.3/32 scope global eth0

再次查看mac地址,此时物理地址与LB02上10.0.0.3MAC地址一致

Keepalived故障脑裂

由于某些原因,导致两台keepalived服务器在指定的时间内,无法检测到对方的心跳,但是两台服务器都可以正常使用。

一、常见故障原因

1、服务器网线松动等网络故障

2、服务器硬件故障发生损坏现象而崩溃

3、主备都开启了firewalld防火墙

二、脑裂故障测试

1、将主备主机的防火墙都打开

1. [root@LB01 ~]# systemctl start firewalld
2. [root@LB02 ~]# systemctl start firewalld

2、将刚刚的配置文件改回去

1. [root@LB01 ~]# vim /etc/keepalived/keepalived.conf  
2. global_defs {
3.     router_id LB01
4. }
5. 
6. vrrp_instance VI_1 {
7.     state MASTER
8. #nopreempt
9.     interface eth0
10.     virtual_router_id 50
11.     priority 150
12.     advert_int 1
13.     authentication {
14.         auth_type PASS
15.         auth_pass 1111
16.     }
17.     virtual_ipaddress {
18.         10.0.0.3
19.     }
20. }
21. [root@LB01 ~]# systemctl restart keepalived
22. 
23. [root@LB02 ~]# cat /etc/keepalived/keepalived.conf  
24. global_defs {
25.     router_id LB02
26. }
27. 
28. vrrp_instance VI_1 {
29.     state BACKUP
30. #nopreempt        
31.     interface eth0
32.     virtual_router_id 50
33.     priority 100
34.     advert_int 1
35.     authentication {    
36.         auth_type PASS
37.         auth_pass 1111
38.     }
39.     virtual_ipaddress {
40.         10.0.0.3
41.     }
42. }
43. [root@LB02 ~]# systemctl restart keepalived
44.

3、通过抓包查看信息

4、查看LB01和LB02中的IP,发现都有10.0.0.3

1. [root@LB01 ~]# ip add | grep 10.0.0.3
2.     inet 10.0.0.3/32 scope global eth0
3. 
4. [root@LB02 ~]# ip add | grep 10.0.0.3
5.     inet 10.0.0.3/32 scope global eth0

三、脑裂故障解决方案

解决思路:发生了脑裂,我们随便kill掉一台即可,可以通过编写脚本的方式,我们认为两边的ip add都有10.0.0.3,则发生了脑裂。我们在LB01上写脚本。

做免密钥方便获取LB02的ip信息:

1. [root@LB01 ~]# ssh-keygen
2. Generating public/private rsa key pair.
3. Enter file in which to save the key (/root/.ssh/id_rsa): 
4. Enter passphrase (empty for no passphrase): 
5. Enter same passphrase again: 
6. Your identification has been saved in /root/.ssh/id_rsa.
7. Your public key has been saved in /root/.ssh/id_rsa.pub.
8. The key fingerprint is:
9. SHA256:+NyOCiY7aBX8nEPwGeNQHjTLY2EXPKU1o33LTBrm1zk root@LB01
10. The key's randomart image is:
11. +---[RSA 2048]----+
12. |    oB.oo=       |
13. |   o+o*o= o      |
14. |  . =*+o.+ o     |
15. |   o.=..o B o .  |
16. |    = o So = E   |
17. |   . = o ..   .  |
18. | .o o . o .      |
19. |...+ .   o       |
20. |. ..  ... .      |
21. +----[SHA256]-----+
22. [root@LB01 ~]# 
23. [root@LB01 ~]# ssh-copy-id -i .ssh/id_rsa 10.0.0.6
24. /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub"
25. /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
26. /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
27. root@10.0.0.6's password: 
28. 
29. Number of key(s) added: 1
30. 
31. Now try logging into the machine, with:   "ssh '10.0.0.6'"
32. and check to make sure that only the key(s) you wanted were added.
33. 
34. [root@LB01 ~]# ssh '10.0.0.6' ip add | grep 10.0.0.3 | wc -l    #免密钥测试
35. 1

脚本编写并执行:

1. [root@LB01 ~]# cat check_split_brain.sh
2. LB01_VIP_Number=`ip add | grep 10.0.0.3 | wc -l`
3. LB02_VIP_Number=`ssh '10.0.0.6' ip add | grep 10.0.0.3 | wc -l`
4. if [ $LB01_VIP_Number -eq 1 -a $LB02_VIP_Number -eq 1 ]
5. then
6.  systemctl stop keepalived
7. fi 
8. [root@LB01 ~]# sh check_split_brain.sh

1. [root@LB01 ~]# ip add | grep 10.0.0.3
2. 
3. [root@LB02 ~]# ip add | grep 10.0.0.3
4.     inet 10.0.0.3/32 scope global eth0

Keepalived与Nginx

Nginx默认监听在所有的IP地址上,VIP飘到一台节点上,相当于Nginx多了VIP这个网卡,所以可以访问到Nginx所在的机器,但是如果Nginx宕机,会导致用户请求失败,但是keepalived没有挂掉不会进行切换,就需要编写脚本检测Nginx存活状态,如果不存活则kill掉keepalived,让VIP自动飘到备用服务器。

一、脚本编写并增加权限

1. [root@LB01 ~]# cat check_nginx.sh
2. nginxpid=`ps -C nginx --no-header|wc -l`
3. if [ $nginxpid -eq 0 ]
4. then
5.  systemctl restart nginx &>/etc/null
6.  if [ $? -ne 0 ]
7.  then
8.    systemctl stop keepalived
9.  fi
10. fi
11. 
12. [root@LB01 ~]# chmod +x check_nginx.sh
13. [root@LB01 ~]# ll check_nginx.sh
14. -rwxr-xr-x 1 root root 150 Apr 12 17:37 check_nginx.sh

二、脚本测试

1. [root@LB02 ~]# ip add|grep 10.0.0.3            #当前VIP不在LB02
2. 
3. [root@LB01 ~]# ip add|grep 10.0.0.3            #当前VIP在LB01上
4.     inet 10.0.0.3/32 scope global eth0
5. [root@LB01 ~]# systemctl stop nginx            #关闭Nginx
6. [root@LB01 ~]# ip add|grep 10.0.0.3            #VIP依旧在LB0上,因为Nginx对keepalived没有影响
7.     inet 10.0.0.3/32 scope global eth0
8. [root@LB01 ~]# vim /etc/nginx/nginx.conf       #修改Nginx配置文件,让其无法重启,查看是否会飘到LB02上
9. 
10. ser  nginx;
11. 
12. [root@LB01 ~]# sh check_nginx.sh               #执行脚本
13. [root@LB01 ~]# ip add|grep 10.0.0.3            #发现VIP已经不在LB02了
14. 
15. [root@LB02 ~]# ip add | grep 10.0.0.3          #VIP飘移到LB02上了
16.     inet 10.0.0.3/32 scope global eth0

三、在配置文件内中调用此脚本

1. [root@LB01 ~]# cat /etc/keepalived/keepalived.conf 
2. global_defs {        
3.     router_id LB01  
4. }
5. 
6. #每5秒执行一次脚本,脚本执行内容不能超过5秒,否则会中断再次重新执行脚本
7. vrrp_script check_nginx {
8.     script "/root/check_nginx.sh"
9.     interval 5
10. }
11. 
12. vrrp_instance VI_1 {
13.     state MASTER
14. #nopreempt
15.     interface eth0
16.     virtual_router_id 50
17.     priority 150
18.     advert_int 1
19.     authentication {
20.         auth_type PASS
21.         auth_pass 1111
22.     }
23.     virtual_ipaddress {         
24.         10.0.0.3
25.     }
26. #调用并运行脚本
27.     track_script {
28.       check_nginx
29.     }
30. }
31. 
32. 注意:在Master的keepalived中调用脚本,抢占式,仅需在Master配置即可。如果配置为非抢占式,那么需要两台服务器都使用该脚本。

我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

目录
相关文章
|
5月前
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
147 0
|
2月前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
39 4
|
2月前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
58 3
|
3月前
|
存储 运维 监控
实时计算Flink版在稳定性、性能、开发运维、安全能力等等跟其他引擎及自建Flink集群比较。
实时计算Flink版在稳定性、性能、开发运维和安全能力等方面表现出色。其自研的高性能状态存储引擎GeminiStateBackend显著提升了作业稳定性,状态管理优化使性能提升40%以上。核心性能较开源Flink提升2-3倍,资源利用率提高100%。提供一站式开发管理、自动化运维和丰富的监控告警功能,支持多语言开发和智能调优。安全方面,具备访问控制、高可用保障和全链路容错能力,确保企业级应用的安全与稳定。
53 0
|
3月前
|
Unix 应用服务中间件 Linux
Nginx入门--初识Nginx的架构
Nginx入门--初识Nginx的架构
63 0
|
5月前
|
负载均衡 前端开发 应用服务中间件
FastDFS+Nginx+fastdfs-nginx-module集群搭建
FastDFS+Nginx+fastdfs-nginx-module集群搭建
|
5月前
|
运维 Oracle 前端开发
Oracle 11g RAC集群日常运维命令总结
Oracle 11g RAC集群日常运维命令总结
116 2
|
5月前
|
运维 负载均衡 监控
Nginx加Keepalived实现高可用
使用Nginx和Keepalived来实现高可用性的方案,对于确保关键服务的稳定性和可靠性来说是非常有效的。此配置涉及多个步骤,包括各个服务的安装、设置及测试,目标是在主服务器故障时能无缝切换,以确保服务的持续可用。正确的配置和充分的测试是实现高可用性的保证,这也要求管理员对这些工具和它们背后的原理有深入的了解。
96 1
|
5月前
|
应用服务中间件 网络安全 nginx
运维专题.Docker+Nginx服务器的SSL证书安装
运维专题.Docker+Nginx服务器的SSL证书安装
207 3
|
5月前
|
缓存 运维 应用服务中间件
运维系列.Nginx配置中的高级指令和流程控制
运维系列.Nginx配置中的高级指令和流程控制
181 1

热门文章

最新文章