keepalived配置非抢占模式

keepalived配置非抢占模式(默认是抢占模式,需要自己配置为非抢占模式)

keepalive配置抢占模式就是:当keepalived的master节点服务器挂了之后vip漂移到了备节点,当主节点恢复后主动将vip再次抢回来。
keepalived默认就是抢占模式。
可以看的出来,抢占模式实现了两次vip的漂移,如果我们觉得第二次的vip漂移是多余的,那么我们可以将keepalived配置非抢占模式;

非抢占式:
master故障--->backup顶上--->master恢复不抢占vip--->backup拥有vip继续工作

非抢占式配置:

1、两个节点的state都必须配置为BACKUP(官方建议)
2、两个节点都在vrrp_instance中添加nopreempt参数(其实优先级高的配置nopreempt参数即可)
3、其中一个节点的优先级必须要高于另外一个节点的优先级。

两台服务器都启用nopreempt后,必须修改角色状态统一为BACKUP,唯一的区分就是优先级。

官方对nopreempt参数解释:高优先级VRRP实例通常会抢占低优先级VRRP实例,
"nopreempt"参数将停止优先级更高的机器在抢占vip,并允许较低优先级的机器保持为master。
注意:要使nopreempt参数起作用,初始状态不能是MASTER。

配置非抢占模式的Keepalived

#配置一个优先级高的节点,同时使用nopreempt参数定义为非抢占模式
[root@master~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id LB1			#keepalived服务器的路由标识,用于标识机器的,默认值是主机名
   vrrp_skip_check_adv_addr	#保持默认参数
   vrrp_strict				#保持默认参数
   vrrp_garp_interval 0		#保持默认参数
   vrrp_gna_interval 0		#保持默认参数
}

vrrp_instance VI_1 {		#VT_1是实例名,可以自定义,建议主备的实例名保持一致,让人一眼就知道这两个是一对的
    state BACKUP			#配置为BACKUP,因为我们要用非抢占模式
    interface ens33			# vip绑定的网卡
    virtual_router_id 51	#虚拟路由id,用于标识一个唯一的实例,master和backup该标识必须相同,用于表示他两是一组的
    nopreempt				#配置为非抢占模式
    priority 100			#优先级设为100,优先级用于确定谁具有vip,谁就是主节点
    advert_int 1			#心跳包的时间间隔,默认就是1秒就发一次
    authentication {		#主备之间的认证信息
        auth_type PASS		#认证类型,默认PASS
        auth_pass 1111		#认证密码
    }
    virtual_ipaddress {
        192.168.118.100		#vip地址
    }
}

[root@master~]#
#配置一个优先级低的节点,可以不用使用nopreempt参数
[root@master~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id LB2 				#keepalived服务器的路由标识,用于标识机器的,默认值是主机名
   vrrp_skip_check_adv_addr		#保持默认参数
   vrrp_strict					#保持默认参数
   vrrp_garp_interval 0			#保持默认参数
   vrrp_gna_interval 0			#保持默认参数
}

vrrp_instance VI_1 {			#VT_1是实例名,可以自定义,建议主备的实例名保持一致,让人一眼就知道这两个是一对的
    state BACKUP				#配置为BACKUP,state:有两种状态MASTER、BACKUP,谁为主节点是由prority决定,并不是由state决定
    interface ens33				# vip绑定的网卡
    virtual_router_id 51		#虚拟路由id,用于标识一个唯一的实例,同时主备应该保持一致,用于表示他两是一组的
    priority 50					#设的比master的优先级低,优先级用于确定谁具有vip,谁就是主节点
    advert_int 1				#心跳包的时间间隔,默认就是1秒就发一次
    authentication {			#主备之间的认证信息
        auth_type PASS			#认证类型,默认PASS
        auth_pass 1111			#认证密码
    }   
    virtual_ipaddress {
        192.168.118.100			#vip地址
    }   
}

现在,我们配置了两个节点,这两个节点state指定的都是BACKUP,同时,其中一个优先级高于一个节点,优先级高的节点配置了 nopreempt参数表示非抢占模式。下面来验证。

验证非抢占模式

启动两个节点,哪个节点的keepalived先启动那么vip就会绑定在哪个节点上。
如果优先级低的节点先启动,那么vip肯定是在优先级低的节点上,再启动优先级高的节点,由于优先级高的节点配置了nopreempt参数所以不会去抢占vip。

注意:配置非抢占模式后,我们要注意启动keepalived服务的顺序,假设我想让A服务成为backup备节点,那就不能先启动A服务的keepalived服务。

下面进行验证:

# 现在vip在优先级高的节点上
[root@master ~]# ip a
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:60:6e:7b brd ff:ff:ff:ff:ff:ff
    inet 192.168.118.129/24 brd 192.168.118.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.118.100/32 scope global ens33
       valid_lft forever preferred_lft forever

#查看优先级低的节点,没有vip
[root@backup ~]# ip a
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:28:67:09 brd ff:ff:ff:ff:ff:ff
    inet 192.168.118.132/24 brd 192.168.118.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
#停掉优先级高的节点的keepalived服务,模拟挂掉,
[root@master ~]# systemctl  stop keepalived.service 
#查看vip已经不在了
ip[root@master ~]# ip a | head -n16
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:60:6e:7b brd ff:ff:ff:ff:ff:ff
    inet 192.168.118.129/24 brd 192.168.118.255 scope global ens33
       valid_lft forever preferred_lft forever
[root@master ~]# 

#现在vip在优先级低的节点上
[root@backup ~]# ip a | head  -n 16
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:28:67:09 brd ff:ff:ff:ff:ff:ff
    inet 192.168.118.132/24 brd 192.168.118.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.118.100/32 scope global ens33		#vip
#启动优先级高的节点,正常来说不会抢占vip,因为配置了nopreempt参数
[root@master ~]# systemctl  start keepalived.service 
#并没有抢占vip
[root@master ~]# ip a | head -n16
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:60:6e:7b brd ff:ff:ff:ff:ff:ff
    inet 192.168.118.129/24 brd 192.168.118.255 scope global ens33
       valid_lft forever preferred_lft forever
[root@master ~]#

# 查看优先级低的节点,vip仍在这里
[root@backup ~]# ip a | head  -n 16                   
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:28:67:09 brd ff:ff:ff:ff:ff:ff
    inet 192.168.118.132/24 brd 192.168.118.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.118.100/32 scope global ens33		# vip仍在低优先级的节点上

以上,就说明了,只要优先级高的节点配置了nopreempt参数,不会再从优先级低的节点中抢占vip,这就是keepalived的非抢占模式。

你可能感兴趣的:(keepalived,高可用,服务器,bash,linux)