2018-08-28 KeepAlived

1、VRRP协议

VRRP协议被称为虚拟路由冗余协议

  • 虚拟路由器简介
    VRRP将局域网内的一组路由器划分在一起,形成一个VRRP备份组,它在功能上相当于一台虚拟路由器,使用虚拟路由器号进行标识。以下使用虚拟路由器代替VRRP备份组进行描述。
    虚拟路由器有自己的虚拟IP地址和虚拟MAC地址,它的外在表现形式和实际的物理路由器完全一样。局域网内的主机将虚拟路由器的IP地址设置为默认网关,通过虚拟路由器与外部网络进行通信。虚拟路由器是工作在实际的物理路由器之上的。它由多个实际的路由器组成,包括一个Master路由器和多个Backup路由器。Master路由器正常工作时,局域网内的主机通过Master与外界通信。当Master路由器出现故障时,Backup路由器中的一台设备将成为新的Master路由器,接替转发报文的工作,如图下图


    image.png
  • VRRP工作过程
    VRRP的工作过程为:
    (1) 虚拟路由器中的路由器根据优先级选举出Master。Master 路由器通过发送免费ARP 报文,将自己的虚拟MAC 地址通知给与它连接的设备或者主机,从而承担报文转发任务;
    (2) Master 路由器周期性发送VRRP 报文,以公布其配置信息(优先级等)和工作状况;
    (3) 如果Master 路由器出现故障,虚拟路由器中的Backup 路由器将根据优先级重新选举新的Master;
    (4) 虚拟路由器状态切换时,Master 路由器由一台设备切换为另外一台设备,新的Master 路由器只是简单地发送一个携带虚拟路由器的MAC 地址和虚拟IP地址信息的免费ARP 报文,这样就可以更新与它连接的主机或设备中的ARP 相关信息。网络中的主机感知不到Master 路由器已经切换为另外一台设备。
    (5) Backup 路由器的优先级高于Master 路由器时,由Backup 路由器的工作方式(抢占方式和非抢占方式)决定是否重新选举Master。
    由此可见,为了保证Master路由器和Backup路由器能够协调工作,VRRP需要实现以下功能:
    Master 路由器的选举;
    Master 路由器状态的通告;
    同时,为了提高安全性,VRRP 还提供了认证功能;
  • VRRP提供了三种认证方式:
    无认证:不进行任何 VRRP 报文的合法性认证,不提供安全性保障。
    简单字符认证:在一个有可能受到安全威胁的网络中,可以将认证方式设置
    为简单字符认证。发送VRRP 报文的路由器将认证字填入到VRRP 报文中,
    而收到VRRP 报文的路由器会将收到的VRRP 报文中的认证字和本地配置的
    认证字进行比较。如果认证字相同,则认为接收到的报文是合法的VRRP 报
    文;否则认为接收到的报文是一个非法报文。
    MD5 认证:在一个非常不安全的网络中,可以将认证方式设置为MD5 认
    证。发送VRRP 报文的路由器利用认证字和MD5 算法对VRRP 报文进行加
    密,加密后的报文保存在Authentication Header(认证头)中。收到VRRP
    报文的路由器会利用认证字解密报文,检查该报文的合法性。
  • VRRP优先级
    VRRP优先级的取值范围为0到255(数值越大表明优先级越高),可配置的范围是
    1到254,优先级0为系统保留给路由器放弃Master位置时候使用,255则是系统保
    留给IP地址拥有者使用。当路由器为IP地址拥有者时,其优先级始终为255。因
    此,当虚拟路由器内存在IP地址拥有者时,只要其工作正常,则为Master路由器。
  • 术语:
    虚拟路由器:Virtual Router
    虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
    物理路由器:
    master:主设备
    backup:备用设备
    priority:优先级
    VIP:Virtual IP
    VMAC:VirutalMAC (00-00-5e-00-01-VRID)

总结:VRRP协议可以实现ip地址的漂移,在两个物理路由器上虚拟的配置一个VIP,并且VIP刚开始时由master使用,当master损坏时备用的路由器根据优先级进行选举,选举为master路由器的使用此虚拟VIP

2、KeepAlived的配置准备

(1) 各节点时间必须同步

