2-部署LVS-DR

随笔1个月前发布 怎舍
5 0 0

2.部署LVS-DR

主机 IP
client eth0 :192.168.4.10/24
proxy eth0:0 :192.168.4.15/24
eth0 :192.168.4.5/24
web1 lo:0 :192.168.4.15/32
eth0 :192.168.4.100/24
web2 lo:0 :192.168.4.15/32
eth0 :192.168.4.200/24

DR原理

通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址,源IP/PORT,以及目标IP/PORT均保持不变

DR搭建思路

服务器集群

1.修改lo:0的地址为VIP

2.修改/etc/sysctl.conf,防止地址冲突

3.添加路由:访问vip的报文交给lo:0口处理

调度器

1.修改eth0:0的地址为VIP

2.安装ipvsadm,配置调度规则

配置web1和web2

配置IP
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.100/24 connection.autoconnect yes
nmcli connection up eth0

vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.4.15        # VIP,即客户访问的IP
NETMASK=255.255.255.255    # 必须为32
NETWORK=192.168.4.15       # 网络地址
BROADCAST=192.168.4.15     # 广播地址

提供web服务
yum -y install httpd
echo "192.168.4.100" > /var/www/html/index.html
systemctl restart httpd

防止地址冲突

cat <<EOF>> /etc/sysctl.conf
# LVS - ARP # 标识,提示用
net.ipv4.conf.all.arp_ignore = 1 
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
EOF

sysctl -p 

systemctl restart network
systemctl stop firewalld
setenforce 0

添加路由

route add -host VIP地址 dev lo:0
echo "route add -host VIP地址 dev lo:0" >> /etc/rc.d/rc.local

配置proxy

为了防止冲突,VIP必须要配置在网卡的虚拟接口

图形化才有
service NetworkManager stop
chkconfig NetworkManager off

vim /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.4.15     # VIP
NETMASK=255.255.255.0

systemctl restart network

关闭广播功能(这是优化,可以不做)

vim /etc/sysctl.conf

net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0

sysctl -p

安装lvs

yum -y install ipvsadm

ipvsadm -C

ipvsadm -A -t 192.168.4.15:80 -s wrr
ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.100 -g -w 1
ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.200 -g -w 1

ipvsadm -Ln
service ipvsadm save
ipvsadm-save -n > /etc/sysconfig/ipvsadm

测试

客户端使用curl命令反复连接http://192.168.4.5,查看访问的页面是否会轮询到不同的后端真实服务器。

健康检查

默认LVS不带健康检查功能,需要自己手动编写动态检测脚本

参考脚本:

判断真实地址通不通,

如果通:查看在不在集群中,不在就添加

若不通:从集群中移除

vim check.sh
#!/bin/bash
net=192.168.4
VIP=192.168.4.15
while :
do
  for i in 100 200
    do
      curl $net.$i &> /dev/null
      if [ $? -eq 0 ];then
        ipvsadm -Ln | grep -q $i || ipvsadm -a -t $VIP:80 -r $net.$i
      else
        ipvsadm -Ln | grep -q $i && ipvsadm -d -t $VIP:80 -r $net.$i:80
      fi
    done
done &
© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...