lvs+keepalived+nginx主备模式

lvs+keepalived+nginx主备模式

1.lvs+nginx的拓扑结构:

架构说明:

lvs01和lvs02分别安装lvs、keepalived,通过keepalived VRRP虚拟路由冗余协议,添加虚拟ip(vip)。当其中一台lvs01

机器宕机,lvs02会自动接管vip,即实现服务不中断。

主备模式:lvs02这台机器的资源没有利用到。只有在lvs01宕机或者不可用的时候,才会使用。

主主模式:lvs01和lvs02分别有不同的VIP,分别对应两个出口,添加两个dns,做dns轮询。这样可以实现将lvs01和lvs02充分利用起来。

业务量不大的情况下,lvs+keepalived主从足够用,不必使架构变得复杂。复杂的架构出现事故的几率、不可控因素也会增加。

lvs+keepalived+nginx主备模式_第1张图片

2.环境准备
机器 作用 主机名 系统
10.100.38.12 lvs、keepalived lvs01 Centos7
10.100.38.13 lvs、keepalived lvs02 Centos7
10.100.38.14 Tengine/2.1.2 (nginx/1.6.2) nginx01 Centos7
10.100.38.15 Tengine/2.1.2 (nginx/1.6.2) nginx02 Centos7
10.100.38.201 vip 虚拟ip
3.安装准备工作
关闭4台服务器防火墙
[root@lvs01 ~]# firewall-cmd --state
running
[root@lvs01 ~]# systemctl stop firewalld.service
[root@lvs01 ~]# firewall-cmd --state
not running
[root@lvs01 ~]# systemctl disable firewalld.service
关闭防selinux

关闭4台服务器selinux,修改/etc/selinux/config,将SELINUX由enforcing设置为disabled,重启服务器。

查看selinux状态:

[root@lvs01 ~]# sed -i 's/^ *SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config #重启生效
[root@lvs01 ~]# sestatus -v
优化内核

打开内核转发功能

net.ipv4.ip_forward = 1

4.安装ipvs

LVS无需安装,安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive。ipvsadm是通过命令行管理,而keepalive读取配置文件管理。

分别在lvs01和lvs02执行如下操作:

[root@lvs01 ~]# yum -y install ipvsadm

把ipvsadm模块加载进系统

[root@lvs01 ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@lvs01 ~]# lsmod | grep ip_vs
ip_vs                 141092  0 
nf_conntrack          111302  1 ip_vs
libcrc32c              12644  2 xfs,ip_vs

5.keepalived安装

分别在lvs01和lvs02执行如下操作

[root@lvs01 ~]# yum -y install keepalived

keepalived配置

lvs01 主节点:

