三、LVS NAT 模式搭建【扩展】
三台服务器A、B、C:
1、 A: load balancer
(调度器dir,分发器) 在虚拟机设置里添加新网卡并设为仅主机模式连接,查看IP
内网网卡:192.168.31.128,网关保持不变(192.168.31.2)
外网网卡:192.168.229.128,不用设置,重启网络即可,此地址跟网卡设置里看到的地址保持一致
代码语言:javascript复制[root@xulei.com ~]# setenforce 0 # 关闭selinux
[root@xulei.com ~]# systemctl stop firewalld # 停止firewalld
[root@xulei.com ~]# systemctl disable firewalld # 关闭firewalld
[root@xulei.com ~]# yum install -y iptables-services # 安装iptables
[root@xulei.com ~]# systemctl enable iptables # 添加iptables服务
[root@xulei.com ~]# service iptables start # 启动iptables服务
[root@xulei.com ~]# iptables -F # 清空iptables规则
[root@xulei.com ~]# service iptables save # 保存空规则
1、创建 LVS 的 NAT 规则脚本
代码语言:javascript复制[root@xulei.com ~]# vim /usr/local/sbin/lvs_nat.sh
#! /bin/bash
# director 服务器上开启路由转发功能
[root@xulei.com ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
# 关闭icmp的重定向,开启icmp则无法将数据包转发至real server上,也无法返回
[root@xulei.com ~]# echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
[root@xulei.com ~]# echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
[root@xulei.com ~]# echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
[root@xulei.com ~]# echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
# director 设置nat防火墙
[root@xulei.com ~]# iptables -t nat -F 清空所有规则
[root@xulei.com ~]# iptables -t nat -X 清空所有链
[root@xulei.com ~]# iptables -t nat -A POSTROUTING -s 192.168.31.0/24 -j MASQUERADE 增加路由转发规则
# director设置ipvsadm变量
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C # 清空所有规则
$IPVSADM -A -t 192.168.229.128:80 -s wlc -p 3 # 保持登陆时限persistent 设为0会报错
# 访问规则,-A指定转发模式,-t指定分发器ip, -s指定调度算法(rr,wrr,wlc,lc)-p登陆保持时限,3秒
$IPVSADM -a -t 192.168.229.128:80 -r 192.168.31.129:80 -m -w 1
# 转发规则,-a指定转发规则 -t指定director ip,-r指定real server ip -m指定NAT模式(masquerade) -w指定权重为1
$IPVSADM -a -t 192.168.229.128:80 -r 192.168.31.130:80 -m -w 1
# 转发规则,-a指定转发规则 -t指定director ip,-r指定real server ip -m指定NAT模式(masquerade) -w指定权重为1
2、给脚本设权
代码语言:javascript复制[root@xulei.com ~]# chmod 755 /usr/local/sbin/lvs_nat.sh
3、执行脚本
代码语言:javascript复制[root@xulei.com ~]# sh /usr/local/sbin/lvs_nat.sh
排错:当给主规则的登陆保持时限(persistent)设为0时,执行脚本会报错
代码语言:javascript复制[root@xulei.com ~]# /usr/local/sbin/lvs_nat.sh
invalid timeout value `0' specified
Memory allocation problem
2、B: real server
(web服务器) 内网网卡:192.168.31.129 网关改为129.168.31.128
安装nginx,并启动,在默认主页里写入,real server 1 关闭selinux,清空防火墙规则
3、C: real server
(web服务器) 内网网卡:192.168.31.130 网关改为129.168.31.128
安装nginx,并启动,在默认主页里写入,real server 2 关闭selinux,清空防火墙规则
4、测试
浏览器里访问192.168.229.128,(A主机外网网卡地址)多刷新几次看结果,服务器的切换。
浏览器上因为有本地缓存的原因,虽已经设定了登陆保持时限为1秒,但每次刷新都会保持在real server 2主机上。可以在调度机里用 curl 192.168.229.128 测试访问,调度算法采用rr,效果更明显。
1、用 ipvsadm 命令查看转发规则
代码语言:javascript复制[root@xulei.com ~]# 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.229.128:80 wlc persistent 1
-> 192.168.31.129:80 Masq 1 0 0
-> 192.168.31.130:80 Masq 1 0 0
2、查看 iptables nat 链的转发规则
代码语言:javascript复制[root@xulei.com ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 26 packets, 4015 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 2 packets, 404 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 1 packets, 328 bytes)
pkts bytes target prot opt in out source destination
7 532 MASQUERADE all -- * * 192.168.31.0/24 0.0.0.0/0