LVS_DR模式结合keepalived

简介:

背景:lvs_dr模式dr无法主动识别rs上的web服务器是否停止工作,为解决这一问题,用到keepalived,集成高可

          用集群和负载均衡为一体(keepalived-->HA+LB)

 

keepalived原理:
实现集群高可用,防止单点故障;以VRRP虚拟路由冗余协议为实现基础(路由器的一种高可用协议,将N台提供相同功能的路由器组成一个路由器组,即一个master和多个backup;master上有一个对外提供服务的vip,组内其他路由器默认路由也是该vip;master会发组播,当backup收不到组播时,则认为master宕掉;此时根据VRRP优先级选举一个backup充当master,保证路由器高可用)


keepalived主要模块:

core模块: 进程启动、维护和配置文件加载解析

check模块: 健康检查

VRRP模块: 用于实现VRRP协议

 

环境:

         DIR:eth0   172.16.115.100     eth0:0  172.16.115.200  (VIP)(keepalived

         RS1:eth0   172.16.115.157         lo:0  172.16.115.200  (VIP)(nginx)

         RS2:eth0   172.16.115.202         lo:0  172.16.115.200  (VIP)(nginx、keepalived

 wKioL1izoVOjaCPpAABYQoMm_CY189.png

DIR/RS2主机(keepalived主、备

1. DIR/RS2上分别安装keepalived和ipvsadm

    命令 yum install -y keepalived ipvsadm


2. DIR/RS2上分别置空并重新编辑keepalived配置文件vim /etc/keepalived/keepalived.conf

   内容:   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
vrrp_instance VI_1 {
      state MASTER          # 状态:DIR上用MASTER,RS2备用服务器上用BACKUP
      interface eth0
      virtual_router_id 51
      priority 100          # 优先级别:DIR上用100,RS2用90
      advert_int 1
      authentication {
         auth_type PASS
         auth_pass 1111
      }
     virtual_ipaddress {
         172.16.115.200
      }
     }
    virtual_server 172.16.115.200 80 {
      delay_loop 6               # 每隔6秒查询real server的状态
      lb_algo rr                # lvs算法
      lb_kind DR                # Driect Route
      persistence_timeout 0            # 同一ip的连接60秒内被分配到同一台real server
      protocol TCP               # 用tcp协议查询real server状态
      real_server 172.16.115.157 80 {
         weight 100             # 权重为100
         TCP_CHECK {
             connect_timeout 10        # 10秒无反应超时
             nb_get_retry 3
             delay_before_retry 3
             connet_port 80
         }
     }
     real_server 172.16.115.202 80 {
         weight 100
         TCP_CHECK {
             connect_timeout 10
             nb_get_retry 3
             delay_before_retry 3
             connet_port 80
           }
       }
    }



RS1/RS2(Web服务器)

1. RS1和RS2编写脚本vim /usr/local/sbin/lvs_rs.sh

    内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
  #! /bin/bash
     #指定vip是在回环地址地址上;子网掩码全设255,表明只发不回
     vip=172.16.115.200
     ifconfig  lo:0 $vip broadcast $vip netmask 255.255.255.255 up
      
     #添加路由
     route add -host $vip 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


 解释arp_ignore,接受来自其他主机arp请求的响应级别

              当主机有两块网卡1.1.1.1和2.2.2.2,客户机通过1.1.1.1访问2.2.2.2时:

              1)arp_ignore=0,客户机可以收到响应,源IP为2.2.2.2,但是MAC是1.1.1.1的

              2)arp_ignore=1,主机拒绝,客户机无法收到响应

              本实验中:dir的两块网卡,共用在eth0上;rs的两块网卡分别为eth0和lo,参数被拒绝;所以只有dir能收到vip的请求

     arp_announce,arp通告级别

              每台主机加入网络之后,就会向网络中通告自己的IP和mac对应信息,方便其他主机和自己通信:

              1)arp_announce=0,告知网络中本机所有接口的任何地址信息

              2)arp_announce=2,只向目标网络通告与其网络相匹配的地址信息

              本实验中:rs的vip只处理来自DR转发响应,所以设置为2


2. RS1和RS2分别启动脚本/usr/local/sbin/lvs_rs.sh,并启动niginx

    说明:执行成功之后,会在回环地址网卡上生产一个虚拟ip 172.16.115.200

    命令 sh  /usr/local/sbin/lvs_rs.sh

    命令 /etc/init.d/nginx start

    wKioL1izjwzhMVhwAABr8BAxmuw424.png

   


3. dir和rs2上启动keepalived服务;dir上查看ipvsadm规则;ip addr查看ip(ifconfig看不到)

    说明:dir和rs2(主备)都产生转发规则,主启动了虚拟ip:172.16.115.200,备没有启动(当主停掉时,备才启动)

    dir上:  /etc/init.d/keepalived start

    rs2上:  /etc/init.d/keepalived start


    注:echo 1 > /proc/sys/net/ipv4/ip_forward(如无法转发,则在keepalived主、备上开启)

    keepalived 主 

 wKiom1izjyXiXpioAAAix5q4F_A597.png

 

 wKiom1izjyaQMlKqAABDP3M9fWU786.png

spacer.gif


    keepalived 备

 wKiom1izj1Gg7JslAAAjSEAUOE4856.png

 

 wKioL1izj1GQnBIDAABDkSMBbgY024.png

 


测试:

1. 停止rs1的nginx服务,客户机访问虚拟IP

    命令 /etc/init.d/nginx stop

    命令 curl 172.16.115.200

    结果:成功跳过不能访问的rs1,rs1的转发规则也被清掉(重启nginx,又会加回来)

spacer.gif wKiom1izj4DS0dUCAAAr3Ew2VL0171.png

 

 wKioL1izj5azRUBEAAAd2XEaJaA962.png

spacer.gif


2. 停掉dir上的主keepalived,查看主备状态

    说明:备用keepalived接管,重新启动主keepalived时,主重启接管

    命令 /etc/init.d/keepalived stop

    keepalived 主spacer.gif 

 wKiom1izj7LyT2CXAAAfW1nxfVc407.png


 wKioL1izj7Kg52gLAAA9Pjh49Ws494.png

spacer.gif

    

   keepalived 备 

 wKiom1izj9uiCj6KAAAjQ5tPwr4988.png


 wKioL1izj9vy3PiWAABJisiAsVM111.png

spacer.gif 

    dir上的主keepalived停止状态下,再次停用rs1的Nginx时,客户端也成功跳过不能访问的rs1;重启rs1的Nginx,恢复正常

spacer.gif wKiom1izkzCQ_aw0AAAcgFLDi7U844.png










本文转自 huangzp168 51CTO博客,原文链接:http://blog.51cto.com/huangzp/1901568,如需转载请自行联系原作者
相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
8月前
|
负载均衡 监控 Linux
LVS + keepalived
LVS + keepalived
68 1
|
网络协议 应用服务中间件 Shell
|
网络协议 算法 网络安全
|
网络协议 应用服务中间件 nginx