[xuhongshuo@lvs01 ~]$ cat  /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id lvs01          #router_id 机器标识,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
}
vrrp_instance VI_1 {            #vrrp实例定义部分
    state MASTER               #设置lvs的状态,MASTER和BACKUP两种,必须大写 
    interface eth0               #设置对外服务的接口
    virtual_router_id 2       #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示 
    priority 100               #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
    advert_int 1              #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {           #设置验证类型和密码
        auth_type PASS         #主要有PASS和AH两种
        auth_pass 1111         #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
    }
    virtual_ipaddress {         #设置虚拟ip地址,可以设置多个,每行一个
        10.100.38.201 
    }
}
virtual_server 10.100.38.201 80 {       #设置虚拟服务器,需要指定虚拟ip和服务端口
    delay_loop 6                 #健康检查时间间隔
    lb_algo wrr                  #负载均衡调度算法
    lb_kind DR                   #负载均衡转发规则
    #persistence_timeout 50        #设置会话保持时间,对动态网页非常有用
    protocol TCP               #指定转发协议类型,有TCP和UDP两种
    real_server 10.100.38.14 80 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
      weight 1               #设置权重,数字越大权重越高
      TCP_CHECK {              #realserver的状态监测设置部分单位秒
        connect_timeout 10       #连接超时为10秒
        retry 3             #重连次数
        delay_before_retry 3        #重试间隔
        connect_port 80         #连接端口为80,要和上面的保持一致
      }
    }
    real_server 10.100.38.15 80 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
      weight 1                  #设置权重,数字越大权重越高
      TCP_CHECK {               #realserver的状态监测设置部分单位秒
        connect_timeout 10         #连接超时为10秒
        retry 3               #重连次数
        delay_before_retry 3        #重试间隔
        connect_port 80          #连接端口为80,要和上面的保持一致
      }
     }
}
virtual_server 10.100.38.201 443 {       #设置虚拟服务器,需要指定虚拟ip和服务端口
    delay_loop 6                 #健康检查时间间隔
    lb_algo wrr                  #负载均衡调度算法
    lb_kind DR                   #负载均衡转发规则
    #persistence_timeout 50        #设置会话保持时间,对动态网页非常有用
    protocol TCP               #指定转发协议类型,有TCP和UDP两种
    real_server 10.100.38.14 443 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
      weight 1               #设置权重,数字越大权重越高
      TCP_CHECK {              #realserver的状态监测设置部分单位秒
        connect_timeout 10       #连接超时为10秒
        retry 3             #重连次数
        delay_before_retry 3        #重试间隔
        connect_port 443         #连接端口为80,要和上面的保持一致
      }
    }
    real_server 10.100.38.15 443 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
      weight 1                  #设置权重,数字越大权重越高
      TCP_CHECK {               #realserver的状态监测设置部分单位秒
        connect_timeout 10         #连接超时为10秒
        retry 3               #重连次数
        delay_before_retry 3        #重试间隔
        connect_port 443          #连接端口为80,要和上面的保持一致
      }
     }
}

lvs02 从节点:

[xuhongshuo@lvs02 ~]$  cat  /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id lvs02          #router_id 机器标识,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
}
vrrp_instance VI_1 {            #vrrp实例定义部分
    state BACKUP               #设置lvs的状态,MASTER和BACKUP两种,必须大写 
    interface eth0               #设置对外服务的接口
    virtual_router_id 2        #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示 
    priority 99               #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
    advert_int 1              #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {           #设置验证类型和密码
        auth_type PASS         #主要有PASS和AH两种
        auth_pass 1111         #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
    }
    virtual_ipaddress {         #设置虚拟ip地址,可以设置多个,每行一个
        10.100.38.201 
    }
}
virtual_server 10.100.38.201 80 {       #设置虚拟服务器,需要指定虚拟ip和服务端口
    delay_loop 6                 #健康检查时间间隔
    lb_algo wrr                  #负载均衡调度算法
    lb_kind DR                   #负载均衡转发规则
   # persistence_timeout 50        #设置会话保持时间,对动态网页非常有用
    protocol TCP               #指定转发协议类型,有TCP和UDP两种
    real_server 10.100.38.14 80 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
      weight 1               #设置权重,数字越大权重越高
      TCP_CHECK {              #realserver的状态监测设置部分单位秒
        connect_timeout 10       #连接超时为10秒
        retry 3             #重连次数
        delay_before_retry 3        #重试间隔
        connect_port 80         #连接端口为80,要和上面的保持一致
      }
    }
    real_server 10.100.38.15 80 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
      weight 1                  #设置权重,数字越大权重越高
      TCP_CHECK {               #realserver的状态监测设置部分单位秒
        connect_timeout 10         #连接超时为10秒
        retry 3               #重连次数
        delay_before_retry 3        #重试间隔
        connect_port 80          #连接端口为80,要和上面的保持一致
      }
     }
}
virtual_server 10.100.38.201 443 {       #设置虚拟服务器,需要指定虚拟ip和服务端口
    delay_loop 6                 #健康检查时间间隔
    lb_algo wrr                  #负载均衡调度算法
    lb_kind DR                   #负载均衡转发规则
    #persistence_timeout 50        #设置会话保持时间,对动态网页非常有用
    protocol TCP               #指定转发协议类型,有TCP和UDP两种
    real_server 10.100.38.14 443 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
      weight 1               #设置权重,数字越大权重越高
      TCP_CHECK {              #realserver的状态监测设置部分单位秒
        connect_timeout 10       #连接超时为10秒
        retry 3             #重连次数
        delay_before_retry 3        #重试间隔
        connect_port 443         #连接端口为80,要和上面的保持一致
      }
    }
    real_server 10.100.38.15 443 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
      weight 1                  #设置权重,数字越大权重越高
      TCP_CHECK {               #realserver的状态监测设置部分单位秒
        connect_timeout 10         #连接超时为10秒
        retry 3               #重连次数
        delay_before_retry 3        #重试间隔
        connect_port 443          #连接端口为80,要和上面的保持一致
      }
     }
}

