本博文主要简单介绍一下LVS负载均衡集群的一个基本负载均衡机制:LVS-DR;如有汇总不当之处,请各位在评论中多多指出。
LVS-DR原理:
LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器。它是我们国家的章文嵩博士的一个开源项目。在linux内存2.6中,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核。我们都知道LVS有LVS-DR,LVS-NAT,LVS-TUN三种模式,其中DR模式意为Direct Routing(直接路由),是调度器与实际服务器都有一块网卡连在同一物理网段上的情况。
而LVS-DR的工作原理就是:通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址,源IP/PORT,以及目标IP/PORT均保持不变
LVS-DR:直接路由的特点
Director和各RS上都配置使用VIP
(1)确保前端路由将目标IP为VIP的请求报文发往Director
(a)在前端网关做静态绑定
(b)在RS上使用arptables
(c)在RS上修改内核参数以限制ARP通告和应答级别
arp_announce
arp-ignore
(2)RS的RIP可以使用私网地址,也可以是公网地址,RIP与DIP在同一IP网络,RIP的网关不能指向DIP,以确保响应报文不会经由Director
(3)RS跟Director要在同一个物理网络
(4)请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client
(5)不支持端口映射
LVS-DR部署简单步骤介绍:
下图为LVS-DR的拓扑配置图:
1.服务器IP分配:
2.在RS服务器端安装nginx,并配置好RS的测试页面文件(test.html)
~]#yum install -y nginx
~]#vim /usr/share/nginx/html/test.html
RS1设置:
~]# cat /usr/share/nginx/html/test.html
RS1-192.168.73.142
RS2设置:
~]# cat /usr/share/nginx/html/test.html
RS2-192.168.73.143
注意:RS1与RS2配置步骤一致,但在配置测试页面文件时,为了显示测试效果,会显示实际RS的hostname以及对于IP地址
3.配置RS1网卡的VIP,添加本地route限定并修改arp_announce和arp_ignore的设置
~]#ifconfig lo:0 192.168.73.160 netmask 255.255.255.255 broadcast 192.168.73.160 up
~]#route add -host 192.168.73.160 dev lo:0
~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
注:配置RS2服务器,步骤跟RS1配置一致即可
4.在Director安装ipvsadm,并配置网卡设置,添加ipvsadm规则
~]#yum install -y ipvsadm
~]#ifconfig ens33:0 192.168.73.160 netmask 255.255.255.255 broadcast 192.168.73.160 up
~]#route add -host 192.168.73.160 dev ens33:0
~]# ipvsadm -At 192.168.73.160 -s rr
Zero port specified for non-persistent service
~]# ipvsadm -At 192.168.73.160:80 -s rr
~]# ipvsadm -a -t 192.168.73.160:80 -r 192.168.73.142 -g
~]# ipvsadm -a -t 192.168.73.160:80 -r 192.168.73.143 -g
~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.73.160:80 rr
-> 192.168.73.142:80 Route 1 0 0
-> 192.168.73.143:80 Route 1 0 0
5.启动各服务器的nginx服务,同时为了简便,关闭所有服务器的firewalld
~]#systemctl start nginx
~]#systemctl stop firewalld
~]#setenforce 0
6.在客户端测试访问,http://192.168.73.160/test.html
注意:LVS-DR模式其实可以通过脚本来直接实现,下面为各服务器的简单脚本,建议为了熟悉配置,前期还是自己手动设置比较好,
此脚本较简单,请大神勿喷!
#!/bin/bash
#lvs-dr模式部署脚本
vip=192.168.73.160
mask=255.255.255.255
iface='lo:0'
case $1 in
start)
ifconfig $iface $vip netmask $mask broadcast $vip up
route add -host $vip dev $iface
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
;;
stop)
ifconfig $iface down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
;;
*)
echo "Usage:$(basename $0) start|stop"
exit 2
;;
esac
同步博客地址:https://blog.51cto.com/12068974