设为首页 收藏本站
查看: 1551|回复: 0

[经验分享] lvs负载均衡, ipvs的NAT模式,DR模式的实现

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-10-19 08:45:33 | 显示全部楼层 |阅读模式
lvs是一种集群技术,采用IP负载均衡技术和基于内容请求分发技术。调度器(Director)具有很好的吞吐率,将请求均衡地转移到不同的服务器上处理,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。
lvs的用户空间的命令行管理工具为ipvsadm,ipvs是工作在内核中netfilter的INPUT的钩子函数上,对进入的报文在没有进入用户空间前,对这些报文进行操作。

lvs的工作类型有四种,分别是lvs-nat,lvs-dr,lvs-tun和lvs-fullnat。最常用的为前两种(lvs-nat,lvs-dr)。
lvs-nat:是一种最简单的方式,所有的RealServer将自己的网关指向Director。客户端请求的都是Director上的IP,然后报文到Director上以后经过DNAT转换,把请求Director的报文重新封装成报文,以Director的IP为源地址,然后请求RS(RealServer),RS直接响应给Director,然后由Director把结果发给客户端。简单来说就是:多目标的DNAT(iptables),它通过修改请求报文的目标IP地址(同时可能会修改目标端口)至挑选出某RS的RIP地址实现转发;
lvs-nat类型的结构图:


                            wKiom1Yjmb7hAA-wAAGWTG53_RA148.jpg

lvs-nat的特点:   
  (1)RS应该和DIP应该使用私网地址,且RS的网关要指向DIP;
  (2)请求和响应报文都要经由director转发;极高负载的场景中,director可能会成为系统瓶颈;
  (3)支持端口映射;
  (4)RS可以使用任意操作系统(OS);
  (5)RS的RIP和Director的DIP必须在同一IP网络;
   优点:实现方便简单,也容易理解;
   缺点:Director会称为一个优化的瓶颈,所有的报文都要经过Director,如果Director坏掉,后果很严重

lvs-dr:是通过修改请求中的目标MAC地址进行转发的;
lvs-dr的特点:
(1) 保证前端路由器将目标IP为VIP的请求报文发送给director,后端的RS要能以VIP的地址响应给客户端;
        解决方案:
                静态绑定
                arptables
                修改RS主机内核的参数      
  (2) RS的RIP可以使用私有地址;但也可以使用公网地址;
  (3) RS跟Director必须在同一物理网络中;
  (4) 请求报文经由Director调度,但响应报文一定不能经由Director;
  (5) 不支持端口映射;
  (6) RS可以大多数OS;
  (7) RS的网关不能指向DIP;
   为了让RS的不响应VIP的ARP响应,需要配置arp_ignore=1  别人来请求时,当别从哪个接口进入,就让那个接口的地址响应,如果不是就不响应;arp_announce=2只让自己的物理网卡的地址通告给别人;为了让RS以VIP为源地址把报文发送给客户端,RS的RIP在物理网卡上,VIP在lo(虚拟的设备)上,报文出去时要定义走lo这个设备,就是加一条路由(route add -host VIP dev lo:0)这样就能保证RS响应客户端时的源IP为VIP。
lvs-tun:就是IP隧道,就是将一个IP报文再封装一个IP报文的首部,这样可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。
lvs-fullnat:就是在报文进来时做SNAT和DNAT。
后两种不是很常见就不详细说了
lvs-dr的架构图
wKiom1YjnAOSeYgBAANAYYk6mPg981.jpg

这只是一个大概的图,DIP,VIP,RIP同一网段的是这样
DIP,VIP,RIP不同网段的架构图为:
wKiom1YjnEjByWHtAAIavl2CcdM817.jpg

下面是一个lvs-nat的示例:
用物理机作为测试机,作为客户端,172.16.249.123这台机器为Director,它有两块网卡,一块配置172.16.249.123为外网地址,另一块配置为192.168.36.1做内网地址
192.168.36.2和192.168.36.3为web服务器即为RealServer,这两台内网主机的网关指向192.168.36.1
内网的网络类型选为VMnet2,
做好之后测试内网之间能不能通信,
wKiom1Yjmp3i_vz-AAHuC-V9o6c354.jpg

wKioL1Yjm0fSBDBFAAJIpbeAT2k233.jpg
然后为为其打开httpd服务,然互配置测试页,为了演示效果我们把两台web服务器的页面配成不同的,(实际中是一模一样的资源的)
打开httpd服务,然后测试页面内容如下:
<h1>Hello , This is 192.168.36.2</h1>
<h1>This is 192.168.36.3</h1>