在两台物理路由器上做如下配置,本次实验使用centos7和centos6两台主机做为物理的路由器
在centos7上
ntpdate 172.18.0.1
vim /etc/chrony.conf 
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
server 172.18.0.1 iburst    ---加上这一行与谁同步的
systemctl start chronyd    ---启动同步时间的服务
systemctl enable chronyd
在centos6上
ntpdate 172.18.0.1
vim /etc/ntp.conf 
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
172.18.0.1 iburst
service ntpd start   ---启动同步时间的服务,我们发现在centos6和centos7上同步时间的服务是不同的
chkconfig ntpd on
为什么要先同步时间再去修改配置文件,因为如果时间相差的太多是不会同步的。必须用命令将时间先同步后再去修改配置文件

(2) 确保iptables及selinux不会成为阻碍

getenfoce
iptables -vnL

(3) 各节点之间可通过主机名互相通信(对KA并非必须)
建议使用/etc/hosts文件实现

在centos7上
hostnamectl set-hostname node1
vim /etc/hosts
192.168.74.106   node2
在centos6上
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node2
vim /etc/hosts
192.168.74.107   node1
将两台主机退出后重新登录发现主机名改变了
[root@node2 network-scripts]#ping node1
PING node1 (192.168.74.107) 56(84) bytes of data.
64 bytes from node1 (192.168.74.107): icmp_seq=1 ttl=64 time=1.14 ms
64 bytes from node1 (192.168.74.107): icmp_seq=2 ttl=64 time=0.453 ms

(4) 各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信(对KA并非必须)

在centos7上
ssh-keygen    ---生成公钥私钥对
ssh-copy-id -i id_rsa.pub node2:   ---将公钥传给对方,不用加-i也可以,会默认将公钥转给对方的
在centos6上
ssh-keygen  
ssh-copy-id -i id_rsa.pub node1:
测试
在cenots7上测试ssh node2
在centos6上测试ssh node1

3、KeepAlived实现

  • 实现单主模式vip的地址转移
yum install keepalived
1、在主上的配置
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {  ---这里一定要注意所有的大括号前都有空格,并且大括号要一一对应,不然实现不了
   notification_email {      ---给哪个邮箱地址发通知
        root@localhost
   }
   notification_email_from node1@localhost   ---邮件来自己于谁
   smtp_server 127.0.0.1   ---邮件服务器地址
   smtp_connect_timeout 30
   router_id node1    ----真实的物理路由器的id
        vrrp_mcast_group4 224.21.21.21   ---加一个多播地址,用于主master向这个多播地址发送消息,证明自己还活着,当主master坏了的时候,多个从路由器向这个多播地址内发送信息,通过比较优先级选举出来一个master做为主来代替坏了的master工作
}

vrrp_instance VI_1 {   
    state MASTER
    interface ens33  ----绑定为当前虚拟路由器使用的物理接口
    virtual_router_id 88  ---当前虚拟路由器惟一标识,范围是0-255
    priority 100  ---当前物理节点在此虚拟路由器中的优先级,范围1-254
    advert_int 1 ---vrrp通告的时间间隔,默认1s
    authentication {    ----认证机制
        auth_type PASS
        auth_pass 783b7339   ---仅前8位有效,可以用openssl rand -hex 4 取个随机数
    }
    virtual_ipaddress {
        192.168.74.88/24 dev ens33     ---vip的地址
    }

}
track_interface{    ---配置监控网络接口,一旦出现故障,则转为FAULT状态实现地址转移
        ens33  
}
systemctl start keepalived.service 
2、在从上的设置
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from node2@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node2
        vrrp_mcast_group4 224.21.21.21
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 88
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 783b7339
    }
    virtual_ipaddress {
        192.168.74.88/24 dev eth0
    }
}
track_interface{
        eth0
}
3、测试
在主上输入ip a命令发现vip已经配置成功
在从上输入ip a命令发现没有vip
此时把主的网卡断开,在从上抓包
tcpdump -i eth0 -nn host 224.21.21.21可以看到切换的过程,通过向多播内发送优先级选举出master
并在从上查看ip a发现vip已经转移到从上了
ip link set dev eth0 multicast off    ---可以使用如下命令关闭多播,默认都是开启的,一般不需要关闭,此服务如果关闭多播就无法选举master了和进行实时监控主master是否是活着的了
nopreempt:定义工作模式为非抢占模式,也就是原来的主master修好后即使优先级比现在的高也不会成为master
preempt_delay 300:抢占式模式,节点上线后触发新选举操作的延迟时长,默认模式
  • 实现日志功能
1、vim /etc/sysconfig/keepalived    ---定义一个日志设施为local2
KEEPALIVED_OPTIONS="-D -S 2"
2、vim /etc/rsyslog.conf 
local2.*                                                /var/log/keepalived.log
systemctl restart rsyslog
systemctl restart keepalived
3、cat /var/log/keepalived.log   ---发现已经有日志记录了
  • 定义通知脚本
    也就是发生vip转移时会给本机的root发邮件
