CentOS 7 搭建 LVS集群 DR模式
原创
©著作权归作者所有:来自51CTO博客作者Tom马的原创作品,请联系作者获取转载授权,否则将追究法律责任
工作原理
- 客户端发送请求到 Director Server (负载均衡器 DS),请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间,Director Server 和 Real Server 在同一个网络中,数据通过二层数据链路层来传输
- 内核空间判断数据包的目标IP是本机IP,此时LVS比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源 MAC 地址为 Director Server 的 MAC 地址,修改目标 MAC 地址为 Real Server 的 MAC 地址,源IP地址与目标IP地址没有改变,然后将数据包发送给 Real Server 1
- 到达 Real Server 的请求报文的 MAC 地址是自身的 MAC 地址,就接收此报文。数据包重新封装报文(源IP地址为VIP,目标IP 为CIP),将响应报文通过IO接口传送给物理网卡然后向外发出,Real server 1 直接将响应报文传送到客户端
环境
IP
| 服务
|
192.168.2.200
| 虚拟IP(VIP)
|
192.168.2.100
| lvs调度器(DS)
|
192.168.2.111
| web服务器1(RS)
|
192.168.2.112
| web服务器2(RS)
|
一、lvs 调度器安装
1、安装ipvsadm工具
# 安装
yum install ipvsadm
# 启动
systemctl start ipvsadm
2、创建IP别名,一个网卡配置多个IP
# 临时创建
ifconfig ens33:0 192.168.2.200 netmask 255.255.255.0
# 永久创建
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
# 修改NAME,DEVICE名称,删除UUID,DNS,网关
vim ifcfg-ens33:0
NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.2.200
NETMASK=255.255.255.0
3、重启网络服务
systemctl restart network
4、调整 proc 响应参数
# 对于 DR 群集模式来说,由于 LVS 负载调度器和各节点需要共用 VIP 地址
# 需要关闭 ICMP 的重定向,不充当路由器
cat <<EOF > /etc/sysctl.d/lvs-dr.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
EOF
# 动态加载ip_vs模块
modprobe ip_vs
# 刷新配置
sysctl -p /etc/sysctl.d/lvs-dr.conf
5、配置策略
# 清空策略
ipvsadm -C
-A: 添加虚拟服务器
-a:添加节点
-t:指定vip及tcp端口
-s:指定算法
rr:轮询
-r:指定节点ip及端口
-g:表示使用DR模式
-w:设置权重
ipvsadm -A -t 192.168.2.200:80 -s rr
ipvsadm -a -t 192.168.2.200:80 -r 192.168.2.111:80 -g -w 1
ipvsadm -a -t 192.168.2.200:80 -r 192.168.2.112:80 -g -w 1
# 保存
ipvsadm-save > /etc/sysconfig/ipvsadm
# 查看策略
ipvsadm -ln
二、Web 服务器安装(2台都要安装)
1、安装并启动 httpd
yum install httpd -y
systemctl start httpd
2、修改主页内容
# 修改 web 服务器 1
vim /var/www/html/index.html
this is 192.168.2.111
# 修改 web 服务器 2
vim /var/www/html/index.html
this is 192.168.2.112
3、添加回环网卡
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
# 修改回环网卡名,IP地址,子网掩码
vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.2.200
NETMASK=255.255.255.255
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
#BROADCAST=127.255.255.255
ONBOOT=yes
#NAME=loopback
# 重启网络服务
systemctl restart network
4、设置路由
route add -host 192.168.2.200 dev lo:0
route -n
# 开机启动
vim /etc/rc.d/rc.local
/usr/sbin/route add -host 192.168.2.200 dev lo:0
chmod +x /etc/rc.d/rc.local
5、调整 proc 响应参数
# 系统只响应目的IP为本地IP的ARP请求
# 系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
cat <<EOF > /etc/sysctl.d/lvs-dr.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
EOF
# 刷新配置
sysctl -p /etc/sysctl.d/lvs-dr.conf
6、访问