Keepalived 高可用集群
集群类型
1、LB(Load Balance):负载均衡
LVS:四层负载均衡
HAProxy:七层/四层 负载均衡
nginx:七层负载均衡
(http/upstream,stream/upstream)
2、HA(High Availa bility):高可用集群
数据库、Redis
3、SPoF(Single Point of Failure):解决单点故障
HPC:High Performance Computing 高性能集群
集群实现高可用
建立冗余机制
1、active/passive:主/备
2、active/active:双主
3、active–>HEARTBEAT–>passive:心跳
4、active <–>HEARTBEAT <–>active:
VRRP 虚拟路由冗余
在现实的网络环境中,主机之间的通信都是通过配置静态路由(默认网关)来完成的,而主机之间的路由器一旦出现故障,就会通信失败。因此在这种通信模式下,路由器就会有单点瓶颈问题,为了解决这个问题,引入了VRRP协议(虚拟路由冗余协议)。
VRRP协议是一种容错的主备模式的协议,保证当主机的下一跳路由出现故障时,由另一台路由器来代替出现故障的路由器进行工作,通过VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信。
VRRP可以将两台或多台物理路由器设备虚拟成一个虚拟路由器,这个虚拟路由器通过虚拟IP(一个或多个)对外提供服务,而在虚拟路由器内部是多个物理路由器协同工作
虚拟路由器:Virtual Router
虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
VIP:Virtual IP
VMAC:Virutal MAC(00-00-5e-00-01-VRID)物理路由器:master:主设备backup:备用设备priority:优先级通告:心跳优先级等周期性工作方式:抢占式非抢占式安全认证:无认证简单字符认证:预共享密钥MD5工作模式:主/备:单虚拟路由器主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)
VRRP角色如下:
1、虚拟路由器:VRRP组中所有的路由器,拥有虚拟的IP+MAC(O0-00-5e-00-01-VRID)地址
2、主路由器(master):虚拟路由器内部通常只有一台物理路由器对外提供服务,主路由器是由选举算法产生,对外提供各种网络功能
3、备份路由器(backup):VRRP组中除主路由器之外的所有路由器,不对外提供任何服务,只接受主路由的通告,当主路由器挂掉之后,重新进行选举算法接替master路由器。
master路由器由选举算法产生,它拥有对外服务的VIP,提供各种网络服务,如ARP请求、数据转发、ICMP等等,而backup路由器不拥有VIP,也不对外提供网络服务;当master发生故障时,backup将重新进行选举,产生一个新的master继续对外提供服务
Keepalived 配置
Keepalived 基本配置
在调度机处配置,下载相关的软件:keepalived,ipvsamd(LVS)/HAProxy。
同一高可用集群内只能使用一种调度软件(LVS在Keepalived内的规则会与HAProxy冲突,导致服务启动失败)
全局配置:
虚拟网段配置:
实现VIP的通信
修改配置文件
进行添加或将两项都注释掉,都可进行通信(组播通信可开启两项,单播通信时需将注释掉)
......12# vrrp_strict13 vrrp_garp_interval 014 vrrp_gna_interval 015 vrrp_mcast_group4 224.0.0.1816# vrrp_iptables17 }......
日志管理
在日志配置文件内指定keepalived日志类型
[root@ka1 keepalived]# vim /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -S 6"
修改主日志文件内的配置
[root@ka1 keepalived]# vim /etc/rsyslog.conf
Keepalived 子配置文件生成
创建子配置文件:
在子配置文件内输入内容,如果子配置文件内内容错误,则会导致识别不到虚拟IP
抢占与非抢占
非抢占模式
修改配置文件
将两台设备都设置为备份设备
当一台设备宕机时,另一台设备接管VIP
效果演示:
抢占模式
修改配置文件
将两台设备都设置为备份设备
效果演示:
单播模式
防止数据报文过多导致调度机的负载过大
将 vrrp_strict 禁用才能使单播模式生效
修改配置文件:
效果演示:
[root@kal ~]# tcpdump -i eth0 -nn src host 172.25.254.10 and dst 172.25.254.20
设置邮箱通知
1、安装邮箱软件
[root@ka1 ~]# yum install mailx -y
2、获取设置邮箱的登录密码(以QQ邮箱为例)
在登录QQ邮箱之后,在主页面找到账号与安全(Windows版)
点击进入到新页面,往下滑找到安全设置
点击进入到新页面,页面最下方会有一个”生成授权码“
3、编辑 mail 配置文件
在配置文件末尾处配置set from=邮箱地址 ----发送至哪个账号
set smtp=smtp.qq.com
set smtp-auth-user=邮箱地址
set smtp-auth-password=lufwpklkkrctdgei
set smtp-auth=login
set ssl-verify=ignore
[root@ka1 ~]# echo test message | mail -s test 邮箱地址 ----测试mail配置文件是否正确
4、编辑自动通知脚本文件
[root@ka1 keepalived]# vim /etc/keepalived/mail.sh#!/bin/bash
mail_dest='2111234420@qq.com'mail_send()
{mail_subj="$HOSTNAME to be $1 vip remove"mail_mess="`date +%F\ %T`:vrrp remove,$HOSTNAME change $1"echo "$mail_mess" | mail -s "$mali_subj" $mail_dest
}
case $1 inmaster)mail_send master;;backup)mail_send backup;;fault)mail_sed fault;;*)exit 1;;
esac
5、编辑 keepalive 配置文件
调用编辑好的脚本文件,在设备发生变化时发送通知至指定账号
演示效果:
开启服务,KA1自动抢占VIP,KA2成为备份
多主模式
两台设备互为主/备,一台设备上存在两个虚拟的路由器ID
修改 keepalived 配置文件
一台设备内存在两个 VRID ,生成两个 VIP 地址,互相主/备
KA1 调度机:
KA2 调度机:
IPVS高可用
LVS 高可用
1、LVS 配置为DR 模式
服务主机配置:
[root@server1 ~]# ip a a 172.25.254.100/32 dev lo ----RS主机添加 VIP 地址关闭 RS 主机的VRP 应答功能,只接不发
[root@server1 ~]# echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@server1 ~]# echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@server1 ~]# echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
[root@server1 ~]# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
2、在调度机处修改 Keepalived 的配置,添加 LVS 的规则
调度机下载 LVS 软件(ipvsadm):
[root@ka1 ~]# yum install ipvsadm -y ----安装 LVS 软件
修改 keepalived 配置文件:
3、演示效果
当一台 RS 主机宕机时,自动将宕机的设备规则移除:
未宕机时可访问两台服务器:
一台服务器宕机时只能访问一台:
HAproxy 高可用
使用脚本实现主从切换
脚本编写:
判断文件是否存在,不存在则输出值为0,存在则为1
#!/bin/bash
[ ! -f "/etc/test" ]
修改keepalived配置文件
调用脚本,当脚本的值为1时,将其权重降低30,从而达到切换主从的目的,当脚本值不为1时,其权重重新回到初始值
效果演示:
文件不存在时,VIP在 KA1上
文件存在时,VIP 漂移至 KA2 上
HAProxy 的高可用实现
注意:keepalived 配置文件内,LVS 的规则配置应注释掉;如果之前进行过 LVS 集群的配置,应将 RS 服务器的 arp 应答功能打开
1、调度机服务器下载 HAProxy
[root@ka1 ~]# yum install haproxy -y
2、修改 haproxy 配置文件
[root@ka2 ~]# vim /etc/haproxy/haproxy.cfg
3、修改调度机的内核参数
[root@ka2 ~]# vim /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind = 1 ----在末尾行添加
4、编辑脚本
[root@ka1 keepalived]# vim /etc/keepalived/test.sh
#!/bin/bash
killall -0 haproxy ----当 haproxy 服务关闭时输出值1
5、修改 keepalived 配置文件
效果演示:
关闭 haproxy 服务,VIP 自动漂移至 KA2