1、定义一个通知脚本
vim /app/notify.sh
#!/bin/bash
#
contact='root@localhost'
notify () {
mailsubject="`hostname` to be $1, vip floating"
mailbody="`date +'%F %T'`: vrrp transition, `hostname` changed to be $1"
echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
    notify master
        ;;
backup)
    notify backup
        ;;
fault)
    notify fault
        ;;
*)
    echo "Usage: `basename $0` {master|backup|fault}"
        exit 1
        ;;
esac
2、在主路由器和从路由器的配置文件中调用这个脚本
vim /etc/keepalived/keepalived.conf   ---加到vrrp_instance VI_1语句块里
notify_master "/app/notify.sh master"   ---表示当切换到主的时候会自动给本机的root发邮件
notify_backup "/app/notify.sh backup"     ---表示切换为备用的时候会自动给本机的root发邮件
notify_fault "/app/notify.sh fault"
3、测试
在主路由器上关闭keepalived服务,在从路由器上会发现root收到一封邮件,变成主的通知的邮件,当主路由器开启keepalived服务时会发现从路由器上的root收到一封变成backup的邮件
输入mail命令就可以看到发给root的邮件
  • 实现双主模式
    上面的示例只是实现了一个虚拟vip,当主工作时,从不会工作,只有当主不工作了从才会变成master,得到vip开始工作,如果要实现主和从都工作,就需要配置两个虚拟的vip
    实现如下图所示


    image.png

    实现过程如下:

1、在node1上的设置
vim /etc/keepalived/keepalived.conf   ---在上面的配置中增加一个实例
vrrp_instance VI_2 {
    state BACKUP  ---将node1设置为备份
    interface ens33
    virtual_router_id 66  ---虚拟路由标识改一下
    priority 90  ---优先级要调低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 683b7339  ---此项也改一下
    }
    virtual_ipaddress {
        192.168.74.66/24 dev ens33  ---设置一个新的vip地址
    }
notify_master "/app/notify.sh master"
notify_backup "/app/notify.sh backup"
notify_fault "/app/notify.sh fault"
}
track_interface{
        ens33
}
2、在node2上的设置
vim /etc/keepalived/keepalived.conf
vrrp_instance VI_2 {
    state MASTER   ---将node2设置为主
    interface eth0
    virtual_router_id 66
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 683b7339
    }
    virtual_ipaddress {
        192.168.74.66/24 dev eth0
    }
notify_master "/app/notify.sh master"
notify_backup "/app/notify.sh backup"
notify_fault "/app/notify.sh fault"
}
track_interface{
        eth0
}
3、将两个主机重新启动一下服务
systemctl restart keepalived.service
service keepalived restart
ip a   发现新的vip绑定到rode2上了
[root@node2 ~]#tcpdump -i eth0 -nn host 224.21.21.21  ---抓包可以看到有两个主在多播内发送优先级等信息,证明自己还活着
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:22:35.826209 IP 192.168.74.106 > 224.21.21.21: VRRPv2, Advertisement, vrid 66, prio 100, authtype simple, intvl 1s, length 20
15:22:35.858820 IP 192.168.74.107 > 224.21.21.21: VRRPv2, Advertisement, vrid 88, prio 100, authtype simple, intvl 1s, length 20
15:22:36.832800 IP 192.168.74.106 > 224.21.21.21: VRRPv2, Advertisement, vrid 66, prio 100, authtype simple, intvl 1s, length 20

4、KeepAlived实现IPVS-DR的高可用集群

  • 常用参数
delay_loop <INT>:服务轮询的时间间隔
lb_algo rr|wrr|lc|wlc|lblc|sh|dh:定义调度方法
lb_kind NAT|DR|TUN:集群的类型
persistence_timeout <INT>:持久连接时长
protocol TCP:服务协议,仅支持TCP
sorry_server <IPADDR> <PORT>:所有RS故障时,备用服务器地址
real_server<IPADDR> <PORT> {
weight <INT> RS权重
notify_up <STRING>|<QUOTED-STRING> RS上线通知脚本
notify_down <STRING>|<QUOTED-STRING> RS下线通知脚本
HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHEC K { ... }:定义当前主机的健康状态检测方法
}
  • KeepAlived配置检测
