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

[经验分享] LVS之NAT模型架构

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-3-23 08:56:07 | 显示全部楼层 |阅读模式
LVS-NAT

一、架构平台环境
1
2
3
4
5
6
7
8
系统平台:CentOS 6.5 64bit
vmw10.0 lvs01(RS),lvs02(RS),lvs03(Director)
相关服务和专用名词定义
Director:负责调度集群的主机;也简称为调度器、分发器
VIP:Virtual IP 向外提供服务的IP;通常此IP绑定域名
DIP:与内部主机RIP通信的IP,在Director主机上
RIP:RealServer IP;内部真正提供服务的主机
CIP:客户端IP



二、LVS-NAT架构
wKiom1UNJ2SBQI9KAADU2Y9t6H8332.jpg
三、LVS-NAT模型实现负载均衡的工作方式
NAT模型其实就是通过网络地址转换来实现负载均衡的,它的工作方式几乎跟DNAT一模一样的,目前的DNAT只能转发到一个目标地址,早期的DNAT是可以将请求转发到多个目标的,在LVS出现之后就将此功能从DNAT中去掉了,下面来说说NAT模型的工作方式或者说NAT模型是怎么实现负载均衡的,根据上图,
1.用户请求VIP(也可以说是CIP请求VIP)
2,Director Server 收到用户的请求后,发现源地址为CIP请求的目标地址为VIP,那么Director Server会认为用户请求的是一个集群服务,那么Director Server 会根据此前设定好的调度算法将用户请求负载给某台Real Server ;假如说此时Director Server 根据调度算法的结果会将请求分摊到RealServer1上去,那么Director Server 会将用户的请求报文中的目标地址,从原来的VIP改为RealServer1的IP,然后再转发给RealServer1
3,此时RealServer1收到一个源地址为CIP目标地址为自己的请求,那么RealServer1处理好请求后会将一个源地址为自己目标地址为CIP的数据包通过Director Server 发出去,
4.当Driector Server收到一个源地址为RealServer1 的IP 目标地址为CIP的数据包,此时Driector Server 会将源地址修改为VIP,然后再将数据包发送给用户。
四、LVS-NAT的性能瓶颈
在LVS/NAT的集群系统中,请求和响应的数据报文都需要通过负载调度器(Director),当真实服务器(RealServer)的数目在10台和20台之间时,负载调度器(Director)将成为整个集群系统的新瓶颈。大多数Internet服务都有这样的特点:请求报文较短而响应报文往往包含大量的数据。如果能将请求和响应分开处理,即在负载调度器(Director)中只负责调度请求而响应直接(RealServer)返回给客户,将极大地提高整个集群系统的吞吐量。
五、部署环境
1、准备工作
1
2
3
4
5
6
(1)关闭所有测试主机的iptables和selinux服务
setenforce 0
service iptables stop && chkconfig iptables off
(2)HA中所有节点尽可能保证时间是一致的,方法是时间同步+任务计划同步时间;
注意:对于LB来说时间的影响不是很大,但是对于HP来说各节点之间的时间偏差不应该超出一秒钟:
ntpdate -u asia.pool.ntp.org



2、拓扑图地址规划
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
LVS Director 机器:
公网地址:vip
主机名:lvs03
网卡:eth0
vip地址:10.19.166.169
网络连接方式:vmw-bridge

私网地址:dip
dip地址:10.0.0.1/24
网络连接方式:vmw-(not use[VMnet3])

RealServer机器:
私网地址:rip1
主机名:lvs01
rip地址:10.0.0.8/24
网络连接方式:vmw-(not use[VMnet3])

私网地址:rip2
主机名:lvs01
rip地址:10.0.0.9/24
网络连接方式:vmw-(not use[VMnet3])



3、RealServer上部署httpd服务并测试
1
2
3
4
5
6
7
8
安装Apache httpd 创建测试页面,并启动httpd服务
# yum install httpd -y
# /etc/init.d/httpd start
[iyunv@lvs01]# echo "<h1>Node1.ssc.com</h1>" > /var/www/html/index.html
[iyunv@lvs02]#  echo "<h1>Node2</h1>" > /var/www/html/index.html

测试httpd服务器是否能正常打开页面
[iyunv@lvs01]# curl http://10.0.0.8[iyunv@lvs02]# curl http://10.0.0.9



4、在Director上部署ipvs服务并测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
(1)确定本机ip_vs模块是否加载,也就是是否支持lvs,2.4.2后都支持了;然后安装ipvsadm 用户操作命令
[iyunv@lvs03 ~]# grep -i "ip_vs" /boot/config-2.6.32-431.el6.x86_64
CONFIG_IP_VS=m
CONFIG_IP_VS_IPV6=y
# CONFIG_IP_VS_DEBUG is not set
CONFIG_IP_VS_TAB_BITS=12
CONFIG_IP_VS_PROTO_TCP=y    #IPVS支持哪些集群服务
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y
CONFIG_IP_VS_RR=m    #IPVS支持的十种调度算法
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m
CONFIG_IP_VS_FTP=m    #支持代理FTP协议的
CONFIG_IP_VS_PE_SIP=m

