LVS负载均衡集群

LVS-DR集群介绍

LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一 种工作模式。

1、LVS-DR 工作原理

LVS-DR 模式,Director Server 作为群集的访问入口,不作为网关使用,节点 Director Server 与 Real Server 需要在同一个网络中,返回给客户端的数据不需要经过 Director Server。为了响应对整个群集的访问,Director Server 与 Real Server 都需要配置 VIP 地址。

2、 数据包流向分析

为方便进行原理分析,将Client与群集机器放在同一网络中,数据包流经的路线为 1-2-3-4 四步

第一步:客户端发送请求到 Director Server (负载均衡器),请求的数据报文到达内核空间。

此时请求的数据报文
源 IP —— 客户端的 IP(CIP)
目标 IP —— VIP
源 MAC —— 客户端的 MAC
目的 MAC —— Director Server 的 MAC

第二步:内核空间判断数据包的目标 IP 是本机 VIP,此时 IPVS(IP 虚拟服务器)比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。然后将数据包发送给根据 负载均衡算法选择的 Real Server。(Director Server 和 Real Server 在同一个网络中,数据通过二层数据链路层来传输。)

此时请求的数据报文
源 IP —— 客户端的 IP
目标 IP —— VIP
源 MAC —— Director Server 的 MAC
目的 MAC —— Real Server 的 MAC

第三步:到达 Real Server 的请求报文的 MAC 地址是自身的 MAC 地址,就接收此报文。数据包重新封装报文,将响应报文通过 lo 接口传送给物理网卡然后向外发出。

此时请求的数据报文
源 IP —— VIP
目标 IP —— 客户端的 IP(CIP)
源 MAC —— Real Server 的 MAC
目的 MAC —— 客户端的 MAC

第四步:通过交换机和路由器将响应报文传送到客户端。客户端收到回复报文,得到想要的服务,但是不会知道是哪台服务器处理的。

3、LVS-DR 模式的特点

Director Server 和 Real Server 必须在同一个物理网络中。

Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对RIP进行直接访问。

所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。

Real Server 的网关不允许指向 Director Server IP,即不允许数据包经过 Director S erver。

Real Server 上的 lo 接口配置 VIP 的 IP 地址。

4、LVS-DR中的ARP问题

4.1 问题一

在LVS-DR负载均衡集群中,负载均衡器与节点服务器都要配置相同的VIP地址,在局域网中具有相同的IP地址。势必会造成各服务器ARP通信的紊乱

当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收到ARP广播

只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播

解决方法:

节点服务器进行处理,使其不响应针对VIP的ARP请求

使用虚接口lo:0承载VIP地址

设置内核参数arp_ ignore=1: 系统只响应目的IP为本地IP的ARP请求

4.2问题二

问题说明:RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址,发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址,路由器收到ARP请求后,将更新ARP表项,原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer的MAC地址。

路由器根据ARP表项,会将新来的请求报文转发给RealServer,导致Director的VIP失效

解决方法:

节点服务器进行处理,设置内核参数arp_announce=2:系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址

NAT模式 LVS负载均衡集群部署

 NAT模式 LVS负载均衡集群部署操作步骤(理论)
实验环境准备:
负载调度器:内网关 ens33:192.168.153.40,外网关 ens37:12.0.0.1
Web节点服务器1:192.168.153.60
Web节点服务器2:192.168.153.50
NFS服务器:192.168.153.70
客户端:12.0.0.12
 
1.部署共享存储(NFS服务器:192.168.153.70)
 
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
 
yum install nfs-utils rpcbind -y
systemctl start rpcbind.service
systemctl start nfs.service
 
systemctl enable rpcbind.service
systemctl enable nfs.service
 
mkdir /opt/accp/ /opt/benet/
chmod 777 /opt/kgc /opt/benet
echo 'this is accp web!' > /opt/kgc/index.html
echo 'this is benet web!' > /opt/benet/index.html
 
vim /etc/exports
 
/opt/accp 192.168.153.0/24(rw,sync)
/opt/benet 192.168.153.0/24(rw,sync)
 
--发布共享---
exportfs -rv
 
2.配置节点服务器(192.168.80.10、192.168.80.20)
ens33网关需要设置为网关服务器
 
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
 
yum install httpd -y
systemctl start httpd.service
systemctl enable httpd.service
 
yum install nfs-utils rpcbind -y
showmount -e 192.168.80.30
 
 
systemctl start rpcbind.service
systemctl start nfs.service
systemctl enable rpcbind.service
systemctl enable nfs.service
 
