LVS-dr负载均衡原理及示例搭建

lvs的基本介绍和相关术语已在LVS-nat负载均衡原理及示例搭建文中介绍,不熟悉的地方可以看下

lvs-dr工作原理

DS作为集群的访问入口,与lvs-nat的区别是不作为响应报文的出口。后端服务器RS与DS需在同一个物理网络中,响应报文直接发送给客户端,不再经过DS,这样也减轻了DS的压力。同时RS和DS都需要配置一个VIP地址。
lvs-dr

  • 数据报文流向:
  1. 客户端请求报文(源IP是CIP,目标IP是VIP)到达director_server内核空间
  2. 内核空间中prerouting链检查报文并将其送往input链
  3. ipvs在此处检查是否为集群服务,若是则将重新封装报文,源MAC地址修改为DIP的MAC地址,目标MAC地址修改为是RIP的MAC地址,源IP和目标VIP不变,根据调度分发规则从postrouting链发送给后端服务器real_server
  4. real_server发现请求报文的MAC地址是自己的MAC地址,接收并发送响应报文,源IP为VIP,目标IP为CIP,将响应报文通过lo接口传送给RIP网卡,然后发送给客户端
  • 特点:
  1. RS和DS必须在同一物理网络中
  2. RS可以使用私有地址,也可以使用公网地址
  3. 所有请求报文必须经过DS,但响应报文一定不能经过DS,因此RS的网关不允许指向DIP
  4. RS上lo接口配置VIP地址
  • 注意点:
    保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS
    解决方案是:修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求
  1. arp_ignore=1表示系统只响应目的IP为本地IP的ARP请求
  2. arp_announce=2表示系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址

示例搭建

环境

系统 IP VIP 备注
DS-centos7 192.168.153.140 192.168.153.150 stop firewall/iptables selinux
RS1-centos7 192.168.153.130 192.168.153.150 stop firewall/iptables selinux
RS2-centos7 192.168.153.131 192.168.153.150 stop firewall/iptables selinux

后端服务器RS操作步骤

  1. 配置VIP
]# cp /etc/sysconfig/network-scripts/ifcfg-lo{,:0}
]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.153.150
NETMASK=255.255.255.255
ONBOOT=yes
]# systemctl restart network
]# ip addr show
  1. 安装Nginx
]# yum install gcc gcc-c++ pcre-devel openssl-devel zlib-devel -y #如果openssl-devel报错,`rpm -qa | grep openssl*`若已安装无需再安装
]# tar xf nginx-1.16.1.tar.gz
]# cd nginx-1.16.1
]# ./configure --prefix=/opt/nginx #如果需要其它模块,自行安装
]# make && make install
]# echo $? #结果为0,则安装成功;其它数字则失败,查看报错并解决
0
]# vim /opt/nginx/html/test.html #分别在real_server_01/02上创建此文件
<h1>r1/2,192.168.153.130/1</h1> #为此区分负载到哪台后端服务器上
]# /opt/nginx/sbin/nginx #启动nginx服务
]# curl 192.168.153.130/1 #分别在real_server_01/02上本地测试是否能够正常响应
r1/2,192.168.153.130/1 #根据real_server_01/02显示对应结果
  1. 修改RS内核参数
]# 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

负载网关DS操作步骤

  1. 配置VIP
]# cp /etc/sysconfig/network-scripts/ifcfg-ens33{,:0}
]# vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
DEVICE=ens33:0
IPADDR=192.168.153.150
NETMASK=255.255.255.255
ONBOOT=yes
]# systemctl restart network
]# ip addr show
  1. 安装ipvsadm以及开启路由功能
]# yum install ipvsadm -y
]# vim /etc/sysctl.conf #路由转发永久有效
net.ipv4.ip_forward=1
]# sysctl -p 
]# echo 1 > /proc/sys/net/ipv4/ip_forward #路由转发临时有效
]# vim /etc/sysctl.conf #调整/proc响应参数,关闭Linux内核重定向参数响应
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send._redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
]# sysctl -p
  1. 配置ipvs规则
]# route add -host 192.168.153.150 dev ens33:0
]# ipvsadm -A -t 192.168.153.150:80 -s rr
]# ipvsadm -a -t 192.168.153.150:80 -r 192.168.153.130:80 -g
]# ipvsadm -a -t 192.168.153.150:80 -r 192.168.153.131:80 -g
  1. 测试观察结果

注意不要在DS、RS上执行此命令(No route to host)

]# for i in {1..10};do curl 192.168.153.150;done #测试10次观察结果
r1,192.168.153.130
r2,192.168.153.131
r1,192.168.153.130
r2,192.168.153.131
r1,192.168.153.130
r2,192.168.153.131
r1,192.168.153.130
r2,192.168.153.131
r1,192.168.153.130
r2,192.168.153.131
原文地址:https://www.cnblogs.com/wanwz/p/12791746.html