为Director安装ipvsadm,把本地光盘挂上,然后写好yum源的指向
yum install ipvsadm
然后在Director上测试下,能否正常访问
wKioL1Yjm6ODYCm8AACQv0uZkPY654.jpg
保证Director的防火墙是关的
wKiom1Yjm6biRhFqAAGJl_7MdhE937.jpg
Director的核心转发要打开
wKioL1Yjm9ygNfDaAABqPZvm1SU709.jpg

然后在Director上做ipvs规则
首先添加集群服务 ipvsadm -A  -t 172.16.249.123:80 -s rr  -t 172.16.249.123:80是指这个地址(172.16.249.123)的tcp协议的80端口开启集群服务 –s rr 指明调度器算法为论调

ipvsadm -A -t 172.16.249.123:80-s rr
wKiom1YjowizhYk_AADXxBQ-WPI924.jpg
然后添加集群服务中的RS(RealServer)
wKioL1Yjo0SzToFBAAFGmC6WokQ826.jpg

这样就做好了,然后测试下
wKiom1YjozSDoBlUAAB1grtT-qU469.jpg

然后你在刷新下,
wKioL1Yjo1vA16b8AACUjdsfEG8418.jpg
但是你的httpd服务不能开启长链接,要不就会出新好几次一台RS才会换下一台
在Driector中查看下,也可以看到每个主机响应一次服务
wKiom1Yjo1Cj_9_3AADcjcy206o374.jpg

这些规则使用/etc/sysconfig/ipvsadm 把规则保存到/etc/sysconfig/ipvsadm中
ipvsadm –R <  /etc/sysconfig/ipvsadm 重载这个规则
wKioL1Yjo9CTCb1nAAJdKwhgkcE848.jpg



lvs-dr的示例:
我们用VIP和DIP,RIP在同一网段来做一下,这样简单一些
首先规划Director的网卡为eth0,采用桥接模式,只使用一块网卡
地址配置为DIP:172.16.249.123网关指向172.16.0.1;VIP 放到eth0:0这个别名上172.16.249.199
RS1的网卡采用桥接,RIP1:172.16.249.115网关指向172.16.0.1;lo:0 :VIP 172.16.249.199
RS2的网卡采用桥接,RIP2:172.16.249.124  网关指向172.16.0.1;lo:0 :VIP172.16.249.199
首先把Director的另一块VMnet2的网卡断开,然后配置DIP为172.16.249.123,
RS1和RS2的网卡改为桥接,地址为172.16.249.115和172.16.249.124,
然后从RS上测试ping172.16.0.1   ping172.16.249.123都是通的证明网络没问题了
然后配置Director上的VIP 为172.16.249.199/32,掩码使用32位,就是让它只做负载均衡器的调度用的
wKioL1YjpCqgu1oYAAM_7Kb_6-E023.jpg
这个时候RS主机ping VIP   172.16.249.199是通的
wKioL1YjpEHw54YUAAM3ksJGgRM450.jpg
然后要限制从哪个接口进的报文,要让哪个接口去响应
Diretor的这个配置不必须,但RS的必须配置
route add -host 172.16.249.199dev eth0:0
wKioL1YjpHDgzSS0AAEB75PcVEs336.jpg
然后设置RS
首先要先加这两个参数
arp_ignore=1
arp_announce=2
然后配置VIP,和限定报文从哪个接口进就从哪个接口出去
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 为了禁用彻底,把这一个也配上
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 为了禁用彻底,把这一个也配上
然后配置VIP地址
ifconfig lo:0 172.16.249.199/32 broadcast172.16.249.199 up
或者ifconfigeth0:0 172.16.249.199 netmask 255.255.255.255 broadcast 172.16.249.199 up
route add -host 172.16.249.199 dev lo:0
然后把另一台RS也这样配置
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 为了禁用彻底,把这一个也配上
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 为了禁用彻底,把这一个也配上
然后配置VIP地址
ifconfig lo:0 172.16.249.199/32 broadcast172.16.249.199 up
route add -host 172.16.249.199dev lo:0
这样RS就做好了,刚才web服务已经启动了,为了确认查看80端口是否启用
然后在Director上使用RIP地址请求进行测试
wKioL1YjpLnCkziaAACilV6IXVo186.jpg
然后把Director上的以前做的规则清掉,
wKiom1YjpKaBSOVnAAC3L1xoAfM841.jpg
然后重新配置ipvsadm规则
ipvsadm -A -t 172.16.249.199:80 -s rr
ipvsadm -a -t 172.16.249.199:80 -r172.16.249.115 -g
ipvsadm -a -t 172.16.249.199:80 -r172.16.249.124 -g
wKioL1YjpPPiJgdWAAF7QI-Wq_4247.jpg
用物理机的浏览器访问出问题了不能随时论调,隔一段时间能切换,应该是浏览器缓存问题;打开一个虚拟机测试没有问题
wKiom1YjpRqwPYkYAAHeRMbzgBk114.jpg
这样做容易出现这样的问题,在虚拟机下测试没有问题,证明这个实验是成功的,就是受网络或者浏览器的影响,


