部署LVS-DR群集
一、LVS-DR工作原理
LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一种工作模式
LVS-DR模式,Director Server 作为群集的访问入口,不作为网关使用。
节点Director Server 与Real Server 需要在同一个网络中,返回给客户端的数据不需要经过Director Server。
为了对整个群集的访问,Dreector Server和Real Server都需要配置VIP地址
1 LVS-DR数据包流向分析
Clinent向目标VIP发出请求,Director(负载均衡器)接收
源ip:客户端ip,目标ip:虚拟ip,源MAC:客户端MAC地址,目标MAC:负载均衡器的MAC地址
Director根据负载均衡算法选择RealServer_1(真实服务器),不修改也不封装IP报文,而是将数据帧的MAC地址改为RealServer_1的MAC地址,然后在局域网上发送。
源ip:虚拟ip,目标ip:真实虚拟ip,源MAC:负载均衡器MAC,目标MAC:真实服务器MAC
RealServer_1收到这个帧,解封装后发现目标IP与本机匹配(RealSERVERS事先绑定了VIP),于是处理这个报文,随后重新封装报文,发送到局域网。
源ip:虚拟ip,目标ip:客户机ip,源MAC:真实ens33网卡MAC,目标MAC:客户端MAC
注意:如果跨网段,则报文通过路由器经由internet返回给用户
Client将收到回复报文,Client认为得到正常的服务,而不会知道是那一台服务器处理的。
详细流程分析 客户端通过路由器将访问请求发送到内网当中,需要通过APR将源地址解析为MAC地址进行访问,但是由于内网中DS(负载调度器)和RS(真实服务器)都配置了VIP,他们都可收到APR请求,并返回自己的MAC,这时候客户端的数据不知道往哪个上面发送,那就需要通过在真实服务器上配置 “路由紧固” + “只响应目标为本机ens33网卡信息的请求参数” ,因为DR上配置的是虚拟子接口,可以接收到信息,而RS,配置的是环回地址,无法收到ARP请求,那么这样就只有DS收到请求。收到请求后,客户端通过封装DS的MAC地址,进行二层转发。 DS收到请求后,通过调度算法选择需要转发的RS站点,因为都在局域网内此时转发只是二层的转发,那怎么发给RS站点呢?二层转发是局域MAC地址转发的,通过ARP获得RS的MAC地址,将获得的MAC地址封装为目标MAC地址,进行数据转发。 RS收到请求后,它可以直接请请求返回给客户端,不需要再经过DS,因为,它获取到数据包后,把数据包交个自己的ens33网卡,由ens33网卡将数据包转发出去,ens33进行APR广播,这里为了不修改ARP表的内容,在进行ARP广播,使用的源ip为RS的ens33接口ip。广播得到了客户机的MAC地址,再进行将数据转发,转发时,使用的源ip为:环回ip,源MAC为:ens33MAC,目标地址为:客户机地址,目标MAC为客户机MAC。 客户机收到数据包后,发现数据包的源地址为VIP,并不知道是哪一台服务器处理的,下次再发出请求时,直接根据ARP中的表项将数据再次转发到DS
2 DR模式的特点
(1)Director Server(调度器) 和 Real Server(节点服务器) 必须在同一个物理网络中。
(2)Real Server可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对RIP进行直接访问。
(3)Director Server作为群集的访问入口,但不作为网关使用。
(4)所有的请求报文经由Director Server, 但回复响应报文不能经过Director Server。
(5) Real Server 的网关不允许指向Director Server IP, 即Real Server发送的数据包不允许经过Director Server。(RS的网关地址只能指定真实的路由器网关)
(6) Real Server 上的 lo 接口配置VIP的IP地址。
LVS单网段DR模式部署
五台虚拟机(两台web服务虚拟机,一台DR负载均衡调度器,一台客户机,一台NFS共享服务机),具体IP配置如下:
DR 服务器:192.168.73.105
Web 服务器1:192.168.73.106
Web 服务器2:192.168.73.107
NFS共享服务机:192.168.73.108
客户端:192.168.73.109
vip:192.168.73.66
配置DR
systemctl stop firewalld setenforce 0 vim /etc/selinux/config SELINUX=disabled modprobe ip_vs cat /proc/net/ip_vs yum -y install ipvsadm
配置虚拟IP
cd /etc/sysconfig/network-scripts/ cp ifcfg-ens33 ifcfg-ens33:0 #若隧道模式,复制为ifcfg-tunl0 vim ifcfg-ens33:0 DEVICE=ens33:0 ONBOOT=yes IPADDR=192.168.73.66 NETMASK=255.255.255.255 ifup ens33:0 ifconfig ens33:0
调整相应参数
#由于 LVS 负载调度器和各节点需要共用 VIP 地址,需要关闭 icmp 的重定向,不充当路由器。 vim /etc/sysctl.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 sysctl -p
配置负载分配
ipvsadm-save > /etc/sysconfig/ipvsadm systemctl start ipvsadm ipvsadm -C ipvsadm -A -t 192.168.73.66:80 -s rr ipvsadm -a -t 192.168.73.66:80 -r 192.168.73.106:80 -g #若隧道模式,-g替换为-i ipvsadm -a -t 192.168.73.66:80 -r 192.168.73.107:80 -g ipvsadm ipvsadm -ln #查看节点状态,Route代表 DR模式
部署共享存储NFS
systemctl stop firewalld.service setenforce 0 yum -y install nfs-utils rpcbind mkdir /opt/web1 /opt/web2 chmod 777 /opt/web1 /opt/web2 vim /etc/exports /usr/share *(ro,sync) /opt/web1 192.168.73.0/24(rw,sync) /opt/web2 192.168.73.0/24(rw,sync) systemctl start rpcbind.service systemctl start nfs.service
配置节点服务器
配置虚拟IP
#此地址仅用作发送 Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口 lo∶0 来承载 VIP 地址,并为本机添加一条路由记录,将访问 VIP 的数据限制在本地,以避免通信紊乱。 cd /etc/sysconfig/network-scripts/ cp ifcfg-lo ifcfg-lo:0 vim ifcfg-lo:0 DEVICE=lo:0 ONBOOT=yes IPADDR=192.168.73.66 NETMASK=255.255.255.255 #注意:子网掩码必须全为 1 ifup lo:0 ifconfig lo:0 route add -host 192.168.73.66 dev lo:0 vim /etc/rc.local /sbin/route add -host 192.168.73.66 dev lo:0 chmod +x /etc/rc.d/rc.local
调整内核ARP,防止IP地址与MAC地址冲突
vim /etc/sysctl.conf net.ipv4.conf.lo.arp_ignore = 1 #系统只响应目的IP为本地IP的ARP请求 net.ipv4.conf.lo.arp_announce = 2 #系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 sysctl -p 或者 (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 sysctl -p) yum -y install nfs-utils rpcbind httpd systemctl start rpcbind systemctl start httpd
web1网页测试
mount.nfs 192.168.73.108:/opt/web1 /var/www/html echo '<h1>this is web1 test !</h1>' > /var/www/html/index.html
web2网页测试
mount.nfs 192.168.73.108:/opt/benet /var/www/html echo '<h1>this is web2 test!</h1>' > /var/www/html/index.html
关掉主配置保持连接
vim /etc/httpd/conf/httpd.conf
KeepAlive off
客户机访问VIP地址
总结
LVS-DR模式部署总结
NFS服务器的设置
(1)安装nfs-utils、rpcbind软件包
(2)新建共享目录,并创建站点文件
(3)修改共享配置文件,设置共享策略
(4)启动两个服务,查看本机的NFS共享信息
调度器设置:
(1)加载 ip_vs 模块,安装ipvsadm工具
(2)配置虚拟网卡(ens33:0)IP地址(VIP)
(3)条件proc参数,并且关闭路由转发功能
(4)使用ipvsadm工具配置负载均衡策略(配置时注意,该转发设置基于VIP设置,而非调度器本身的IP)
节点服务器配置
(1)安装httpd服务,并且创建各自的测试网页(真实环境是多个节点服务器挂同一个NFS共享机,并且内容网页相同。)
(2)添加虚拟网卡,与调度器不同,节点服务器设置的虚拟网卡为回环的虚拟网卡(lo:0),用于承载VIP,做自身数据处理
(3)调整内核(/etc/sysctl.conf)的参数设置,以阻止更新 VIP 的 MAC 地址,避免发生冲突。
(4)添加路由,指定设备为回环的虚拟网卡(也是承载VIP的虚拟网卡)