--192.168.80.10---
mount.nfs 192.168.80.30:/opt/kgc /var/www/html
 
vim /etc/fstab
192.168.80.30:/opt/kgc /myshare nfs defaults,_netdev 0 0
 
 
另一台节点服务器挂载如下:
--192.168.80.20---
mount.nfs 192.168.153.70:/opt/benet /var/www/html
 
vim /etc/fstab
192.168.80.30:/opt/benet /myshare nfs defaults,_netdev 0 0
 
3.配置负载调度器(内网关 ens33:192.168.80.1,外网关 ens36:12.0.0.1)
 
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
 
(1)配置SNAT转发规则
 
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #添加ip路由转发
 
或 echo '1' > /proc/sys/net/ipv4/ip_forward
sysctl -p
 
iptables -t nat -F
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.153.0/24 -o ens36 -j SNAT --to-source 12.0.0.1
 
(2)加载LVS内核模块
 
modprobe ip_vs #加载 ip_vs模块
cat /proc/net/ip_vs #查看 ip_vs版本信息
 
##加载全部模块
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F
filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
 
(3)安装ipvsadm 管理工具
 
yum -y install ipvsadm
 
--启动服务前须保存负载分配策略---
ipvsadm-save > /etc/sysconfig/ipvsadm
或者 ipvsadm --save > /etc/sysconfig/ipvsadm
 
systemctl start ipvsadm.service
 
(4)配置负载分配策略(NAT模式只要在服务器上配置,节点服务器不需要特殊配置)
 
ipvsadm -C #清除原有策略
ipvsadm -A -t 12.0.0.1:80 -s rr
ipvsadm -a -t 12.0.0.1:80 -r 192.168.153.50:80 -m [-w 1] #添加真实ip
ipvsadm -a -t 12.0.0.1:80 -r 192.168.153.60:80 -m [-w 1] #添加真实ip
ipvsadm #启用策略
 
ipvsadm -ln #查看节点状态,Masq代表 NAT模式
ipvsadm-save > /etc/sysconfig/ipvsadm #保存策略
 
ipvsadm -d -t 12.0.0.1:80 -r 192.168.80.10:80 -m [-w 1] #删除群集中某一节点服务器
ipvsadm -D -t 12.0.0.1:80 #删除整个虚拟服务器
systemctl stop ipvsadm #停止服务(清除策略)
systemctl start ipvsadm #启动服务(重建规则)
ipvsadm-restore < /etc/sysconfig/ipvsadm #恢复LVS 策略
 
4.测试效果
网络设置里面网关需要设置为网关服务器
在一台IP为12.0.0.12的客户机使用浏览器访问 http://12.0.0.1/ ,不断刷新浏览器测试负载均衡效果,刷新间隔需长点。
2.2 NAT模式 LVS负载均衡集群部署实验具体步骤(实操)
第一步:环境搭建
1)网关服务器网卡配置(在虚拟机设置里面添加新网卡),内外网网关ip如下:

 

2)web节点服务器1的IP和网关如下:
3)web节点服务器2的IP和网关如下:
4)客户端IP和网关设置如下:
5)关闭所有设备的防火墙和SElinux
第二步:部署共享服务器(NFS服务器:192.168.153.70)
1)安装相关软件并设置开机自启
2)创建accp和benet目录,分别创建index.html并写入内容
3)添加要发布的目录
4)发布共享
第三步:配置节点服务器(192.168.153.50、192.168.153.60)
1)节点服务器1和2安装httpd服务并开启
 
2)节点服务器1和2安装nfs-utils和rpcbind程序
3)节点服务器1扫描并挂载共享目录
4)节点服务器2扫描并挂载共享目录
第四步:配置负载调度器(内网关 ens33:192.168.153.40,外网关 ens36:12.0.0.1)
1)配置SNAT转发规则
 
2)情况iptables规则并添加新规则
3)加载LVS内核模块并查看
4)安装ipvsadm管理工具
5)保存负载分配策略并启动服务
6)配置负载分配策略(NAT模式只要在服务器上配置,节点服务器不需要特殊配置)
7)查看节点策略并保存
第五步:浏览器中进行测试(不断刷新浏览器测试负载均衡效果,刷新间隔需长点)

 

posted @ 2022-11-27 14:49  林乃均  阅读(27)  评论(0编辑  收藏  举报