参数说明

IPVS三种IP负载均衡技术:

VS/NAT: 即(Virtual Server via Network Address Translation) 也就是网络地址翻译技术实现虚拟服务器,当用户请求到达调度器时,调度器将请求报文的目标地址(即虚拟IP地址)改写成选定的Real Server地址,同时报文的目标端口也改成选定的Real Server的相应端口,最后将报文请求发送到选定的Real Server。在服务器端得到数据后,Real Server返回数据给用户时,需要再次经过负载调度器将报文的源地址和源端口改成虚拟IP地址和相应端口,然后把数据发送给用户,完成整个负载调度过程。 可以看出,在NAT方式下,用户请求和响应报文都必须经过Director Server地址重写,当用户请求越来越多时,调度器的处理能力将称为瓶颈。

**VS/TUN:**即(Virtual Server via IP Tunneling) 也就是IP隧道技术实现虚拟服务器。它的连接调度和管理与VS/NAT方式一样,只是它的报文转发方法不同,VS/TUN方式中,调度器采用IP隧道技术将用户请求转发到某个Real Server,而这个Real Server将直接响应用户的请求,不再经过前端调度器,此外,对Real Server的地域位置没有要求,可以和Director Server位于同一个网段,也可以是独立的一个网络。因此,在TUN方式中,调度器将只处理用户的报文请求,集群系统的吞吐量大大提高。

VS/DR: 即(Virtual Server via Direct Routing) 也就是用直接路由技术实现虚拟服务器。它的连接调度和管理与VS/NAT和VS/TUN中的一样,但它的报文转发方法又有不同,VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求Director Server与Real Server都有一块网卡连在同一物理网段上,且真实服务器网络设备或设备别名不作 ARP 响应。

IPVS调度器实现了如下八种负载调度算法:

轮叫(Round Robin) 调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

加权轮叫(Weighted Round Robin) 调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

最少链接(Least Connections) 调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。

加权最少链接(Weighted Least Connections) 在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

基于局部性的最少链接(Locality-Based Least Connections) “基于局部性的最少链接” 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。

带复制的基于局部性最少链接(Locality-Based Least Connections with Replication) "带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。

目标地址散列(Destination Hashing) "目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

源地址散列(Source Hashing) "源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

本例中采用DR负载均衡和wrr负载调度算法

6.nginx部署

nginx搭建详见tengine_install

6.1 realserver.sh配置

nginx01和nginx02配置如下

[xuhongshuo@nginx01 ~]$  cat /etc/rc.d/init.d/realserver.sh 
#!/bin/bash
    SNS_VIP=10.100.38.201
    #. /etc/rc.d/init.d/functions
    case "$1" in
    start)
        ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
        /sbin/route add -host $SNS_VIP dev lo:0
        echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
        echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
        echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
        sysctl -p >/dev/null 2>&1
        echo "RealServer Start OK"
        ;;
    stop)
        ifconfig lo:0 down
        route del $SNS_VIP >/dev/null 2>&1
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
        echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
        echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
        echo "RealServer Stoped"
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
    esac
    exit 0
