欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-12 17:08:24
...

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服务

[[email protected] ~]# yum install -y ipvsadm
[[email protected] ~]# yum install -y ipvsadm
[[email protected] ~]# yum install -y ipvsadm

4.3 在Director上面编写脚本

[[email protected] ~]# 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脚本

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

4.5 每台Real Server上也编写脚本

[[email protected] ~]# 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上运行脚本

[[email protected] ~]# sh /usr/local/sbin/lvs_rs.sh
[[email protected] ~]# sh /usr/local/sbin/lvs_rs.sh


# 查看一下每台real server的router -n
[[email protected] ~]# 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卡上
[[email protected] ~]# 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主页内容,以便区分
[[email protected] ~]# echo "rs1rs1" >/usr/share/nginx/html/index.html
[[email protected] ~]# echo "rs2rs2" >/usr/share/nginx/html/index.html
  • 用浏览器测试VIP,多试几次
[[email protected] ~]# 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

[[email protected] ~]# yum install -y keepalived

# 自定义Keepalived配置文件
[[email protected] ~]# 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服务
[[email protected] ~]# systemctl start keepalived

查看网卡信息:
[[email protected] ~]# 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规则
[[email protected] ~]# 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

# 编辑路由转发脚本
[[email protected] ~]# 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

# 运行脚本
[[email protected] ~]# 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列表。

转载于:https://my.oschina.net/zhouyuntai/blog/1788219