①HTTP_GET|SSL_GET:应用层检测
HTTP_GET|SSL_GET {
url{
path <URL_PATH>:定义要监控的URL
status_code <INT>:判断上述检测机制为健康状态的响应码
digest  <STRING>:判断为健康状态的响应的内容的校验码
}
connect_timeout <INTEGER>:连接请求的超时时长
nb_get_retry <INT>:重试次数
delay_before_retry <INT>:重试之前的延迟时长
connect_ip <IP ADDRESS>:向当前RS哪个IP地址发起健康状态检测请求
connect_port <PORT>:向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS>:发出健康状态检测请求时使用的源地址
bind_port <PORT>:发出健康状态检测请求时使用的源端口
}
②如果后端的rs不是httpd服务。健康性检查利用tcp协议进行检查
TCP_CHECK {
connect_ip <IP ADDRESS>:向当前RS的哪个IP地址发起健康状态检测请求
connect_port <PORT>:向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS>:发出健康状态检测请求时使用的源地址
bind_port <PORT>:发出健康状态检测请求时使用的源端口
connect_timeout <INTEGER>:连接请求的超时时长
}
image.png
1、在两个webserver上的设置
systemctl start httpd
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ip addr add 192.168.74.88 dev lo  ---在两个webserver上配置vip
2、在主和从LVS服务器上的设置
vim /etc/keepalived/keepalived.conf 
 ! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from node1@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id node1
        vrrp_mcast_group4 224.21.21.21
}
vrrp_instance VI_1 {
    state MASTER    ---在另外一台上设置为BACKUP
    interface ens33   ---另外一台上网卡可能不同需要修改
    virtual_router_id 88
    priority 100    ----在另外一台上设置为90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 783b7339
    }
    virtual_ipaddress {
        192.168.74.88/24 dev ens33
    }