下面我们用VIP和DIP,RIP在不同网段来做一下(在物理机和Director之间加上一个路由器)
wKiom1YjpWChHwSJAAIavl2CcdM603.jpg
首先规划Director的网卡为eth0,采用桥接模式
地址配置为DIP:192.168.36.10 ;VIP 放到eth0:0这个别名上10.1.1.2
RS1的网卡VMnet2,RIP:192.168.36.8;lo:0 :VIP 10.1.1.2
RS2的网卡VMnet2,RIP:192.168.36.9;lo:0 :VIP 10.1.1.2

物理机的地址为172.16.249.100
添加一条路由
route add 10.1.1.0 mask 255.255.255.010.1.1.1
首先要有一个路由器,打开一个虚拟机打开核心转发功能,然后加入两块网卡(也可以一块网卡),类型为VMnet2,地址分别为eth1:192.168.36.1/24 ,eth1:0为10.1.1.2/24 ;一块为桥接为172.16.249.117
路由条目为
wKioL1YjptjjVMy3AAEbcmxb2FY794.jpg
一台虚拟机做Director,一块网卡,网卡类型为VMnet2,地址eth0为DIP192.168.36.10/24
eth0:0为10.1.1.2/8
在 Director上要添加一条路由
route add  default  gw 10.1.1.1
RS的IP地址为192.168.36.8和192.168.36.9默认网关指向192.168.36.1
这样物理网络就创建好了
ping测试下
在 Director上是能ping通 172.16.249.110
wKioL1Yjpjrz8yPmAAGPie14vIE449.jpg
从物理机也能ping通10.1.1.2 ,
wKiom1YjpiDB7NKWAAEnGh0Kar8645.jpg
从RS上能ping通物理机
wKiom1YjpkCBrT59AADecVrshis126.jpg
wKioL1YjpmeCkfXQAAE5IzfvxY8337.jpg

然后启动RS的80服务,就可以在Director上设置集群服务了
从Director上测试以下web服务

wKioL1YjptWSRYwOAACIp_CahdY098.jpg
然后在Director上做集群服务配置,配置如下图
wKiom1YjprDAkwpEAAFaQhara60384.jpg
然后在RS 配置这两个参数
arp_ignore=1
arp_announce=2
然后配置VIP,和限定报文从哪个接口进就从哪个接口出去
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 为了禁用彻底,把这一个也配上
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 为了禁用彻底,把这一个也配上
然后配置VIP地址
ifconfig lo:0 10.1.1.2/32  broadcast 10.1.1.2 up      
route add -host 10.1.1.2 dev lo:0
然后把另一台RS也这样配置
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 为了禁用彻底,把这一个也配上
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 >  /proc/sys/net/ipv4/conf/eth0/arp_announce 为了禁用彻底,把这一个也配上
然后配置VIP地址
ifconfig lo:0 10.1.1.2/32 broadcast 10.1.1.2 up
route add -host 10.1.1.2   devlo:0
可以写到脚本里
wKioL1YjptbzhM7LAAHWSHoT3bs030.jpg
然后执行脚本,验证一下
wKiom1YjprCAJQOFAABysgvB_ME412.jpg
wKiom1YjprGziwWpAAKw67zcJw8662.jpg
wKioL1YjptfSANm_AACeqlgr9mI398.jpg
wKiom1YjprHjsJghAAKk_SVrA80507.jpg

然后进行测试
wKioL1YjptiR-nC4AABY91K1w34058.jpg
wKiom1YjprLBgRCjAAA9g-Y5taY091.jpg

在Director上看一下,可以看到连接数是相同的
wKiom1Yjpq-AfU2fAAClil1hkBk530.jpg
从这里可以看出来,上面DIP,VIP,RIP在同一网段时,物理机浏览器测不轮调,是因为MAC地址影响的,这里面加了个路由器,隔离了一些arp的广播报文,所以物理主机没有受到影响。

这样lvs的lvs-nat和lvs-dr的实验就做完了,如有指教和建议可以留言。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-128459-1-1.html 上篇帖子: lvs的健康检测脚本 下篇帖子: lvs+heartbeat+ldirectord实现Director的高可用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表