安装工具:keepalived
目标节点:
hostname | IP Address |
master01 | 192.168.0.143 |
master02 | 192.168.0.144 |
master03 | 192.168.0.145 |
集群虚IP | 192.168.0.140 |
三台机器上分别安装keepalived
#yum install –y keepalived |
#vi /etcd/keepalived/keepalived.conf
注意备份原始keepalived.conf文件。修改后内容如下:
! Configuration File for keepalived
global_defs { # 接收邮件地址 notification_email { } # 邮件发送地址 notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id NGINX_MASTER }
vrrp_instance VI_1 { state MASTER interface ens33 #网卡接口信息 virtual_router_id 51 # VRRP 路由 ID实例,每个实例是唯一的 priority 100 # 优先级,备服务器设置 90、80 advert_int 1 # 指定VRRP 心跳包通告间隔时间,默认1秒 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.0.140/24 #集群虚拟IP,三台机器上配置相同VIP } } |
master02 和master03机器上配置同上,注意修改为对应主机网卡名。
#vi /etcd/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { # 接收邮件地址 notification_email { } # 邮件发送地址 notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id NGINX_MASTER }
vrrp_instance VI_1 { state BACKUP interface ens33 #网卡接口信息 virtual_router_id 51 # VRRP 路由 ID实例,每个实例是唯一的 priority 90 # 优先级,备服务器设置 90 advert_int 1 # 指定VRRP 心跳包通告间隔时间,默认1秒 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.0.140/24 #集群虚拟IP,三台机器上配置相同VIP } } |
#vi /etcd/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { # 接收邮件地址 notification_email { } # 邮件发送地址 notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id NGINX_MASTER }
vrrp_instance VI_1 { state BACKUP interface ens33 #网卡接口信息 virtual_router_id 51 # VRRP 路由 ID实例,每个实例是唯一的 priority 80 # 优先级,备服务器设置 90 advert_int 1 # 指定VRRP 心跳包通告间隔时间,默认1秒 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.0.140/24 #集群虚拟IP,三台机器上配置相同VIP } } |
三台机器均执行命令:
#service keepalived start #chkconfig keepalived on
也可以执行下面命令: #systemctl daemon-reload #systemctl start keepalived #systemctl enable keepalive |
分别查看三台机器的IP地址信息:
master01:
#ip addr show ens33
inet 192.168.72.140/24 scope global secondary eno16777736:说明现在的主机是以虚IP的master来运行的。
master02:
master02网卡信息并没有虚IP192.168.0.140的信息,说现在主机是以实际IP来运行,虚IP并未漂移到该主机上。
master03:
master03网卡信息并没有虚IP192.168.0.140的信息,说现在主机是以实际IP来运行,虚IP并未漂移到该主机上。
接下来,我们停止master01主机上keepalived服务:
可以看到,当keepalived服务运行是,master01上是包含虚IP192.168.0.140地址信息的,然后我们关闭keepalived服务,此时master01网卡已经不包含虚IP192.168.0.140地址信息,虚IP应该是飘到别的机器上了,我们来看一下,虚IP是否漂移到剩余的备用机其中的一台上
然后,我们看一下master02上keepalived服务:
可以看到,原本master02机器上并没有包含虚IP地址信息,当master01主机通知keepalived服务后,在master02机器上能够重新看到虚IP地址信息,说明虚IP已经从master01漂移到master02主机上了。
此时,我们需要再看看master03网卡地址信息:
master03网卡上依然没有虚IP的踪迹,这是为何?
因为,前面我们在配置keepalived.conf文件时,设定了虚IP漂移主机的优先级,分别对应【master01】MASTER---priority 100、【master02】BACKUP---priority 90、【master03】BACKUP---priority 80。安装这个规则虚IP应该要漂移到master02上。那么按照这个规则,我们在把master02上的keepalived服务停止,虚IP将漂移到master03上。
对比master02和master03上网卡地址信息,果然,虚IP成功漂移到master03了。
再接下来,我们依次重启master01和master02的keepalived服务,再来对比一下三台机器网卡地址信息,看看虚IP将再次漂移到哪里。
master03先不动它,因为此时的虚IP已经在master03网卡上。我们先来开启maser02上keepalived服务:
发现,虚IP并未出现的master02上。
继续重启master01上keepalived服务:
虚IP跑回来了,重新出现在master01的网卡上。再看看master03:
原本停留在master03上的虚IP再次的漂移走了,现在已经重新绑定到master01上了。
至此,我们使用keepalived实现了kubernetes集群下虚IP的漂移,对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,这时就需要根据 VRRP 的优先级来选举一个 backup 当 master,保证路由器的高可用,继续提供服务,从而保证了高可用性。。
注意:
在keepalived.conf配置正常情况下,出现虚IP不会漂移,这是因为VRRP通信基于报文实现的,当防火墙开启且没有放行vrrp,从服务器接受不到主服务器的心跳,从服务器认为主服务器挂了,在抢占模式中,从服务器反客为主。也就是master设置一定时间发送一个报文给backup,但是backup没有收到,于是自己就成为master。