欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

大点干!早点散----------负载均衡LVS-DR群集部署

程序员文章站 2024-03-21 15:03:04
...

一、LVS-DR工作原理

1、DR模式概述

DR(Direct Routing)

  • 通过在调度器LB上修改数据包的目的MAC地址实现转发。注意,源IP地址仍然是CIP, 目的IP地址仍然是VIP。
  • 请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB, 因此,并发访问量大时使用效率很高(和NAT模式比)
  • 因DR模式是通过MAC地址的改写机制实现的转发,因此,所有RS节点和调度器LB只能在一个局域网LAN中(小缺点)。
  • 需要注意RS节点的VIP的绑定(lo:vip/32,lo1:vip/32) 和ARP抑制问题。
  • 强调下: RS节点的默认网关不需要是调度器LB的DIP, 而直接是DC机房分配的上级路由器的IP (这是RS带有外网P地址的情况),理论讲:只要RS可以出网即可,不是必须要配置外网IP。
  • 由于DR模式的调度器仅进行了目的MAC地址的改写,因此,调度器LB无法改变请求的报文的目的端口(和NAT要区别)
  • 当前,调度器LB支持几乎所有的UNIX,LINUX系统,但目前不支持WINDOWS系统。真实服务器RS节点可以是WINDOWS系统。
  • 总的来说DR模式效率很高,但是配置也较麻烦,因此,访问量不是特别大的公司可以用haproxy/nginx取代之。这符合运维的原则:简单、易用、高效。日1000-2000W PV或并发请求1万-以下都可以考虑用haproxy/nginx (LVS NAT模式)
    直接对外的访问业务,例如:web服务做RS节点,RS最好用公网IP地址。如果不直接对外的业务,例如: MySQL,存储系统RS节点,最好只用内部IP地址。
    DR模式的核心特点就是更改目标MAC地址进行转发

cip为客户端的地址
vip为虚拟地址
rip为真实的服务器
lip为本地地址

2、如何分析LVS-DR数据包流向?

整个流程:

  1. 客户端------>网关

源IP地址:客户端IP 目标IP地址:VIP

源MAC地址:客户端MAC 目标MAC地址:网关MAC

  1. 网关------->分发器

源IP地址:客户端IP 目标IP地址:分发器VIP

源MAC地址:网关MAC 目标MAC地址:分发器VIP的MAC

  1. 分发器--------->服务器

先发广播找到服务器的RIP对应的MAC然后:

源IP地址:分发器DIP 目标IP地址:服务器VIP

源MAC地址:分发器DIP对应的MAC 目标MAC地址:服务器RIP对应的MAC

  1. 服务器---------->网关

源IP地址:服务器VIP 目标IP地址:客户端IP

源MAC地址:服务器RIP对应的MAC 目标MAC地址:网关的MAC

  1. 网关----------->客户端

源IP地址:服务器VIP 目标IP地址:客户端IP

源MAC地址:网关的MAC 目标MAC地址:客户端的MAC

大点干!早点散----------负载均衡LVS-DR群集部署

3、DR模式的优缺点

优点:VS/DR跟 VS/TUN 方法相同,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量。

缺点:要求负载均衡器的网卡必须与物理网卡在一个物理段上

4、DR中存在的ARP问题

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

当一个ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上的,它们都会接收到ARP广播 ,此时只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播 ,对节点服务器进行处理,使其不响应针对VIP的ARP请求

使用虚接口lo:0承载ⅥP地址
设置内核参数 arp_ignore=1:系统只响应目的IP为本地IP的ARP请求
RealServe返回报文(源IP是VIP)经路由器转发,在重新封装报文时需要先获取路由器的MAC地址

解决方法
修改/etc/sysctl.conf文件
对节点服务器进行处理,使其不响应针对VIP的ARP请求
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

二、LVS-DR部署

1、实验目的

为了进一步提高公司网站的负载能力,公司决定扩展现有的网站平台,基于LVS构筑负载均衡群集。考虑到群集的访问效率,管理员准备采用LVS群集的DR模式,共享存储设备存放在内部专有网络中

2、实验拓扑

大点干!早点散----------负载均衡LVS-DR群集部署

3、实验过程

两台LVS服务器都安装工具包

[aaa@qq.com ~]# yum install keepalived ipvsadm -y	'//keepalived:双机热备要用到的,ipvsadm:调度管理要用'
[aaa@qq.com ~]# yum install keepalived ipvsadm -y

两台LVS服务器都开启路由转发,关闭重定向

[aaa@qq.com ~]# vim /etc/sysctl.conf 
'//尾行插入下段配置'
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[aaa@qq.com ~]# sysctl -p	'//重载配置,使之生效'
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

两台LVS服务器都创建脚本便于service管理

[aaa@qq.com network-scripts]# vim /etc/init.d/dr.sh
'//编辑以下脚本内容'
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10   ##虚拟ip
RIP1=192.168.100.201 ##真实web服务器ip
RIP2=192.168.100.202
case "$1" in
start)
                /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm  ##保存配置
                systemctl start ipvsadm  ##启动服务
                /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up  
