LVS DR模式搭建、keepalived+LVS

12月21日任务html

18.11 LVS DR模式搭建nginx

18.12 keepalived + LVS算法

 

LVS DR模式搭建

实例准备vim

  • 分发器(调度器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

分发器上编辑并执行脚本bash

[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

分发器数据包数据信息tcp

[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]oop

      • -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规则spa

    • 保存规则 -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的操做,可是须要开启转发功能。

相关文章
相关标签/搜索