[xuhongshuo@nginx02 ~]$ cat /etc/rc.d/init.d/realserver.sh 
#!/bin/bash
    SNS_VIP=10.100.38.201
    /etc/rc.d/init.d/functions
    case "$1" in
    start)
        ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
        /sbin/route add -host $SNS_VIP dev lo:0
        echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
        echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
        echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
        sysctl -p >/dev/null 2>&1
        echo "RealServer Start OK"
        ;;
    stop)
        ifconfig lo:0 down
        route del $SNS_VIP >/dev/null 2>&1
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
        echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
        echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
        echo "RealServer Stoped"
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
    esac
    exit 0

此脚本用于节点服务器绑定 VIP ,并抑制响应 VIP 的 ARP 请求。这样做的目的是为了不让关于 VIP 的 ARP 广播时,节点服务器应答( 因为节点服务器都绑定了 VIP ,如果不做设置它们会应答,就会乱套 )。

给realserver.sh脚本授予执行权限:

[root@nginx01 init.d]# chmod u+x realserver.sh

7. 负载均衡及高可用测试

启动Keepalived

lvs01和lvs02分别执行:

[root@lvs01 ~]# service keepalived start

查看ip,lvs01上有vip,lvs02没有:

lvs+keepalived+nginx主备模式_第2张图片

lvs+keepalived+nginx主备模式_第3张图片

启动nginx

如果nginx未运行则在nginx01和nginx02执行:

[xuhongshuo@nginx01 ~]$ /usr/local/nginx/sbin/nginx  -c /usr/local/nginx/conf/nginx.conf

运行realserver.sh脚本

在nginx01和nginx02执行realserver.sh脚本:

[root@nginx01 ~]# /etc/rc.d/init.d/realserver.sh start

修改nginx默认首页

nginx01和nginx02上分别修改index.html:

$ cat /usr/local/nginx/html/index.html 



Welcome to tengine!



Welcome to tengine!

ng-10.100.38.14

If you see this page, the tengine web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to tengine.taobao.org.

Thank you for using tengine.

检查ipvs策略
$ ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.100.38.201:80 wrr
  -> 10.100.38.14:80              Route   1      0          0         
  -> 10.100.38.15:80              Route   1      0          0         
TCP  10.100.38.201:443 wrr
  -> 10.100.38.14:443             Route   1      0          0         
  -> 10.100.38.15:443             Route   1      0          0 

检查rs机器网卡状态

$ ip a
1: lo:  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
    inet 10.100.38.201/32 brd 10.100.38.201 scope global lo:0
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether fe:fc:fe:2d:80:ba brd ff:ff:ff:ff:ff:ff
    inet 10.100.38.14/24 brd 10.100.38.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
$ ip a
1: lo:  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
    inet 10.100.38.201/32 brd 10.100.38.201 scope global lo:0
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether fe:fc:fe:d0:c4:5e brd ff:ff:ff:ff:ff:ff
    inet 10.100.38.15/24 brd 10.100.38.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever

8.页面访问测试

访问vip

访问80端口

[root@chtwm vhost]# curl -s http://10.100.38.201/|grep 10.100
<h3>ng-10.100.38.14</h3>
[root@chtwm vhost]# curl -s http://10.100.38.201/|grep 10.100
<h3>ng-10.100.38.15</h3>
[root@chtwm vhost]# curl -s http://10.100.38.201/|grep 10.100
<h3>ng-10.100.38.14</h3>
[root@chtwm vhost]# curl -s http://10.100.38.201/|grep 10.100
<h3>ng-10.100.38.15</h3>
[root@chtwm vhost]# curl -s http://10.100.38.201/|grep 10.100
<h3>ng-10.100.38.14</h3>
[root@chtwm vhost]# curl -s http://10.100.38.201/|grep 10.100
<h3>ng-10.100.38.15</h3>

访问443端口

