VS/NAT (Virtual Server via Network Address Translation)
即网络地址翻转技术实现虚拟服务器。当请求来到时,Diretor server上处理的程序将数据报文中的目标地址(即虚拟IP地址)改成具体的某台Real Server,端口也改成Real Server的端口,然后把报文发给Real Server。Real Server处理完数据后,需要返回给Diretor Server,然后Diretor server将数据包中的源地址和源端口改成VIP的地址和端口,最后把数据发送出去。由此可以看出,用户的请求和返回都要经过Diretor Server,如果数据过多,Diretor Server肯定会不堪重负。
详细原理部分请看本作者博文
https://blog.csdn.net/zhaoliang_Guo/article/details/96862679
准备工作
准备四个rhel7.3虚拟机,设置ip和hostname如下,并搭建好yum源
server1配置双网卡
IP | hostname |
---|---|
1.1.1.1 | server1 |
172.25.254.1 | server1 |
172.25.254.2 | server2 |
172.25.254.3 | server3 |
1.1.1.4 | server4 |
把server1作为DS(调度器),server4作为客户端
lvs/NAT模式的搭建
在DS(即server1端)
1.配置双网卡
2.设置vip
[root@server1 ~]# cd /etc/sysconfig/network-scripts/
[root@server1 network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@server1 network-scripts]# vim ifcfg-eth1
[root@server1 network-scripts]# systemctl restart network
3.在server1上配置ipvsadm策略
先将搭DR模式是编写的策略删掉
[root@server1 network-scripts]# ipvsadm -C
[root@server1 network-scripts]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@server1 network-scripts]# ipvsadm -A -t 1.1.1.1:80 -s rr
[root@server1 network-scripts]# ipvsadm -a -t 1.1.1.1:80 -r 172.25.254.2:80 -m
[root@server1 network-scripts]# ipvsadm -a -t 1.1.1.1:80 -r 172.25.254.3:80 -m
[root@server1 network-scripts]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 1.1.1.1:80 rr
-> 172.25.254.2:80 Masq 1 0 0
-> 172.25.254.3:80 Masq 1 0 0
[root@server1 network-scripts]# ipvsadm-save > /etc/sysconfig/ipvsadm
4.在server1端开启路由转换功能
[root@server1 network-scripts]# vim /etc/sysctl.conf
写入net.ipv4.ip_forward = 1
[root@server1 network-scripts]# sysctl -p
net.ipv4.ip_forward = 1
在server2和server3端
1.删除在DR模式是添加的vip
[root@server2 ~]# ip addr del 172.25.254.100/24 dev eth0
[root@server2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:a9:28:69 brd ff:ff:ff:ff:ff:ff
inet 172.25.254.2/24 brd 172.25.254.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fea9:2869/64 scope link
valid_lft forever preferred_lft forever
2.设置网关
添加server1的网卡eth0的ip为网关
[root@server2 network-scripts]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
[root@server2 network-scripts]# systemctl restart network
[root@server2 network-scripts]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.25.254.1 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
172.25.254.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
在server3做相同操作
在server2和server3端配置httpd
注意:博主在作DR模式是已经配置了httpd,如果没有的话,在server2和server3端需要配置httpd
客户端server4
1.设置ip和网关
网关设置为server1的vip即1.1.1.1
在客户端测试
curl 1.1.1.1