4 高可用
keepalived
keepalive 起初专门为 lvs 负载均衡软件设计的,用来管理监控 lvs 集群系统中各个服务节点的状态,后来又加入了可以实现高可用的 vrrp 功能。
keepalive 软件通过 vrrp 协议实现高可用功能的。 VRRP (虚拟路由器冗余协议)目的就是为了解决静态路由单点故障问题,竞选机制来将路由的任务交给某台 VRRP 路由器的,保证节点宕机,整个网络可以不间断的运行。
Keepalived 可以实现任意两台主机之间,例如 Master 和 Backup 主机之间的故障转移和自动切换,这个主机可以是普通的不能停机的业务服务器,也可以是 LVS 负载均衡、Nginx 反向代理这样的服务器。
Keepalived 工作方式:抢占式、非抢占式
Keepalived 高可用简单原理
master 端的 vrrp 路由器会一直发送 vrrp 广播包,buckup 会一直收到广播包,buckup 不会抢占 master 资源,在 backup 上会一直监听,一旦收不到 master 的包,在多台 backup 中优先级最高的就会抢占为 master。(master 若故障,则此机上 keepalived 会尝试重启;若重启失败,则关闭 keepalived,master 心跳包停发)。
keepalive 服务的三个重要功能
- 管理 LVS 负载均衡软件
- 实现对 LVS 集群节点健康检查功能
- 作为系统网络服务的高可用功能
- 双主热备. 自动切换(需要一个主备共用的 VIP,前端用 VIP 访问;如果 nginx 的 upstraem 负载均衡采用轮询,也能自动剔除故障机器)
案例:LVS. Nginx
集群前提条件
- 各节点时间必须同步,这个操作很关键。工具有 ntp 和 chrony(CentOS7 上开始启用)
- 确保 iptables 及 selinux 不会成为阻碍。要停止 firewalld 服务和 iptables
- 各节点之间可通过主机名互相通信(对 KA 并非必须),建议使用/etc/hosts 文件实现
- 各节点之间的 root 用户可以基于密钥认证的 ssh 服务完成互相通信(对 KA 并非必须,但是建议配置)
- 多播地址。建议更改默认的多播地址,防止冲突,可以在配置文件里的全局加入选项 vrrp_mcast_group4 224.100.50.100。将组播地址调整为 224.100.50.100。
keepalive+LVS 高可用
实现效果是当有请求过来时,根据轮询规则调度到后端 RS,同时实现了对 RS 的健康性检查,同时实现 VS 的高可用。
keepalive+Nginx 高可用
A 机器:192.168.232.132
B 机器:192.168.232.131
A 级器作为 master,B 机器作为 backup
常用命令
- service nginx start # 启动 nginx
- service nginx stop # 关闭 nginx
ip add #查看本机 ip 地址信息
systemctl stop keepalived #关闭 keepalive
systemctl start keepalived #启动 keepalive
A 机
$ vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
aming@aminglinux.com
}
notification_email_from root@aminglinux.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL #唯一标识,不同机器不能一样
}
vrrp_script chk_nginx {
script "/usr/local/sbin/check_ng.sh" # 检测 nginx 服务器活跃脚本
interval 3
}
#vrrp 实例,名字可以自定义,与前面关键字空格隔开
vrrp_instance VI_1 {
state MASTER # 标识主还是备,必须大写。A/B 机不一样,A 为 MASTER, B 为 BACKUP
interface eth0 # 默认的通信的接口,当 vip 不指定时,默认绑定 eth0。
virtual_router_id 51 # 实例 ID,0~255,主备一样
priority 100 # 权重,从机值稍小
advert_int 1 # 心跳间隔
authentication {
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress { # vip 地址,主备一样,可以指定多个
192.168.232.100
}
track_script {
chk_nginx
}
}
vrrp_instance VI_1 {
state MASTER # 标识主还是备,必须大写。A/B 机不一样,A 为 MASTER, B 为 BACKUP
interface eth0 # 默认的通信的接口,当 vip 不指定时,默认绑定 eth0。
virtual_router_id 51 # 实例 ID,0~255,主备一样
priority 100 # 权重,从机值稍小
advert_int 1 # 心跳间隔
authentication {
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress { # vip 地址,主备一样
192.168.232.100
}
track_script {
chk_nginx
}
}
脚本路径: /usr/local/sbin/check_ng.sh
#!/bin/bash
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算 nginx 进程数量
n=`ps -C nginx --no-heading|wc -l`
# 如果进程为 0,则启动 nginx,并且再次检测 nginx 进程数量,
# 如果还为 0,说明 nginx 无法启动,此时需要关闭 keepalived
if [ $n -eq "0" ]; then
/etc/init.d/nginx start
n2=`ps -C nginx --no-heading|wc -l`
if [ $n2 -eq "0" ]; then
echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
systemctl stop keepalived
fi
fi
本章参考
- Keepalived 详细介绍 https://www.cnblogs.com/losbyday/p/5841830.html
- Keepalive 详解 https://www.cnblogs.com/rexcheny/p/10778567.html
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论