NAT模式
client -> vs(转换ip) -> Rs ->vs(转换ip) ->client
- 在一组服务器前有一个调度器,它们是通过Switch/HUB相连接的。这些服务器提供相同的网络服务、相同的内容,即不管请求被发送到哪一台服务器,执行结果是一样的。
- VS/NAT 的优点是服务器可以运行任何支持 TCP/IP 的操作系统,它只需要一个 IP 地址配置在调度器上,
服务器组可以用私有的 IP 地址。 - 缺点是它的伸缩能力有限, 当服务器结点数目升到 20 时,调度器本身有可能成为系统的新瓶颈,因为在 VS/NAT 中请求和响应报文都需要通过负载调度器。
主机环境
主机名 | IP |
---|---|
server1 | 172.25.254.1 |
server2 | 172.25.254.2 |
server3 | 172.25.254.3 |
配置NAT模式的LVS:
- 在server1上加一块网卡eth1,给该网卡加上外网ip,激活网卡
[root@server1 ~]# ip addr show
[root@server1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
ONBOOT="yes"
BOOTPROTO="static"
IPADDR=172.25.254.1
PREFIX=24
[root@server1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
ONBOOT="yes"
BOOTPROTO="static"
IPADDR=172.25.1.1
PREFIX=24
[root@server1 ~]# /etc/init.d/network restart
- 添加NAT模式策略
[root@server1 ~]# ipvsadm -C ##清除策略
[root@server1 ~]# ipvsadm -C
[root@server1 ~]# ipvsadm -A -t 172.25.1.1:80 -s rr
[root@server1 ~]# ipvsadm -a -t 172.25.1.1:80 -r 172.25.254.2:80 -m
[root@server1 ~]# ipvsadm -a -t 172.25.1.1:80 -r 172.25.254.3:80 -m
[root@server1 ~]# /etc/init.d/ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
[root@server1 ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.1.1:http rr
-> server2:http Masq 1 0 0
-> server3:http Masq 1 0 0
- 开启路由机制
[root@server1 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@server1 ~]# sysctl -p ##刷新机制
net.ipv4.ip_forward = 1
- 加载nat模块:modprobe iptable_nat
注:如果不加载此模块,也可以在第一次访问时成功,但是会在再次访问时出现延迟过长,或访问超时现象
[root@server1 ~]# modprobe iptable_nat
- 配置server2与server3
[root@server2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
[root@server2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
ONBOOT="yes"
BOOTPROTO="static"
IPADDR=172.25.254.2
PREFIX=24
GATEWAY=172.25.254.1
[root@server2 ~]# /etc/init.d/network restart
Shutting down interface eth0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: Determining if ip address 172.25.254.2 is already in use for device eth0...
[ OK ]
[root@server2 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.25.254.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 172.25.254.1 0.0.0.0 UG 0 0 0 eth0
测试