##设置ens33:0地址,广播地址,子网掩码,并开启
                /sbin/route add -host $VIP dev ens33:0  ##添加路由网段信息
                /sbin/ipvsadm -A -t $VIP:80 -s rr ##指定虚拟服务访问入口,指定轮询算法
                /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g ##指定真实服务器,dr模式
                /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
                echo "ipvsadm starting --------------------[ok]"
                ;;
stop)
                /sbin/ipvsadm -C   ##清空缓存
                systemctl stop ipvsadm  ##关闭服务
                ifconfig ens33:0 down  ##关闭接口
                route del $VIP   ##删除路由信息
                echo "ipvsamd stoped----------------------[ok]"
                 ;;
status)
                if [ ! -e /var/lock/subsys/ipvsadm ];then  ##判断文件存在与否决定状态
                echo "ipvsadm stoped---------------"
                exit 1
                                else
                                echo "ipvsamd Runing ---------[ok]"
                fi
                ;;
*)
                echo "Usage: $0 {start|stop|status}"
                exit 1
esac
exit 0
[aaa@qq.com network-scripts]# chmod +x /etc/init.d/dr.sh 

两台LVS服务器都修改网卡为仅主机模式
大点干!早点散----------负载均衡LVS-DR群集部署

大点干!早点散----------负载均衡LVS-DR群集部署

两台LVS服务器都为ens33配置IP地址、ens33:0配置ⅥP地址

[aaa@qq.com ~]# cd /etc/sysconfig/network-scripts/
[aaa@qq.com network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0	
[aaa@qq.com network-scripts]# vim ifcfg-ens33:0	'//配置虚拟ip地址'
'//删除原本内容,添加以下配置'
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
[aaa@qq.com network-scripts]# vim ifcfg-ens33
'//...省略内容,修改为static'
BOOTPROTO=static
'//...省略内容,尾行添加内容'
IPADDR=192.168.100.100
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
[aaa@qq.com network-scripts]# vim ifcfg-ens33
    '//注意lvs2的IP地址为192.168.100.101'
IPADDR=192.168.100.101

两台LVS服务器都重启各项配置

[aaa@qq.com network-scripts]# systemctl restart network
[aaa@qq.com network-scripts]# ifup ens33:0
[aaa@qq.com network-scripts]# service dr.sh start
ipvsadm starting --------------------[ok]
[aaa@qq.com network-scripts]# systemctl stop firewalld.service 
[aaa@qq.com network-scripts]# setenforce 0
'使用ifconfig查看虚拟接口是否打开  如果打不开  将networkmanger关掉再重新尝试'

配置两台节点IP地址绑定VIP
LVS-DR中,两台节点服务器要配置绑定VIP地址

VIP地址仅用作Web响应数据包的源地址,并不监听客户机的访问请求

都修改为仅主机模式

两台节点服务器为ens33配置IP地址,为lo:0配置VIP地址

[aaa@qq.com ~]# cd /etc/sysconfig/network-scripts/
[aaa@qq.com network-scripts]# cp -p ifcfg-lo ifcfg-lo:0
[aaa@qq.com network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.10
NETMASK=255.255.255.0
ONBOOT=yes
[aaa@qq.com network-scripts]# vim ifcfg-ens33
'//...省略内容,修改为static'
BOOTPROTO=static
'//...省略内容,尾行添加内容'
IPADDR=192.168.100.201
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
'//其中web2服务器修改为192.168.100.202'
IPADDR=192.168.100.202

节点服务器配置抑制ARP响应
配置抑制ARP脚本

[aaa@qq.com network-scripts]# vim /etc/init.d/web.sh
#!/bin/bash
VIP=192.168.100.10
                case "$1" in
                start)
                                ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
                                /sbin/route add -host $VIP dev lo:0
                                echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore   '//arp忽略'
                                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 >/dev/null 2>&1
                                echo "RealServer Start OK "
                                ;;
                stop)
                                ifconfig lo:0 down
                                route del $VIP /dev/null 2>&1
                                echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore '//arp开启'
                                echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
                                echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
                                echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
                                echo "RealServer Stopd"
                                ;;
                *)
                                echo "Usage: $0 {start|stop}"
                                exit 1
                esac
                exit 0
[aaa@qq.com network-scripts]# chmod +x /etc/init.d/web.sh 

两台节点服务器配置测试网址
在两台节点服务器上安装配置并启用httpd服务器,分别创建测试网页,测试网页内容要不相同,以区别不同的节点服务器

[aaa@qq.com ~]# yum install httpd -y
[aaa@qq.com ~]# yum install httpd -y
[aaa@qq.com ~]# vim /var/www/html/index.html
<h1>this shang web</h1>
[aaa@qq.com ~]# vim /var/www/html/index.html
<h1>this is zhen web</h1>

重启各项服务

[aaa@qq.com network-scripts]# systemctl restart network
[aaa@qq.com network-scripts]# ifup lo:0
[aaa@qq.com network-scripts]# service web.sh start
RealServer Start OK 
[aaa@qq.com network-scripts]# systemctl start httpd
[aaa@qq.com network-scripts]# systemctl stop firewalld.service 
[aaa@qq.com network-scripts]# setenforce 0
   

3、验证

大点干!早点散----------负载均衡LVS-DR群集部署
大点干!早点散----------负载均衡LVS-DR群集部署
大点干!早点散----------负载均衡LVS-DR群集部署

上一篇: Adhearsion初体验

下一篇: birt初体验