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
验证效果
分发器数据包数据信息
[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常用命令
- 管理集群访问 例:ipvsadm -A -t 192.168.65.200:80 -s rr
- 添加:-A -t|u|f service-address [-s 调度算法]
- -t tcp协议的集群服务
- -u udp协议的集群服务
- -f 防火墙标记
- 修改:-E
- 删除:-D
- 添加:-A -t|u|f service-address [-s 调度算法]
- 管理集群服务中的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连接状况
- option包含
-
删除 -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的操作,但是需要开启转发功能。