keepalived简单实验(二)vrrp_scripts脚本

版权声明:如需转载,请注明作者及出处 https://blog.csdn.net/qq_33317586/article/details/84189442

参考:https://blog.csdn.net/qq_14940627/article/details/79998931

一、修改node1与node2的keepalived配置文件

14-18行,定义了一个vrrp脚本

脚本名字为chk_file,脚本每隔1s检测一次,检测内容是/etc/keepalived/down如果文件存在,返回1,权重-2,当前backup比master权重低1,当master权重-2,backup权重将比master高1,VIP转移

33-35行,在vrrp实例中追踪脚本(我的理解是就好比上面定义了函数,下面调用一样)

[root@node1 ~]# cat /etc/keepalived/keepalived.conf | grep -v "#"
! Configuration File for keepalived

global_defs {
   notification_email {
    root@localhost 
   }
   notification_email_from kaadmin@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node1
}

vrrp_script chk_file {
    script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
    interval 1
    weight -2
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass reJggig
    }
    virtual_ipaddress {
       192.168.183.177 
    }
    track_script {
        chk_file
    }
}

node1和node2中都要添加vrrp脚本,并在vrrp实例中追踪脚本

二、重启node1和node2的keepalived服务

[root@node1 ~]# systemctl restart  keepalived.service ; ssh node2 'systemctl restart  keepalived.service'

三、查看node1和node2的ip情况

现在VIP在node1上

[root@node1 ~]# ip a ; ssh node2 'ip a'
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:7d:cb:f8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.183.175/24 brd 192.168.183.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.183.177/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe7d:cbf8/64 scope link 
       valid_lft forever preferred_lft forever
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:fb:3b:50 brd ff:ff:ff:ff:ff:ff
    inet 192.168.183.176/24 brd 192.168.183.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fefb:3b50/64 scope link 
       valid_lft forever preferred_lft forever

四、在/etc/keepalived目录下面创建down文件,再次查看node1与node2的IP情况

发现VIP没有切过去,node2中有如下错误:

[root@node2 keepalived]# journalctl -xe -l
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: Registering Kernel netlink command channel
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: Registering gratuitous ARP shared channel
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: Opening file '/etc/keepalived/keepalived.conf'.
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: WARNING - default user 'keepalived_script' for script execution does not exist - please
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: Unable to access script `[[`
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: Disabling track script chk_file since not found
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: VRRP_Instance(VI_1) removing protocol VIPs.
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: Using LinkWatch kernel netlink reflector...
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: VRRP_Instance(VI_1) Entering BACKUP STATE
11月 17 16:01:00 node2 Keepalived_vrrp[10833]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
11月 17 16:01:01 node2 systemd[1]: Started Session 23 of user root.

参考这位大佬得知不能这么些,得写个脚本

参考链接:https://blog.csdn.net/qq_14940627/article/details/79998931

脚本改成如下:

vrrp_script chk_file {
#    script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
    script "/etc/keepalived/chk_file.sh"
    interval 1
    weight -2
}
[root@node1 keepalived]# cat chk_file.sh 
#!/bin/bash
#[ -f /etc/keepalived/down ] && weight -2 || exit 0
if [ -f /etc/keepalived/down ]; then
	exit 1
fi
exit 0
[root@node1 keepalived]# chmod +x chk_file.sh

五、然后重启node1和node2的keepalived

[root@node1 keepalived]# !103
systemctl restart  keepalived.service ; ssh node2 'systemctl restart  keepalived.service'

六、在node1的/etc/keepalived目录下面创建down文件,查看VIP变动情况

[root@node1 keepalived]# touch down
[root@node1 keepalived]# ip a;ssh node2 'ip a'
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:7d:cb:f8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.183.175/24 brd 192.168.183.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:fb:3b:50 brd ff:ff:ff:ff:ff:ff
    inet 192.168.183.176/24 brd 192.168.183.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.183.177/32 scope global ens33
       valid_lft forever preferred_lft forever

七、删除node1上面的down文件,观察VIP是否会回来,默认是抢占模式,谁优先级高谁就是王

[root@node1 keepalived]# ls
chk_file.sh  down  keepalived.conf  keepalived.conf_bak
[root@node1 keepalived]# rm down -f
[root@node1 keepalived]# ip a;ssh node2 'ip a'
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:7d:cb:f8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.183.175/24 brd 192.168.183.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.183.177/32 scope global ens33
       valid_lft forever preferred_lft forever
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:fb:3b:50 brd ff:ff:ff:ff:ff:ff
    inet 192.168.183.176/24 brd 192.168.183.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever

关于这个weight值影响优先级的原理可以参考:https://blog.csdn.net/hzsunshine/article/details/62041036

猜你喜欢

转载自blog.csdn.net/qq_33317586/article/details/84189442