LVS DR模式搭建、keepalived+LVS

本文详细介绍了如何在Linux环境下配置LVSDR模式的负载均衡,并结合Keepalived实现高可用集群。通过具体步骤,展示了如何在分发器和真实服务器上设置虚拟IP,调整内核参数,以及Keepalived的配置方法。

12月21日任务

18.11 LVS DR模式搭建

18.12 keepalived + LVS

 

LVS DR模式搭建

实例准备

  • 分发器(调度器dir) 内网:192.168.65.130 外网:192.168.19.128
  • rs1 内网:192.168.65.133 网关:192.168.65.2
  • rs2 内网:192.168.65.134 网关:192.168.65.2
  • vip(绑定到所有设备上) 192.168.65.200

分发器上编辑并执行脚本

[root@director ~]# vi /usr/local/sbin/lvs_dr.sh
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/usr/sbin/ipvsadm
vip=192.168.65.200
rs1=192.168.65.133
rs2=192.168.65.134
#注意这里的网卡名字,有些系统可以为eth0
# ifdown/ifup清空之前命令行下的配置ip命令,在脚本多次运行时就可以清空之前的配置
ifdown ens33 > /dev/null
ifup ens33 > /dev/null
# 配置虚拟网卡ens33:2
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

[root@director ~]# sh /usr/local/sbin/lvs_dr.sh

rs1和rs2上配置并执行脚本

[root@rs1 ~]# vi /usr/local/sbin/lvs_dr_rs.sh
[root@rs2 ~]# vi /usr/local/sbin/lvs_dr_rs.sh

代码相同,如下:
#/bin/bash
vip=192.168.65.200
ifdown lo > /dev/null
ifup lo > /dev/null
#把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@rs1 ~]# sh /usr/local/sbin/lvs_dr_rs.sh
[root@rs2 ~]# sh /usr/local/sbin/lvs_dr_rs.sh
验证效果

lvs DB mode

分发器数据包数据信息

[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.65.200:80 wrr
  -> 192.168.65.133:80            Route   1      2          0         
  -> 192.168.65.134:80            Route   1      0          2 
ipvsadm常用命令
  1. 管理集群访问 例:ipvsadm -A -t 192.168.65.200:80 -s rr
    • 添加:-A -t|u|f service-address [-s 调度算法]
      • -t tcp协议的集群服务
      • -u udp协议的集群服务
      • -f 防火墙标记
    • 修改:-E
    • 删除:-D
  2. 管理集群服务中的RS 例如:ipvsadm -a -t 192.168.65.200:80 -r 192.168.65.133 -m
    • 添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]

      • -t|u|f service-address 事先定义好的某集群服务
      • -r server-address 某RS的地址,NAT方法中可以使用ip:port方式
      • -g|i|m LVS类型
        • -g DR
        • -i TUN
        • -m NAT
      • -w weight 定义权重
    • 查看信息 -L | -l option

      • option包含
        • -n 数字形式显示主机地址和端口号
        • --stats 统计信息
        • --rate 速率
        • --timeout 显示超时时间
        • --daemon
        • --sort 排序(默认升序)
        • -c 显示当前ipvs连接状况
    • 删除 -C 清空ipvs规则

    • 保存规则 -S

      ipvsadm -S > /tmp/ipvs

    • 载入规则 -R

      ipvsadm -R < /tmp/ipvs


keepalived+LVS

keepalived内置了ipvsadm的功能,因此不需要额外安装ipvsadm,也不需要编写与执行相关脚本。

配置相关信息

  • dir:192.168.65.130
    • vip:192.168.65.200
  • rs1:192.168.65.133
  • rs2:192.168.65.134

编辑分发器的配置文件

[root@director ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    #备用服务器上为 BACKUP
    state MASTER
    #绑定vip的网卡为ens33,你的网卡和阿铭的可能不一样,这里需要你改一下
    interface ens33
    virtual_router_id 51
    #备用服务器上为90
    priority 100  
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass test
    }
    # 指定vip地址
    virtual_ipaddress {
        192.168.65.200
    }
}
virtual_server 192.168.65.200 80 {
    #(每隔10秒查询realserver状态)
    delay_loop 10
    #(lvs 算法)
    lb_algo wlc
    #(DR模式)
    lb_kind DR
    #(同一IP的连接60秒内被分配到同一台realserver)
    persistence_timeout 60
    #(用TCP协议检查realserver状态)
    protocol TCP
    real_server 192.168.65.133 80 {
        #(权重)
        weight 100
        TCP_CHECK {
        #(10秒无响应超时)
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.65.134 80 {
        weight 100
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}
测试效果

启动分发器director上的keepalived,可以看到有2个RS启动

[root@director ~]# systemctl start keepalived
[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.65.200:80 wlc persistent 60
  -> 192.168.65.133:80            Route   100    0          0         
  -> 192.168.65.134:80            Route   100    0          0         

关闭rs2上的nginx服务

[root@rs2 ~]# systemctl stop nginx

再次查看分发器上的状态,已检测到rs2宕机

[root@test3 ~]# 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.65.200:80 wlc persistent 60
  -> 192.168.65.133:80            Route   100    0          0  

注意:两台服务器上的lvs_rs.sh脚本依然要执行,去绑定vip、设置内核参数;分发器上不需要执行绑定vip的操作,但是需要开启转发功能。

转载于:https://my.oschina.net/u/3964535/blog/2992153

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值