高可用HA
单点故障:某个重要的功能只有一份,如果他出现问题,会导致全局不能使用
“高可用性”(High Availability,缩写为HA)用于描述系统或服务在面临故障、硬件或软件问题时能够继续正常运行的能力。高可用性的目标是最大程度地减少系统中断或停机时间,确保用户可以随时访问服务或应用程序。
三个经典的高可用软件:hearbeat、keepalived、HAproxy
keepalived实现高可用
keepalived两大核心功能:
1、loadbalance 负载均衡:ipvs -> LVS软件在Linux内核里已经安装
2、high-avaliability 高可用:vrrp协议(虚拟路由冗余协议)
keepalived启动之后会有三个进程:
父进程: 内存管理,子进程管理等
子进程: VRRP子进程
子进程: healthchecker子进程,查看各自服务器的健康状况
出错了可以看日志:
/var/log/messages
两台负载均衡器上都需要安装nginx,使用nginx做七层负载均衡,
VRRP协议
virtual router redundancy protocol 虚拟路由冗余协议
一组路由器协同工作,担任不同工作,担任不同角色,有master角色,也有backup角色
master角色的路由器(的接口)承担实际的数量流量转发任务
backup路由器监听master路由器的状态,并在master路由器发生故障时,接替其工作,从而保证业务流量的平滑切换
vrrp协议工作在网络层
vrrp协议使用固定的组播地址224.0.0.18进行发送
帧的组播地址:目的地址 - 01:00:5E:00:00:12
第8位为1,代表这个mac地址是一个广播地址
vrrp协议的工作原理:
- 所有的路由器或服务器发生vrrp宣告报文,进行选举,必须是相同vrid和认证密码,优先级高的服务器或路由器会被选举为master
- master定时发生vrrp通告报文,以便向backup路由器告知自己的存活情况,默认时间间隔是1秒
- 接收master设备发送的vrrp通告报文,判断master设备的状态是否正常。如果超过1秒没有收到vrrp报文,就认为master挂了,开始重新选举新的master,vip会飘移到新的master上
单VIP架构
LB2:192.168.232.165
-
在两台LB上安装keepalived
yum install keepalived -y
-
修改主LB的配置文件
cd /etc/keepalived/ vim keepalived.conf ! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr #vrrp_strict # 注释这一行 vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_instance VI_1 { state MASTER # 主LB interface ens33 virtual_router_id 58 # 虚拟路由器id priority 120 # 优先级(0~255) advert_int 1 # 宣告消息的间隔事件为1秒 authentication { # 认证 auth_type PASS auth_pass 1111 } virtual_ipaddress { # VIP 192.168.232.111 } }
-
修改从LB的配置文件
cd /etc/keepalived/ vim keepalived.conf ! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr #vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_instance VI_1 { state BACKUP # 从LB interface ens33 virtual_router_id 58 priority 100 # 优先级要比主LB小 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.232.111 } }
-
配置完成之后刷新服务
service keepalived restart
这个时候就可以在主LB服务器上看到VIP,而从LB服务器上没有这个VIP。VIP在哪一个服务器上,就由哪一个服务器对外提供服务
VIP飘移
master挂了(或keepalived服务关闭),VIP就会飘移到slave上,这个时候就可以在从LB上看到这个VIP。如果master恢复,VIP就会飘会主LB上(优先级更高)
脑裂
多台机器出现同一个VIP
脑裂出现的原因:
1、vrid(虚拟路由id)不一样
2、网络通信有问题(防火墙组织了vrrp报文的通信)
3、认证密码不一样
双VIP架构(互为主从)
双VIP的架构可以实现负载均衡
只要将以下代码加入主LB的配置文件,作为第二个VIP的从服务器
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 59
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.232.112
}
}
将以下代码加入从LB的配置文件,作为第二个VIP的主服务器
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 59
priority 120
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.232.112
}
}
这个时候就可以在主LB上看到192.168.232.111这个VIP,在从LB上看到192.168.232.112
完成高可用之后就可以在DNS服务器里添加这两个IP的记录了
keepalived监控 、执行脚本
Keepalived 可以通过检查状态来了解当前主服务器和备用服务器的状态
keepalived的基础是nginx服务,nginx服务停止了,就会检测为状态异常
实例:监控本机的nginx进程是否运行,如果nginx进程不运行就立马将优先级降低30
如何判断nginx是否运行
1、pidof nginx
2、查看kiilall -0 nginx
这条命令的返回值
-
编写监控nginx脚本,授予可执行权限,也可以直接写在keepalived里
mkdir /nginx cd /nginx vim check_nginx.sh #!/bin/bash if /usr/sbin/pidof nginx &>/dev/null ;then exit 0 else exit 1 fi chmod +x check_nginx.sh
-
在keepalived里定义并调用监控脚本
# 在global_defts部分后面加: # 定义监控脚本chk_nginx # 当脚本执行返回值为1时才会执行下面权重值-30的操作 vrrp_script chk_nginx { script "/nginx/check_nginx.sh" interval 1 # 每隔一秒执行 weight -30 # 返回值为0时就把优先级-30 } #主LB在vrrp_instance VI_1中添加,从在VI_2中添加: # 调用监控脚本 track_script { chk_nginx }
是master的那个vrrp实例调用vrrp监控脚本文章来源:https://www.toymoban.com/news/detail-702784.html
notify
notify脚本是当本节点服务器成为某个角色的时候,就会去执行某个脚本文章来源地址https://www.toymoban.com/news/detail-702784.html
# 状态改变为master后执行的脚本
notify_master "/mail/master.sh"
# 状态改变为backup后执行的脚本
notify_backup "/mail/backup.sh"
# vrrp停止后执行的脚本
notify_stop "/mail/stop.sh"
到了这里,关于nginx两台负载均衡服务器之间使用keepalived实现高可用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家