xushuo@xushuodeMacBook-Pro  ~  curl -s  https://www-c.chtfund.com|grep 10.100 <h3>ng-10.100.38.14</h3> xushuo@xushuodeMacBook-Pro  ~  curl -s  https://www-c.chtfund.com|grep 10.100<h3>ng-10.100.38.15</h3> xushuo@xushuodeMacBook-Pro  ~  curl -s  https://www-c.chtfund.com|grep 10.100<h3>ng-10.100.38.14</h3> xushuo@xushuodeMacBook-Pro  ~  curl -s  https://www-c.chtfund.com|grep 10.100<h3>ng-10.100.38.15</h3> xushuo@xushuodeMacBook-Pro  ~  curl -s  https://www-c.chtfund.com|grep 10.100<h3>ng-10.100.38.14</h3> xushuo@xushuodeMacBook-Pro  ~  curl -s  https://www-c.chtfund.com|grep 10.100<h3>ng-10.100.38.15</h3>

10.故障测试

10.1 模拟lvs01故障:

将主lvs的keepalived停止或将主lvs关机(相当于模拟宕机),查看主lvs的eth0:

$ ip a
1: lo:  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
2: eth0:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether fe:fc:fe:67:d4:a7 brd ff:ff:ff:ff:ff:ff
    inet 10.100.38.12/24 brd 10.100.38.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever     

vip漂移到lvs02上,如下:

$ ip a
1: lo:  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
2: eth0:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether fe:fc:fe:f0:a4:b1 brd ff:ff:ff:ff:ff:ff
    inet 10.100.38.13/24 brd 10.100.38.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 10.100.38.201/32 scope global eth0
       valid_lft forever preferred_lft forever

访问测试:

✘ xushuo@xushuodeMacBook-Pro  ~  curl -s  https://www-c.chtfund.com|grep 10.100  

ng-10.100.38.14

xushuo@xushuodeMacBook-Pro  ~  curl -s https://www-c.chtfund.com/|grep 10.100

ng-10.100.38.15

xushuo@xushuodeMacBook-Pro  ~  curl -s https://www-c.chtfund.com/|grep 10.100

ng-10.100.38.14

xushuo@xushuodeMacBook-Pro  ~  curl -s https://www-c.chtfund.com/|grep 10.100

ng-10.100.38.15

访问正常

10.2模拟lvs01恢复故障:

启动lvs01keepalived

systemctl start keepalived.service

查看lvs vip状态:

$ 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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether fe:fc:fe:67:d4:a7 brd ff:ff:ff:ff:ff:ff
    inet 10.100.38.12/24 brd 10.100.38.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 10.100.38.201/32 scope global eth0
       valid_lft forever preferred_lft forever

查看lvs02 vip状态,发现已经自动释放vip

$ ip a
1: lo:  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
2: eth0:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether fe:fc:fe:f0:a4:b1 brd ff:ff:ff:ff:ff:ff
    inet 10.100.38.13/24 brd 10.100.38.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever

访问测试:

xushuo@xushuodeMacBook-Pro  ~  curl -s  https://www-c.chtfund.com/|grep 10.100 

ng-10.100.38.15

xushuo@xushuodeMacBook-Pro  ~  curl -s https://www-c.chtfund.com/|grep 10.100

ng-10.100.38.14

xushuo@xushuodeMacBook-Pro  ~  curl -s https://www-c.chtfund.com/|grep 10.100

ng-10.100.38.15

xushuo@xushuodeMacBook-Pro  ~  curl -s https://www-c.chtfund.com/|grep 10.100

ng-10.100.38.14

xushuo@xushuodeMacBook-Pro  ~  xushuo@xushuodeMacBook-Pro  ~  curl -s https://www-c.chtfund.com/|grep 10.100

ng-10.100.38.15

访问负载正常!

11.总结

当 MASTER 服务器无法提供服务时,VIP 会在 MASTER 上自动移除,BACKUP 服务器会提升为 MASTER 状态,绑定 VIP 、接管服务。 当 MASTER 修复加入网络后,会自动抢回 VIP ,成为 MASTER 身份。 当后端提供服务nginx服务挂起时,会自动切换至其它nginx服务器。

你可能感兴趣的:(nginx,lvs)