负载均衡集群 之 LVS (2) DR模式搭建 和 keepalived+lvs

4. LVS DR模式搭建

为什么不使用IP TUNNEL模式呢?

在生产环境中用的比较多的情况就是DR模式,NAT模式用的也不是太多,因为我们也说到了NAT的瓶颈问题。

如果规模在10台以内访问量不是很大且硬件配置+网络环境都可以的话建议使用NAT模式,可以节省公网IP,因为公网IP的成本也比较高。

另外一种方案就是搭建内网的LVS,全部的server均使用内网IP,我们使用一个公网IP端口映射到内网VIP的80端口即可,从而达到节省IP资源。

4.1 准备工作

三台模拟服务器

主机名 IP地址 角色
yt-01 192.168.2.131 Director
yt-02 192.168.2.132 Real server 1
yt-03 192.168.2.133 Real server 2
192.168.2.200 VIP

4.2 确保每台机器已经安装了ipvsadm服务

[root@yt-01 ~]# yum install -y ipvsadm
[root@yt-02 ~]# yum install -y ipvsadm
[root@yt-03 ~]# yum install -y ipvsadm

4.3 在Director上面编写脚本

[root@yt-01 ~]# vim /usr/local/sbin/lvs_dr.sh

#! /bin/bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    ipv=/usr/sbin/ipvsadm
    vip=192.168.2.200
    rs1=192.168.2.122
    rs2=192.168.2.123
#注意这里的网卡名字
    ifdown ens33
    ifup ens33
    ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip dev ens33:2
    $ipv -C
    $ipv -A -t $vip:80 -s wrr
    $ipv -a -t $vip:80 -r $rs1:80 -g -w 1
    $ipv -a -t $vip:80 -r $rs2:80 -g -w 1

4.4 运行DR上lvs_dr脚本

[root@yt-01 ~]# sh /usr/local/sbin/lvs_dr.sh
成功断开设备 'ens33'。
成功激活的连接(D-Bus 激活路径:/org/freedesktop/NetworkManager/ActiveConnection/3)

4.5 每台Real Server上也编写脚本

[root@yt-02 ~]# vim /usr/local/sbin/lvs_dr.sh

#! /bin/bash
vip=192.168.2.200
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
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

4.6 每台Real Server上运行脚本

[root@yt-02 ~]# sh /usr/local/sbin/lvs_rs.sh
[root@yt-03 ~]# sh /usr/local/sbin/lvs_rs.sh


# 查看一下每台real server的router -n
[root@zhdy-02 ~]# route -n
Kernel IP routing table
Destination    Gateway        Genmask        Flags Metric Ref    Use Iface
0.0.0.0        192.168.2.2    0.0.0.0        UG    100    0        0 ens33
192.168.2.0    0.0.0.0        255.255.255.0  U    100    0        0 ens33
192.168.2.200  0.0.0.0        255.255.255.255 UH    0      0        0 lo

# 查看IP是否已经绑在lo卡上
[root@yt-02 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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 192.168.2.200/32 brd 192.168.2.200 scope global lo:0

4.7 测试

  • 测试前一定要全部关闭iptables
# systemctl stop firewalld
# systemctl disable firewalld
  • 修改2个RS的nginx主页内容,以便区分
[root@yt-02 ~]# echo "rs1rs1" >/usr/share/nginx/html/index.html
[root@yt-03 ~]# echo "rs2rs2" >/usr/share/nginx/html/index.html
  • 用浏览器测试VIP,多试几次
[root@zhdy-01 ~]# 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.2.200:80 wrr
  -> 192.168.2.122:80            Route  1      1          9        
  -> 192.168.2.123:80            Route  1      1          8

5. keepalived + LVS

LVS有个关键的点,也是致命点。所有的请求都会通过Director去转发到Real server 如果Director宕机,我们的所有服务均会被停止掉。所以我们会把keepalived放在这儿,实现DR的高可用,这样就会完美的解决问题!

完整架构需要两台服务器(角色为dir)分别安装keepalived软件,目的是实现高可用,但keepalived本身也有负载均衡的功能,所以本次实验可以只安装一台keepalived。

5.1 准备工作

主机名 IP地址 角色
yt-01 192.168.2.131 Director,安装keepalived
yt-02 192.168.2.132 Real server 1
yt-03 192.168.2.133 Real server 2
192.168.2.300 VIP

5.2 配置director

[root@yt-01 ~]# yum install -y keepalived

# 自定义Keepalived配置文件
[root@yt-01 ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    #备用服务器上为 BACKUP
    state MASTER
    #绑定vip的网卡为ens33,你的网卡可能不一样,这里需要你改一下
    interface ens33
    virtual_router_id 51
    #备用服务器上为90
    priority 100
    #设置为不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置,如果高的被down掉后,又起来,这样不会抢占。
    nopreempt    ##备用服务器不用写这句
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.2.300
    }
}
virtual_server 192.168.2.300 80 {
    #(每隔10秒查询realserver状态)
    delay_loop 10
    #(lvs 算法) 
    lb_algo wlc 
    #算法(DR模式)
    lb_kind DR
    #(同一IP的连接60秒内被分配到同一台realserver)
    persistence_timeout 0 
    #(用TCP协议检查realserver状态)
    protocol TCP 
    real_server 192.168.2.132 80 {
        #(权重) 
        weight 100
        TCP_CHECK {
        #(10秒无响应超时)
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }  
    real_server 192.1682.133 80 {
        weight 100
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }  
}    

# 启动Keepalived服务
[root@yt-01 ~]# systemctl start keepalived

查看网卡信息:
[root@yt-01 ~]# ip add
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:be:0e:17 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.131/24 brd 192.168.2.255 scope global ens33
      valid_lft forever preferred_lft forever
    inet 192.168.2.300/32 scope global ens33
      valid_lft forever preferred_lft forever
    inet6 fe80::592f:39cc:1b50:1d07/64 scope link 
      valid_lft forever preferred_lft forever
#虚拟IP(VIP)在ens33网卡上

# 查看ipvsadm规则
[root@director ~]# 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.2.300:80 wlc
  -> 192.168.2.132:80            Route  100    0          0        
  -> 192.168.2.133:80            Route  100    0          0        

5.3 配置Real Server

# 编辑路由转发脚本
[root@yt-02 ~]# vim /usr/local/sbin/lvs_rs.sh

#/bin/bash
vip=192.168.2.300
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
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

# 运行脚本
[root@yt-02 ~]# sh /usr/local/sbin/lvs_rs.sh

RS3上同上

配置完成

5.4 测试

在浏览器访问VIP:192.168.2.300,刷新网页,访问结果由RS1、RS2交替回复,停掉任意一台RS服务器,网页不会中断。

5.5 Keepalived+LVS作用

  • Keepalived搭建高可用保证LVS中director宕机后服务器不瘫痪(用多台Director)
  • 如果只使用LVS,那么当LVS架构中某个real server宕机后,director仍然会继续向其发送请求,添加Keepalived后会自动将宕机的real server清除出rs列表。

猜你喜欢

转载自my.oschina.net/zhouyuntai/blog/1788219