今天给伙伴们分享一下LVS 负载均衡 NAT 模式,希望看了有所收获。
我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!
如果伙伴们看了文档觉得有用,欢迎大家关注我的公众号,获取相关文档。爱运维,爱生活。
一、LVS NAT 模式介绍
- Virtual Server via NAT(VS-NAT): 用地址翻译实现虚拟服务器。地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。优点是节省IP 地址,能对内部进行伪装;缺点是效率低,因为返回给请求方的流量经过转换器。
二、LVS NAT 模式工作流程
-
当用户请求到达 Director Server,此时请求的数据报文会先到内核空间的 PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
-
PREROUTING 检查发现数据包的目标IP是本机,将数据包送至 INPUT 链
-
IPVS 比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至 POSTROUTING 链。 此时报文的源 IP 为 CIP,目标 IP 为 RIP
-
POSTROUTING 链通过选路,将数据包发送给 Real Server
-
Real Server 比对发现目标为自己的IP,开始构建响应报文发回给 Director Server。 此时报文的源 IP 为 RIP,目标 IP 为 CIP
-
Director Server 把RS来到响应包,通过 FORWORD 转发给 client 在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP
三、LVS NAT 模式图解
四、LVS NAT 模式特点
- RS 应该使用私有地址,RS 的网关必须指向 DIP。
- DIP 和 RIP 必须在同一个网段内。
- 支持端口映射。
- RS 可以使用任意操作系统。
- 请求和响应报文都需要经过 Director Server,高负载场景中,Director Server 易成为性能瓶颈。
五、LVS NAT 模式实践
1、规划网络结构
角色 | 主机名 | 网络模式 | 外网 IP 地址 | 内网 IP 地址 | 网关 |
---|---|---|---|---|---|
director lb | lvs | nat 模式/仅主机 | 192.168.152.166 | 192.168.78.128(不设置网关) | 192.168.152.2 |
real server1 | web1 | 仅主机模式 | 192.168.78.129 | 192.168.78.128 | |
real server2 | web2 | 仅主机模式 | 192.168.78.130 | 192.168.78.128 |
2、安装 web 服务器(此处以nginx为例)
- 注意: 两台都需要安装(实验时暂时使用nat模式)
[root@web1 ~]# yum -y install epel-release.noarch
[root@web1 ~]# yum -y install nginx
[root@web1 ~]# echo rs1 > /usr/share/nginx/html/index.html
[root@web1 ~]# systemctl restart nginx.service
[root@web2 ~]# yum -y install epel-release.noarch
[root@web2 ~]# yum -y install nginx
[root@web2 ~]# echo rs1 > /usr/share/nginx/html/index.html
[root@web2 ~]# systemctl restart nginx.service
3、配置 LVS 网络
1、负载均衡器要求
- 两块网卡,一块连接外网网络(nat 模式),一块连接(仅主机模式)
[root@edenluo-lvs-lb ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE