• LVS:NAT模式详解


    一、工作原理


    1.1 数据流向

    LVS-NAT模型是利用了NAT的特性,NAT为”Network Address Translation”的缩写,译为”网络地址转换”。

    LVS-NAT模型的结构示意图:
    在这里插入图片描述
    从上图可以看出,LVS服务器是直接面向客户端的,所以,LVS服务器必须有一个公网IP,才能服务在互联网上,我们称配置在LVS服务器上的公网IP为VIP,即Virtual IP,在LVS-NAT模型中,负载均衡集群内部的主机都是通过内网IP通讯的,也就是说,LVS-NAT集群内部的主机需要在相同网段的内网中,而集群中的每个主机均配置有一个内网IP,LVS服务器当然也属于负载均衡集群内部的主机,所以它也需要配置一个内网IP,我们称配置在LVS服务器上的内网IP为DIP,可以理解为Director IP,也就是负责调度的导演IP,而每个RealServe上都有一个与DIP在同一网段的内网IP,我们称配置在RealServer上的内网IP为RIP,我们将客户端的IP简称为Client IP ,即CIP。

    既然LVS-NAT模型是利用了”网络地址转换”的特性,那么,在整个过程中,报文的IP到底发生了怎样的转换呢?通过如下示意图,即可明白报文IP的 转换过程,为了使示意图更加简洁明了,图中只画出了一个RealServer,同时,我们可以配合图下方的描述,来理解报文中IP被转换的整个过程。
    在这里插入图片描述
    正如上图所示,客户端的请求会发往LVS主机,此时,客户端请求报文的源IP为CIP,目标IP为LVS的VIP,当LVS收到客户端的请求报文时,会将请求报文中的目标IP修改为后端某个RealServer的RIP,就以上图为例,当LVS收到客户端的请求报文时,会将报文中的VIP修改为RIP1或者RIP2,具体将VIP修改为哪个RealServer的RIP,取决于LVS使用的具体算法,最好理解的负载均衡算法就是轮询算法了,用大白话说,轮询算法就是如果这次将报文的目标IP修改为RIP1,那么下次就将目标IP修改为RIP2,再下次就再将目标IP修改为RIP1,以此类推,当然,除了轮询算法,还有很多别的算法可供我们选择,但是此处我们暂时先不考虑这么多,当客户端请求报文的目标IP被修改为对应的RIP后,请求报文的源IP为CIP,目标IP已经改为RIP,那么报文自然会被LVS转发到对应的RealServer中,当RealServer收到对应的请求报文时,会发现报文的目标IP就是自己的RIP,于是就会接收报文,处理后进行响应,因为RealServer收到请求报文时,源IP为CIP,目标IP为RIP,所以RealServer在进行响应时,响应报文的源IP则为RIP,目标IP则为CIP,但是CIP对于RealServer来说肯定不在一个网络内,因为CIP是一个公网IP,所以,我们要将所有RealServer的网关指向DIP,当RealServer产生响应报文时,会将响应报文发往网关DIP,而DIP就是LVS的内网IP,当LVS收到对应的响应报文时,响应报文的源IP为RIP,目标IP为CIP,此时,LVS会将响应报文的源IP修改为VIP,修改后的响应报文的源IP为VIP,目标IP为CIP,于是响应报文被发往客户端,客户端则会收到响应报文,其实上述整个过程是一个DNAT的过程,所以,此种LVS模型被称之为LVS-NAT模型。

    1.2 功能实现的依赖

    LVS由两部分组成,ipvs 与 ipvsadm,好比iptables与netfilter的关系,ipvs是LVS的核心实现,但是不能直接操作ipvs,需要借助管理工具ipvsadm定义LVS集群规则,ipvs再根据我们定义好的规则进行工作。

    ipvsadm:LVS管理工具,管理员通过 ipvsadm 定义或管理集群规则。

    ipvs:LVS 核心实现,根据定义好的集群规则进行工作。

    其实,ipvs 是与 netfilter 结合在一起使用的,2.4.X版本以后的内核中,ipvs 作为 netfilter 的模块存在。
    在这里插入图片描述当客户端访问服务时,会访问VIP+端口,所以,客户端的请求报文会发往调度器,请求报文会先经过PREROUTING链,然后进行路由判断,由于此刻报文的目标IP为VIP,而VIP对于调度器来说,就是本身的IP,所以报文会经过INPUT链,此刻,如果IPVS发现报文访问的VIP+端口与我们定义的LVS集群规则相符,ipvs则会根据定义好的规则与算法,将报文直接发往POSTROUTING链,然后报文则会发出,最后到达后端的RealServer中。

    二、配置部署


    2.1 LVS Server

    step1 开启内核的核心转发功能

    # LVS 主要负责分发请求到后端主机,所以它需要转发报文,需要将ip_foward的值设置为1,才能够转发报文到别的主机。
    
    # 临时生效
    echo 1 > /proc/sys/net/ipv4/ip_forward
    或
    sysctl -w net.ipv4.ip_forward=1
    
    # 永久生效
    vim /etc/sysctl.conf
    net.ipv4.ip_forward=1	# 添加或修改
    
    systemctl restart network
    或
    sysctl -p
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    step2 安装 ipvsadm 命令

    yum -y install ipvsadm
    
    • 1

    step3 添加规则

    • 创建对外暴露的前端lvs集群服务
    ipvsadm -A -t VIP:PORT -s rr
    	-A 表示添加一条虚拟服务器记录,即创建一个LVS集群。
    	-t 表示创建LVS集群服务为tcp服务。
    	VIP:PORT 表示LVS服务对外暴露的IP和端口号。
    	-s 为Scheduling(调度)之意,用于指定具体的调度算法,可用算法有 rr 、wrr 、lc 、wlc 、lblc 、lblcr 、dh 、sh 、sed 、nq ,而rr算法就是Round-Robin的缩写,表示轮询算法。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 为lvs集群服务添加后端的realserver
    ipvsadm -a -t VIP:PORT -r RIP1:PORT -m
    	-a 表示添加一个realserver 到lvs集群中。
    	-t 表示lvs集群服务为tcp服务,"VIP:PORT"用户关联前端的lvs集群服务。
    	-r 表示要添加的realserver的IP及服务端口号。
    	-m 表示LVS集群的工作模式为LVS-NAT模式,当然,如果想要LVS工作于其他模式,那么在添加Realserver时,则不能使用-m选项,而需使用其他对应选项。
    
    ... ... 如果有多台realserver只要将命令中的RIP替换为具体的realserverIP即可。
    ipvsadm -a -t VIP:PORT -r RIP2:PORT -m
    ipvsadm -a -t VIP:PORT -r RIPN:PORT -m
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    step4 保存规则

    • 永久保存规则
    # 查看规则
    ipvsadm -Ln
    # 保存规则
    ipvsadm-save -n > /etc/sysconfig/ipvsadm
    # 服务开机自启动
    systemctl restart ipvsadm
    systemctl enable ipvsadm
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.2 RealServer

    step1 关闭防火墙

    systemctl stop firewalld
    systemctl disable firewalld
    
    • 1
    • 2

    step2 启动需要被反向代理的服务
    step3 网关指向 LVS 的 DIP

    三、常用命令

    -A/--add-service 添加一条新的虚拟服务
    -E/--edit-service 编辑虚拟服务
    -D/--delete-service 删除虚拟服务
    -C/--clear 清除所有的虚拟服务规则
    -R/--restore 恢复虚拟服务规则
    -S/--save 保存虚拟服务器规则
    -a/--add-server 在一个虚拟服务中添加一个新的真实服务器
    -e/--edit-server 编辑某个真实服务器
    -d/--delete-server 删除某个真实服务器
    -L/-l/--list 显示内核中的虚拟服务规则
    -Z/--zero 将转发消息的统计清零
    --set tcp/tcpfin/udp 配置三个超时时间(tcp/tcpfin/udp)
    --start-daemon 启动同步守护进程。
    --stop-daemon 停止同步守护进程 
    -h/--help 显示帮助信息
    -t/--tcp-service service-address TCP协议的虚拟服务
    -u/--udp-service service-address UDP协议的虚拟服务
    -f/--fwmark-service fwmark说明是经过iptables 标记过的服务类型。
    -s/--scheduler scheduler 使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc.
    -p/--persistent [timeout] 持久稳固的服务。
    -M/--netmask指定客户地址的子网掩码
    -r/--real-serverserver-address 真实的服务器
    -g/--gatewaying指定LVS 的工作模式为直接路由模式
    -i/--ipip指定LVS 的工作模式为隧道模式 
    -m/--masquerading指定LVS 的工作模式为NAT 模式 
    -w/--weightweight真实服务器的权值 
    --mcast-interface interface指定组播的同步接口 
    -c/--connection显示ipvs中目前存在的连接
    -6: 如果fwmark用的是ipv6地址需要指定此选项。

    管理虚拟服务:

    • 添加一个虚拟服务192.168.1.100:80,使用轮询算法:
    ipvsadm -A -t 192.168.1.100:80 -s rr
    
    • 1
    • 修改虚拟服务的算法为加权轮询:
    ipvsadm -E -t 192.168.1.100:80 -s wrr
    
    • 1
    • 删除虚拟服务:
    ipvsadm -D -t 192.168.1.100:80
    
    • 1

    管理真实服务:

    • 添加一个真实服务器192.168.1.123,使用DR模式,权重2:
    ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.123 -g -w 2
    
    • 1
    • 修改真实服务器的权重:
    ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.123 -g -w 5
    
    • 1
    • 删除真实服务器:
    ipvsadm -d -t 192.168.1.100:80 -r 192.168.1.123
    
    • 1

    查看统计:

    • 查看当前配置的虚拟服务和各个RS的权重:
    ipvsadm -Ln
    
    • 1
    • 查看当前ipvs模块中记录的连接(可用于观察转发情况):
    ipvsadm -lnc
    
    • 1
    • 查看ipvs模块的转发情况统计:
    ipvsadm -Ln --stats | --rate
    
    • 1
  • 相关阅读:
    自然语言处理技术之词向量:GloVe单词表示的全局向量(glove.840B.300d、glove.6B)
    Business Objects单一报表升级为全套商业智能BI产品,探索更多平台与行业
    centos安装指定版本docker
    (附源码)计算机毕业设计SSM焦作旅游网站
    【附源码】计算机毕业设计JAVA研究生入学考试备考辅助系统
    优秀的 Verilog/FPGA开源项目介绍(三十五)- TinyML
    Lambda 表达式捕获列表
    CentOS升级为python
    技巧:win10的另一种美化字体的方式,使用noMeiryoUI
    vscode离线下载对应版本的插件,避免版本兼容问题
  • 原文地址:https://blog.csdn.net/focus_lyh/article/details/126210692