【运维知识进阶篇】集群架构-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年运维经验,持续分享运维干货,感谢大家的阅读和关注!

目录
相关文章
|
6月前
|
机器学习/深度学习 人工智能 运维
云架构不是养祖宗,智能运维教你省心又省钱
云架构不是养祖宗,智能运维教你省心又省钱
173 2
|
6月前
|
数据采集 运维 数据可视化
AR 运维系统与 MES、EMA、IoT 系统的融合架构与实践
AR运维系统融合IoT、EMA、MES数据,构建“感知-分析-决策-执行”闭环。通过AR终端实现设备数据可视化,实时呈现温度、工单等信息,提升运维效率与生产可靠性。(238字)
|
5月前
|
运维 Prometheus 监控
别再“亡羊补牢”了!——聊聊如何优化企业的IT运维监控架构
别再“亡羊补牢”了!——聊聊如何优化企业的IT运维监控架构
235 8
|
8月前
|
运维 监控 Cloud Native
从“守机器”到“写策略”——云原生架构把运维逼成了架构师
从“守机器”到“写策略”——云原生架构把运维逼成了架构师
199 1
|
7月前
|
运维 监控 安全
“没服务器了,那我这运维是白干了吗?”——无服务器架构对运维的冲击与转机
“没服务器了,那我这运维是白干了吗?”——无服务器架构对运维的冲击与转机
173 0
|
11月前
|
Kubernetes 安全 应用服务中间件
IngressNightmare:Ingress Nginx 再曝5个安全漏洞,可接管你的 K8s 集群
是否还记得 2022 年 K8s Ingress Nginx 披露了的 3 个高危安全漏洞(CVE-2021-25745, CVE-2021-25746, CVE-2021-25748),并在那一年宣布停止接收新功能 PR,专注修复并提升稳定性。
|
12月前
|
运维 供应链 前端开发
中小医院云HIS系统源码,系统融合HIS与EMR功能,采用B/S架构与SaaS模式,快速交付并简化运维
这是一套专为中小医院和乡镇卫生院设计的云HIS系统源码,基于云端部署,采用B/S架构与SaaS模式,快速交付并简化运维。系统融合HIS与EMR功能,涵盖门诊挂号、预约管理、一体化电子病历、医生护士工作站、收费财务、药品进销存及统计分析等模块。技术栈包括前端Angular+Nginx,后端Java+Spring系列框架,数据库使用MySQL+MyCat。该系统实现患者管理、医嘱处理、费用结算、药品管控等核心业务全流程数字化,助力医疗机构提升效率和服务质量。
684 4
|
弹性计算 运维 网络协议
卓越效能,极简运维,Serverless高可用架构
本文介绍了Serverless高可用架构方案,当企业面对日益增长的用户访问量和复杂的业务需求时如何实现更高的灵活性、更低的成本和更强的稳定性。
|
弹性计算 运维 Serverless
卓越效能,极简运维,体验Serverless高可用架构,完成任务可领取转轮日历!
卓越效能,极简运维,体验Serverless高可用架构,完成任务可领取转轮日历!
|
运维 监控 安全
自动化运维的利剑:Ansible在现代IT架构中的应用
在数字化浪潮中,企业对IT系统的敏捷性和可靠性要求日益提高。Ansible,一种简单但强大的自动化运维工具,正成为现代IT架构中不可或缺的一部分。它通过声明式编程语言YAM,简化了系统配置、应用部署和任务自动化的过程,显著提升了运维效率和准确性。本文将深入探讨Ansible的核心特性、应用场景以及如何有效整合进现有IT环境,为读者揭示其在自动化运维中的实用价值和未来发展潜力。