(2)安装 ipvsadm
[iyunv@lvs03 ~]# yum install ipvsadm -y

(3)添加集群服务
[iyunv@lvs03 ~]# ipvsadm -A -t 10.19.166.169:80 -s rr    #定义一个集群服务
[iyunv@lvs03 ~]# ipvsadm -a -t 10.19.166.169:80 -r 10.0.0.8 -m    #添加RealServer并指派调度
[iyunv@lvs03 ~]# ipvsadm -a -t 10.19.166.169:80 -r 10.0.0.9 -m    #添加RealServer并指派调度
[iyunv@lvs03 ~]# ipvsadm -L -n    #查看IPVS定义的规则列表
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.19.166.169:80 rr
  -> 10.0.0.8:80                  Masq    2      0          0         
  -> 10.0.0.9:80                  Masq    1      0          0

[iyunv@lvs03 ~]# cat /proc/sys/net/ipv4/ip_forward                    #查看Linux是否开启路由转发功能
0
[iyunv@lvs03 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward               #启动Linux的路由转发功能
[iyunv@lvs03 ~]# cat /proc/sys/net/ipv4/ip_forward
1



(4)测试访问http页面
wKioL1UNOUPj-nWoAAE6sBuQEDM984.jpg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(5)永久保存LVS规则并恢复
第一种方法:
[iyunv@lvs03 ~]# service ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [确定]
第二种方法:
[iyunv@lvs03 ~]# ipvsadm -S > /etc/sysconfig/ipvsadm.s1

模拟清空ipvsadm规则来恢复
[iyunv@lvs03 ~]# ipvsadm -C
[iyunv@lvs03 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[iyunv@lvs03 ~]# ipvsadm -R < /etc/sysconfig/ipvsadm.s1
[iyunv@lvs03 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.19.166.169:80 wrr
  -> 10.0.0.8:80             Masq    3      0          0         
  -> 10.0.0.9:80             Masq    1      0          0




ipvsadm用法
其实LVS的本身跟iptables很相似,而且连命令的使用格式都很相似,其实LVS是根据iptables的框架开发的,那么LVS的本身分成了两个部分,第一部分是工作在内核空间的一个IPVS的模块,其实LVS的功能都是IPVS模块实现的,,第二部分是工作在用户空间的一个用来定义集群服务的一个工具ipvsadm, 这个工具的主要作用是将管理员定义的集群服务列表传送给工作在内核空间中的IPVS模块,下面来简单的介绍下ipvsadm命令的用法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
ipvsadm组件定义规则的格式:
1.定义集群服务格式:
(1).添加集群服务:
ipvsadm -A|E -t|u|f service-address [-s scheduler]
              [-p [timeout]] [-M netmask]
-A:                  表示添加一个新的集群服务
-E:                  编辑一个集群服务
-t:                  表示tcp协议
-u:                  表示udp协议
-f:                  表示firewall-Mark,防火墙标记
service-address:     集群服务的IP地址,即VIP
-s                    指定调度算法
-p                    持久连接时长,如#ipvsadm -Lcn ,查看持久连接状态
-M                    定义掩码
ipvsadm -D -t|u|f service-address      删除一个集群服务
ipvsadm -C                             清空所有的规则
ipvsadm -R                             重新载入规则
ipvsadm -S [-n]                        保存规则
2.向集群服务添加RealServer规则:
(1).添加RealServer规则
ipvsadm -a|e -t|u|f service-address -r server-address
              [-g|i|m] [-w weight]
-a                 添加一个新的realserver规则
-e                 编辑realserver规则
-t                 tcp协议
-u                 udp协议
-f                 firewall-Mark,防火墙标记
service-address    realserver的IP地址
-g                 表示定义为LVS-DR模型
-i                 表示定义为LVS-TUN模型
-m                 表示定义为LVS-NAT模型
-w                 定义权重,后面跟具体的权值
ipvsadm -d -t|u|f service-address -r server-address          --删除一个realserver
ipvsadm -L|l [options]                                       --查看定义的规则
如:#ipvsadm -L -n  
ipvsadm -Z [-t|u|f service-address]                          --清空计数器



lvs的10种调度算法
1
2
3
4
5
6
7
8
9
10
11
12
13
LVS Scheduling Method LVS的调度方法:
1.Fixed Scheduling Method  静态调服方法
(1).RR     轮询
(2).WRR    加权轮询
(3).DH     目标地址hash
(4).SH     源地址hash
2.Dynamic Scheduling Method 动态调服方法
(1).LC     最少连接
(2).WLC    加权最少连接
(3).SED    最少期望延迟
(4).NQ     从不排队调度方法
(5).LBLC   基于本地的最少连接
(6).LBLCR  带复制的基于本地的最少连接





运维网声明 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-49588-1-1.html 上篇帖子: LVS负载均衡集群之DR模式 下篇帖子: LVS、Nginx和HAProxy负载均衡区别 模型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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