准备三台测试机,一台作为分发器(dir),另外两台作为处理用户请求的服务器(rs),并清空防火墙规则:
* 分发器test03: 192.168.77.123
* rs服务器centos0: 192.168.77.129
* rs服务器test-a: 192.168.77.134
* vip: 192.168.77.111
1. dir上编写脚本并执行
[root@test03 ~]# vim /usr/local/sbin/lvs_dr.sh
[root@test03 ~]# cat /usr/local/sbin/lvs_dr.sh
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward # 打开端口转发
ipv=/usr/sbin/ipvsadm
vip=192.168.77.111
rs1=192.168.77.129
rs2=192.168.77.134
# eno16777736这里换成自己的网卡名
ifdown eno16777736
ifup eno16777736
# 上面两行是清理之前虚拟网卡相关的设置
ifconfig eno16777736:2 $vip broadcast $vip netmask 255.255.255.255 up # 设置虚拟网卡,绑定了一个虚拟ip(vip)
route add -host $vip dev eno16777736:2
$ipv -C # 清空规则
$ipv -A -t $vip:80 -s wrr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1 # -g 指 dir模式
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1
[root@test03 ~]# sh /usr/local/sbin/lvs_dr.sh
2. 另外两台rs上编写脚本并执行
[root@centos0 ~]# vim /usr/local/sbin/lvs_dir_mod_rs.sh
[root@centos0 ~]# cat /usr/local/sbin/lvs_dir_mod_rs.sh
#! /bin/bash
vip=192.168.77.111
# 把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
[root@centos0 ~]# sh /usr/local/sbin/lvs_dir_mod_rs.sh
[root@test-a ~]# sh /usr/local/sbin/lvs_dir_mod_rs.sh
3.访问测试
[root@test-a ~]# curl localhost
Server test-a.
[root@centos0 ~]# curl localhost
Server centos0.
多刷新几次再访问