LVS-NAT模式的实现
一、架构如下:
二、安装过程
1、配置“互联网”服务器
1.1、修改服务器ip为192.168.10.101/24
- [root@internet ~]# ip a
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
- 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 group default qlen 1000
- link/ether 00:0c:29:a8:6f:21 brd ff:ff:ff:ff:ff:ff
- inet 192.168.10.101/24 brd 192.168.10.255 scope global noprefixroute eth0
- valid_lft forever preferred_lft forever
- inet6 fe80::20c:29ff:fea8:6f21/64 scope link
- valid_lft forever preferred_lft forever
1.2、修改服务器的主机名为“internet”(可选)
- [root@internet ~]# hostnamectl set-hostname internet
2、配置LVS服务器
2.1、安装ipvsadm管理工具
- [root@lvs ~]# yum -y install ipvsadm
2.2、配置eth1网卡(模拟连接外网)
2.2.1、添加一块网卡,选择“仅主机模式”
2.2.2、配置eth1网卡地址
- [root@lvs /]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
- DEVICE=eth1
- NAME=eth1
- BOOTPROTO=none
- ONBOOT=yes
- IPADDR=192.168.10.100
- PREFIX=24
2.2.3、启用ip_forward功能
- [root@lvs /]# echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
- #使其生效
- [root@lvs /]# sysctl -p
3、配置RS服务器
3.1、安装apache、mysql、mod_ssl服务(验证功能作用)
- [root@rs1 ~]# yum -y install httpd mysql-server mod_ssl
3.2、修改eth0网卡的网关配置,指向LVS服务器的DIP(两台RS服务器都需要修改配置)
- [root@rs1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
- DEVICE=eth0
- NAME=eth0
- BOOTPROTO=none
- ONBOOT=yes
- IPADDR=10.0.0.67
- PREFIX=24
- GATEWAY=10.0.0.57
3.3、启动httpd服务(两台RS服务器都需要安装)
- [root@rs1 ~]# systemctl enable --now httpd
- Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
3.4、配置一下显示页面(特意配置不同,生产中应是相同的)
- [root@rs1 ~]# cat /var/www/html/index.html
- rs1 10.0.0.67
RS2服务类似配置
效果如下:
- [root@lvs ~]# curl 10.0.0.67
- rs1 10.0.0.67
- [root@lvs ~]# curl 10.0.0.77
- rs2 10.0.0.77
4、(重点)配置LVS服务器
4.1、创建集群,使用轮询的调度算法
- [root@lvs ~]# ipvsadm -A -t 192.168.10.100:80 -s rr
- #查看当前集群
- [root@lvs ~]# 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.10.100:80 rr
4.2、添加RS服务到集群中
- [root@lvs ~]# ipvsadm -a -t 192.168.10.100:80 -r 10.0.0.67:80 -m
- [root@lvs ~]# ipvsadm -a -t 192.168.10.100:80 -r 10.0.0.77:80 -m
- #查看当前集群
- [root@lvs ~]# 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.10.100:80 rr
- -> 10.0.0.67:80 Masq 1 0 0
- -> 10.0.0.77:80 Masq 1 0 0
4.3、验证功能
- [root@internet ~]# curl 192.168.10.100
- rs2 10.0.0.77
- [root@internet ~]# curl 192.168.10.100
- rs1 10.0.0.67
- [root@internet ~]# curl 192.168.10.100
- rs2 10.0.0.77
- [root@internet ~]# curl 192.168.10.100
- rs1 10.0.0.67
访问成功,并且实现了访问轮询的效果。
三、思考
1、当“互联网”服务器去访问后端服务时,后端服务器看到的请求来自于哪个IP?
答:LVS-NAT模型采用的是DNAT,只对目标IP做地址转换,不对源IP做任何处理,因此后端服务器可以正常看到实际的“互联网”服务器的IP。
2、通讯过程中,“互联网”机器是直接与LVS服务器建立TCP连接,还是和后端服务器建立TCP连接?
2.1、在RS创建一个大文件
- [root@rs1 ~]# dd if=/dev/zero of=/var/www/html/f.img bs=1M count=100
- 100+0 records in
- 100+0 records out
- 104857600 bytes (105 MB) copied, 0.41985 s, 250 MB/s
2.2、“互联网”机器模拟去下载RS端的文件
- [root@internet ~]# wget --limit-rate=100k http://192.168.10.100/f.img
2.3、查看LVS端口开启情况
[root@lvs ~]# ss -nt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 36 10.0.0.57:22 10.0.0.1:49851
2.4、查看RS服务器端口开启情况
- [root@rs1 ~]# ss -nt
- State Recv-Q Send-Q Local Address:Port Peer Address:Port
- ESTAB 0 36 10.0.0.67:22 10.0.0.1:61068
- ESTAB 0 0 10.0.0.67:22 10.0.0.1:65352
- ESTAB 0 386824 ::ffff:10.0.0.67:80 ::ffff:192.168.10.101:10659
2.5、查看“互联网”服务器
- [root@internet ~]# ss -nt
- State Recv-Q Send-Q Local Address:Port Peer Address:Port
- ESTAB 0 0 192.168.10.101:22 192.168.10.1:56282
- ESTAB 0 0 192.168.10.101:22 192.168.10.1:49944
- ESTAB 240888 0 192.168.10.101:10659 192.168.10.100:80
上述实验,可见LVS在“互联网”机器与后端服务器通讯过程中,并不参与握手过程。
因此本题答案为:
通讯过程中,“互联网”服务器和后端服务器建立TCP连接。
3、通讯过程中,LVS是否监听80端口?
答:不会。在本实验中,LVS相当于路由器角色,并不会监听到服务的80端口。真正监听80服务端口的,是RS服务器。
四、拓展
1、ipvsadm规则保存
- [root@lvs ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
- [root@lvs ~]# cat /etc/sysconfig/ipvsadm
- -A -t 192.168.10.100:80 -s rr
- -a -t 192.168.10.100:80 -r 10.0.0.67:80 -m -w 1
- -a -t 192.168.10.100:80 -r 10.0.0.77:80 -m -w 1
2、ipvsadm规则清空
- [root@lvs ~]# ipvsadm -C
- [root@lvs ~]# ipvsadm -Ln
- IP Virtual Server version 1.2.1 (size=4096)
- Prot LocalAddress:Port Scheduler Flags
- -> RemoteAddress:Port Forward Weight ActiveConn InActConn
3、ipvsadm规则导入
- [root@lvs ~]# ipvsadm-restore -n < /etc/sysconfig/ipvsadm
- [root@lvs ~]# 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.10.100:80 rr
- -> 10.0.0.67:80 Masq 1 0 0
- -> 10.0.0.77:80 Masq 1 0 0