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

[经验分享] LVS-nat架构原理与实现方案

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-6-10 08:36:25 | 显示全部楼层 |阅读模式
通过NAT实现虚拟服务器(VS/NAT)由于IPv4中IP地址空间的日益紧张和安全方面的原因,很多网络使用保留IP地址(10.0.0.0/255.0.0.0、172.16.0.0/255.128.0.0和192.168.0.0/255.255.0.0)[64, 65, 66]。这些地址不在Internet上使用,而是专门为内部网络预留的。当内部网络中的主机要访问Internet或被Internet访问时,就需要采用网络地址转换(Network Address Translation, 以下简称NAT),将内部地址转化为Internets上可用的外部地址。NAT的工作原理是报文头(目标地址、源地址和端口等)被正确改写后,客户相信它们连接一个IP地址,而不同IP地址的服务器组也认为它们是与客户直接相连的。由此,可以用NAT方法将不同IP地址的并行网络服务变成在一个IP地址上的一个虚拟服务。
VS/NAT的体系结构如图所示。在一组服务器前有一个调度器,它们是通过Switch/HUB相连接的。这些服务器提供相同的网络服务、相同的内容,即不管请求被发送到哪一台服务器,执行结果是一样的。服务的内容可以复制到每台服务器的本地硬盘上,可以通过网络文件系统(如NFS)共享,也可以通过一个分布式文件系统来提供。


QQ截图20150610083539.png


      客户通过Virtual IP Address(虚拟服务的IP地址)访问网络服务时,请求报文到达调度器,调度器根据连接调度算法从一组真实服务器中选出一台服务器,将报文的目标地址Virtual IP Address改写成选定服务器的地址,报文的目标端口改写成选定服务器的相应端口,最后将修改后的报文发送给选出的服务器。同时,调度器在连接Hash表中记录这个连接,当这个连接的下一个报文到达时,从连接Hash表中可以得到原选定服务器的地址和端口,进行同样的改写操作,并将报文传给原选定的服务器。当来自真实服务器的响应报文经过调度器时,调度器将报文的源地址和源端口改为Virtual IP Address和相应的端口,再把报文发给用户。

NAT基本架构实现


环境准备:
设备
软件环境
网络环境
virtual_server(dir)
CentOS 6.6+IPVS(ipvsadm)
eth0 : VIP : 192.168.137.128

(对外服务的IP,客户端访问的IP)
eth1 : IP:192.168.1.121
real_server_a(rsa)
CentOS 6.6+nginx(监控的服务项目)
eth0 : IP:192.168.1.118
real_server_b(rsb)
CentOS 6.6+nginx(监控的服务项目)
eth0 : IP:192.168.1.119
配置方法:
1
2
3
# 首先在rsa与rsb中启动nginx,测试是否可以正常访问
[iyunv@rsa ~]# /etc/init.d/nginx start
正在启动 nginx:                                           [确定]



QQ截图20150610083549.png
1
2
3
4
5
6
# 为了访问更加直观,我们修改一下主页
[iyunv@rsa ~]# vim /usr/share/nginx/html/index.html
This is test page,this is A.
[iyunv@rsa ~]# /etc/init.d/nginx reload
重新载入 nginx:                                           [确定]
# 我们在看一下



QQ截图20150610083557.png

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
# 当rsa与rsb的nginx都可以正常访问,我们需要将两台设备的网关修改为dir的内网的IP
[iyunv@rsa ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
UUID=779f98ef-706a-4b8c-9e78-75fa1e79fcab
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
HWADDR=00:0C:29:56:5C:C5
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
IPADDR=192.168.1.118
NETMASK=255.255.255.0
GATEWAY=192.168.1.121
DNS1=202.96.128.166
DNS2=202.96.134.133

[iyunv@rsa ~]# service network restart
正在关闭接口 eth0:                                        [确定]
关闭环回接口:                                             [确定]
弹出环回接口:                                             [确定]
弹出界面 eth0: Determining if ip address 192.168.1.118 is already in use for device eth0...
                                                           [确定]




接下来我们开始配置dir的机器,我们以脚本的形式去配置
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
[iyunv@dir ~]# vim /usr/local/sbin/lvs_nat.sh
#! /bin/bash
# director 服务器上开启路由转发功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
# 关闭icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects

# director 设置nat防火墙
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.1.0/24  -j MASQUERADE
# director设置ipvsadm
IPVSADM='/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.137.128:80 -s rr
$IPVSADM -a -t 192.168.137.128:80 -r 192.168.1.118:80 -m -w 1
$IPVSADM -a -t 192.168.137.128:80 -r 192.168.1.119:80 -m -w 1

[iyunv@dir ~]# chmod a+x !$
chmod a+x /usr/local/sbin/lvs_nat.sh
[iyunv@dir ~]# /bin/bash /usr/local/sbin/lvs_nat.sh
# 查看配置的状态
[iyunv@dir ~]# 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.137.128:80 rr
  -> 192.168.1.118:80             Masq    1      0          0
  -> 192.168.1.119:80             Masq    1      0          0




接下来我们通过VIP进行访问测试

QQ截图20150610083607.png

QQ截图20150610083613.png

运维网声明 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-75661-1-1.html 上篇帖子: LVS-dr架构原理与实现方案 下篇帖子: linux下lvs搭建负载均衡集群
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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