a. 当用户请求到达 Director Server ,此时请求的数据报文会先到内核空间的 PREROUTING 链。 此时报文的源 IP 为 CIP ,目标 IP 为 VIP ;
b. PREROUTING 检查发现数据包的目标IP是本机,将数据包送至 INPUT 链;
c. IPVS 比对数据包请求的服务是否为集群服务,若是,修改数据包的目标 IP 地址为后端服务器 IP ,然后将数据包发至 POSTROUTING 链。 此时报文的源 IP 为 CIP ,目标 IP 为 RIP ;
d. POSTROUTING 链通过选路,将数据包发送给 Real Server ;
e. Real Server 比对发现目标为自己的 IP ,开始构建响应报文发回给 Director Server ,此时报文的源 IP 为 RIP ,目标 IP 为 CIP ;
f. Director Server 在响应客户端前,此时会将源 IP 地址修改为自己的 VIP 地址,然后响应给客户端。 此时报文的源 IP 为 VIP ,目标 IP 为 CIP 。
DS(Director Server):内网DIP 192.168.25.136 & 外网VIP 192.168.43.131
RS1(Real Server):内网RIP 192.168.25.137
RS2(Real Server):内网RIP 192.168.25.138
Client:外网CIP 192.168.43.132
[root@136 ~]# 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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:c9:ac:45 brd ff:ff:ff:ff:ff:ff
inet 192.168.25.136/24 brd 192.168.25.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::a14f:b82c:230e:59d9/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:c9:ac:4f brd ff:ff:ff:ff:ff:ff
inet 192.168.43.131/24 brd 192.168.43.255 scope global noprefixroute dynamic ens36
valid_lft 1491sec preferred_lft 1491sec
inet6 fe80::771a:de51:3b:1b45/64 scope link noprefixroute
valid_lft forever preferred_lft forever
配置路由转发功能(实现NAT)
#方法一(重启之后自动恢复默认0):
[root@136 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@136 ~]# cat /proc/sys/net/ipv4/ip_forward
1
//恢复
[root@136 ~]# echo 0 > /proc/sys/net/ipv4/ip_forward
[root@136 ~]# cat /proc/sys/net/ipv4/ip_forward
0
#方法二(重启之后自动恢复默认0):
[root@136 ~]# sysctl -w net.ipv4.ip_forward=1
[root@136 ~]# cat /proc/sys/net/ipv4/ip_forward
1
//恢复
[root@136 ~]# sysctl -w net.ipv4.ip_forward=0
[root@136 ~]# cat /proc/sys/net/ipv4/ip_forward
#方法三(永久生效):
[root@136 ~]# echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
[root@136 ~]# sysctl -p
[root@136 ~]# cat /proc/sys/net/ipv4/ip_forward
1
//恢复
[root@136 ~]# echo net.ipv4.ip_forward=0 >> /etc/sysctl.conf
[root@136 ~]# sysctl -p
[root@136 ~]# cat /proc/sys/net/ipv4/ip_forward
0
RS1
手工添加网关为DS内网地址
[root@137 ~]# nmcli connection show #查看网卡
NAME UUID TYPE DEVICE
ens33 be90387d-bd23-4ab4-944c-cbd722d5c952 ethernet ens33
[root@137 ~]# nmcli connection modify ens33 ipv4.gateway 192.168.25.136
[root@137 ~]# nmcli connection up ens33
RS2
手工添加网关为DS内网地址
[root@138 ~]# nmcli connection show #查看网卡
NAME UUID TYPE DEVICE
ens33 be90387d-bd23-4ab4-944c-cbd722d5c952 ethernet ens33
[root@137 ~]# nmcli connection modify ens33 ipv4.gateway 192.168.25.136
[root@137 ~]# nmcli connection up ens33
安装LVS工具包
[root@136 ~]# yum install ipvsadm -y
ipvsadm参数说明
[root@localhost ~]# ipvsadm –h
-A 添加虚拟服务器
-t 设置群集地址(VIP,Virtual IP)
-s 指定负载调度算法
-a 添加真实服务器
-d 删除真实服务器
-r 指定真实服务器(Real Server)的地址
-m 使用NAT模式
-g 使用DR模式
-i 使用TUN模式
-w 为节点服务器设置权重,默认为1
手工执行配置添加LVS服务
[root@136 ~]# ipvsadm -A -t 192.168.43.131:80 -s rr
[root@136 ~]# 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.43.131:80 rr
绑定RS
[root@136 ~]# ipvsadm -a -t 192.168.43.131:80 -r 192.168.25.137:80 -m
[root@136 ~]# ipvsadm -a -t 192.168.43.131:80 -r 192.168.25.138:80 -m
[root@136 ~]# 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.43.131:80 rr
-> 192.168.25.137:80 Masq 1 0 0
-> 192.168.25.138:80 Masq 1 0 0
使用for循环访问VIP
[root@139 ~]# for ((i=1;i<=10;i++)); do curl 192.168.43.131; done
web2 test page, ip: 192.168.25.138
web1 test page, ip: 192.168.25.137
web2 test page, ip: 192.168.25.138
web1 test page, ip: 192.168.25.137
web2 test page, ip: 192.168.25.138
web1 test page, ip: 192.168.25.137
web2 test page, ip: 192.168.25.138
web1 test page, ip: 192.168.25.137
web2 test page, ip: 192.168.25.138
web1 test page, ip: 192.168.25.137
#可以清晰看出每一个RS轮流被访问
DS上查看
[root@136 ~]# 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.43.131:80 rr
-> 192.168.25.137:80 Masq 1 0 5
-> 192.168.25.138:80 Masq 1 0 5
# 可以清晰看出末尾平均每个RS都被访问了5次