notify_master "/app/notify.sh master"
notify_backup "/app/notify.sh backup"
}
track_interface{
        ens33  ---另外一台上网卡可能不同,需要修改
}
virtual_server 192.168.74.88 80 {    ----在上面的配置中增加一个virtual_server的语句块,主和从LVS都要加这个语句块
    delay_loop 6   ---服务轮询的时间间隔
    lb_algo wrr   ----定义调度方法rr|wrr|lc|wlc|lblc|sh|dh
    lb_kind DR  ----NAT|DR|TUN:集群的类型
   # persistence_timeout <INT>:持久连接时长,此项最好不要加上,加上好测试不出来轮询,因为会保持持久连接到第一个调度的rs服务器
    protocol TCP    ----服务协议,仅支持TCP
    sorry_server 127.0.0.1 80  ---所有RS故障时,备用服务器地址
  real_server 192.168.74.133 80 {
        weight 1   ---RS权重
        HTTP_GET {    ----应用层检测
            url {     
              path /    ----定义要监控的URL
              status_code 200   ----判断上述检测机制为健康状态的响应码
            }
            connect_timeout 3  ----连接请求的超时时长
            nb_get_retry 3    ----重试次数
            delay_before_retry 3   ----重试之前的延迟时长
        }
    }
  real_server 192.168.74.129 80 {
        weight 1
 HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
在主和从上都搭建一个httpd服务器做为sorry_server
systemctl restart keepalived   ---主和从都重启服务
yum install ipvsadm
[root@node1 app]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.74.88:80 wrr
  -> 192.168.74.129:80            Route   1      0          0         
  -> 192.168.74.133:80            Route   1      0          0     
3、测试
关闭主LVS的keeplived服务,从LVS就开始工作
在客户端 curl 192.168.74.88   ---发现轮询

5、双主模式的lVS-DR集群

双主模式就是在两个物理的LVS上配置两个虚拟的VIP,当客户端访问192.168.74.88时node1是主,node2是备份,当客户端访问是192.168.74.66时node2是主,node1是备份,利用防火墙打标签,当无论客户端访问的是192.168.74.88还是192.168.74.66时都调度到后端的rs服务器上
实现过程如下

1、在两个rs服务器上的设置
systemctl start httpd
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ip addr add 192.168.74.88 dev lo  ---在两个webserver上配置两个vip
ip addr add 192.168.74.66 dev lo 
2、在主和从LVS服务器上的设置
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

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

vrrp_instance VI_1 {     ---定义一个虚拟的vip1
    state MASTER   ---在另外一台LVS上设置为BACKUP
    interface ens33  ---另外一台上网卡可能不同需要修改
    virtual_router_id 88
    priority 100    ----在另外一台LVS上设置为90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 783b7339
    }
    virtual_ipaddress {
        192.168.74.88/24 dev ens33 ---另外一台网卡要修改
    }
notify_master "/app/notify.sh master"
notify_backup "/app/notify.sh backup"
notify_fault "/app/notify.sh fault"
}
track_interface{
        ens33  ---网卡可能不同需要修改
}
vrrp_instance VI_2 {    ---定义一个虚拟的vip2
    state BACKUP    ---在另外一台LVS服务上设置为MASTER
    interface ens33    ----在另外一台上网卡可能不同需要修改
    virtual_router_id 66
    priority 90    ----在另外一台LVS服务上设置为100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 683b7339
    }
    virtual_ipaddress {
        192.168.74.66/24 dev ens33   ---另外一台网卡名要修改
    }
notify_master "/app/notify.sh master"
notify_backup "/app/notify.sh backup"
notify_fault "/app/notify.sh fault"
}
track_interface{
        ens33    ---另外一台上网卡名要修改
}
virtual_server fwmark 20 {    ---只要访问的是打标签为20的地址就转发到后面的rs服务器上
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    protocol TCP
   sorry_server 127.0.0.1 80
  real_server 192.168.74.133 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
  real_server 192.168.74.129 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
iptables -t mangle -A PREROUTING -d 192.168.74.88,192.168.74.66 -p tcp --dport 80 -j MARK --set-mark 20   ---无论访问哪个vip地址都打标签为20
在两个主从服务器上安装httpd服务做为sorry_server
systemctl restart keepalived.service 
3、测试
在客户端测试
curl 192.168.74.66
curl 192.168.74.88
停止一个LVS上keeplived服务,继续访问这两个地址,仍然可以调度

6、高可用nginx服务

1、在后端的两个rs上搭建好httpd服务
2、在两个nginx服务器上搭建好nginx服务,并做好转发
vim /etc/nginx/nginx.conf
   upstream webserver {     ---在http语句块里添加
                server 192.168.74.133:80;
                server 192.168.74.129:80;
        }
vim /etc/nginx/conf.d/vhost.conf 
server{
        listen 80 default_server;
        server_name www.a.com;
        root /app/website1;
        location  / {
        proxy_pass http://webserver;

}
nginx -t  ---检查语法
nginx  ---启动服务
3、在两台nginx服务器上修改keepalived的配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

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

vrrp_script chk_down {       ---创建一个测试的脚本,如果这个文件存在就把优先级减20,这样备用的就开始工作了,这个可以不加,只是测试用的
        script "[ -f /etc/keepalived/down ] &&exit 1||exit 0"
                interval 1
                weight -20
}
vrrp_script chk_nginx {    ---这个脚本是用来监控nginx服务是否正常工作,如果不正常优先级就减20,备用的开始工作
        script "killall -0 nginx &>/dev/null &&exit 0||exit 1"
                interval 1
                weight -20    ---如果脚本的返回值为1,优先级就减20
                fall 2    #2次检测失败为失败
                rise 2  #2次检测成功为成功
}
vrrp_instance VI_1 {
    state MASTER    ---另外一台nginx上设置为BACKUP
 interface ens33    ---另外一台网卡名要改
    virtual_router_id 88
    priority 100  ---另外一台优先级为90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 783b7339
    }
    virtual_ipaddress {
        192.168.74.88/24 dev ens33    ---在另外一台上网卡名要改
     }
        track_script {       ----调用上面的两个脚本
                chk_down
                chk_nginx
}
notify_master "/app/notify.sh master"
notify_backup "/app/notify.sh backup"
notify_fault "/app/notify.sh fault"
}
systemctl start keepalived   ----启动服务
4、测试
curl 192.168.74.88
停止一台nginx服务,发现仍可以调度,因为vip已经转移到备用的服务上了

7、同步组

LVS NAT模型VIP和DIP都需要同步,需要同步组

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

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

vrrp_sync_group VG_1 {
        group {
                VI_1
                VI_2
}
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 88
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
       auth_pass 783b7339
    }
    virtual_ipaddress {
        192.168.74.88/24 dev ens33   ---定义一个vip
    }
notify_master "/app/notify.sh master"
notify_backup "/app/notify.sh backup"
notify_fault "/app/notify.sh fault"
}
vrrp_instance VI_2 {
    state MASTER
    interface ens37
    virtual_router_id 87
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 683b7339
    }
    virtual_ipaddress {
        172.18.21.88/16 dev ens37    ---定义dip
    }
notify_master "/app/notify.sh master"
notify_backup "/app/notify.sh backup"
notify_fault "/app/notify.sh fault"
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容