Lvs - NAT模式
[TOC]
一:LVS-NAT 模式搭建
1:LVS-NAT 模式工作原理:
客户端访问调度器时,调度器通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
步骤1:客户端访问VIP1的网站
图上各IP注解:
CIP 客户端的IP
VIP 是域名解析的IP, 是集群对外的公网IP
DIP 用来和后端服务器进行数据交互的IP, 请求报文转发给后端服务器从此口出去
RIP 真实服务器的IP
步骤2:客户端访问调度器时,调度器通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;
步骤3:真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
步骤总结及过程地址变化:
1: 客户端请求访问test.com [test.com ===> VIP]
源地址: CIP 目标地址: VIP
2: 请求报文到达负载均衡器
源地址: CIP 目标地址: RIP
3: RealServer收到报文处理,响应
源地址: RIP 目标地址: CIP
4: 负载调度器收到报文,根据自身之前的转发修改记录,还原报文
源地址: VIP 目标地址: CIP
2:LVS-NAT 模式搭建
实验前期准备:
1.准备4台主机。2.关闭防火墙。3.关闭selinux
3:真实环境中的拓扑图
4:集群各节点IP注解
客户端计算机的IP(CIP):可能是一个本地的、与VIP在同一网络的私有ip地址,或者是一个因特网上的公共ip地址。用作向集群发送请求的源ip地址
虚拟IP(VIP):Director用于向客户端提供服务的ip地址
Director的IP(DIP):在Director的VIP上接收访问集群服务的请求,这些请求通过DIP转发出去抵达各个集群节点
真实real server IP(RIP):在LVS术语中,向外部世界提供服务的节点叫做真实服务器,因此在真实服务器上使用的ip地址叫做真实ip地址(RIP)。
精简版,实验拓扑图:
说明:客户端只要求能够访问到VIP即可。
5:各个服务器的ip地址设置
1:客户端地址
[root@client ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.19.10
NETMASK=255.255.255.0
GATEWAY=192.168.19.11
2:director配置网络环境:
指向网关的时候客户端指向19段的ip地址,Realserver指向20段的ip地址。这样就可以相互通信了。
添加一个网卡(需要两张网卡), 配置成以下网络环境:
eth0 192.168.19.11 模式:vmnet8 模拟公网
eth1 192.168.20.254 模式:vmnet4 模拟内网
[root@director ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.19.11
NETMASK=255.255.255.0
[root@director ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens37
BOOTPROTO=static
DEVICE=ens37
ONBOOT=yes
IPADDR=192.168.20.254
NETMASK=255.255.255.0
3:realserver1
[root@realserver1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.20.200
NETMASK=255.255.255.0
GATEWAY=192.168.20.254
4:realserver2
[root@realserver1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.20.220
NETMASK=255.255.255.0
GATEWAY=192.168.20.254
6:配置LVS:
director配置成分发器
1:打开路由转发功能。此项必须打开。否则vmnet8和vmnet4无法进行通信。
[root@director ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@director ~]# sysctl -p
2:安装: LVS管理工具: ipvsadmin。并配置规则。
[root@director ~]# yum install -y ipvsadm
[root@director ~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm
[root@director ~]# ipvsadm -A -t 192.168.19.11:80 -s rr rr代表轮循
-A 添加虚拟服务器
-t 表示TCP的服务 VIP:PORT
-s 指定调度算法 rr表示round-robin 轮循
[root@director ~]# ipvsadm -a -t 192.168.19.11:80 -r 192.168.20.200:80 -m
[root@director ~]# ipvsadm -a -t 192.168.19.11:80 -r 192.168.20.220:80 -m
-a 表示添加real server的地址
-r 指定real server的IP地址
-m 表示masquerade 也就是NAT方式的LVS
3:Ipvsadm命令,用于配置及查看内核IPVS表和算法的工具,类似于iptables
[root@director ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.19.11:80 rr
-> 192.168.20.200:80 Masq 1 0 0
-> 192.168.20.220:80 Masq 1 0 2
7:保存配置规则
[root@director ~]# ipvsadm --save > /etc/sysconfig/ipvsadm
[root@director ~]# ipvsadm -S #两个都是保存都一样
[root@director ~]# cat /etc/sysconfig/ipvsadm
-A -t director:http -s rr
-a -t director:http -r 192.168.20.200:http -m -w 1
-a -t director:http -r 192.168.20.220:http -m -w 1
二:配置两台realserver安装http并做一个测试页面。
(实验期间,各个服务器的页面不同)否则看不出来是不是做成功了。
[root@realserver1 ~]# yum install -y httpd
[root@realserver1 ~]# echo "192.168.20.200" > /var/www/html/index.html
[root@realserver1 ~]# systemctl restart httpd
[root@realserver2 ~]# yum install -y httpd
[root@realserver2 ~]# echo "192.168.20.220" > /var/www/html/index.html
[root@realserver2 ~]# systemctl restart httpd
三:客户端测试。前提网络必须能ping通
[root@client ~]# yum install elinks
[root@client ~]# elinks 192.168.20.200 --dump
192.168.20.200
[root@client ~]# elinks 192.168.20.220 --dump
192.168.20.220
[root@client ~]# elinks 192.168.19.11 --dump
192.168.20.200
[root@client ~]# elinks 192.168.19.11 --dump
192.168.20.220
[root@client ~]# elinks 192.168.19.11 --dump
192.168.20.200
[root@client ~]# elinks 192.168.19.11 --dump
192.168.20.220
四:ipvsadm参数说明
[root@director ~]# ipvsadm -L -n ==> 查看规则,显示内核虚拟服务器表
[root@director ~]# ipvsadm -L -n -c ==> 查看客户端连接分发器和real server 的情况
[root@director ~]# ipvsadm -L -n --stats ==> 查看分发情况
[root@director ~]# ipvsadm -L -n --rate ==> 查看速率
[root@director ~]# ipvsadm -Z --zero ==> 虚拟服务表计数器清零(清空当前的连接数量等)
[root@director ~]# ipvsadm -C ==> 清空规则,只是清空内存的规则
[root@director ~]# ipvsadm-restore </etc/sysconfig/ipvsadm ==>恢复规则,恢复到内存
LVS的规则配置文件:/etc/sysconfig/ipvsadm
五:ipvsadm命令选项解释:
参数 | 解释 |
---|---|
-A --add-service | 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。 |
-E --edit-service | 编辑内核虚拟服务器表中的一条虚拟服务器记录 |
-D --delete-service | 删除内核虚拟服务器表中的一条虚拟服务器记录 |
-C --clear | 清除内核虚拟服务器表中的所有记录 |
-R --restore | 恢复虚拟服务器规则 |
-S --save | 保存虚拟服务器规则,输出为-R选项可读的格式 |
-a --add-server | 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器 |
-e --edit-server | 编辑一条虚拟服务器记录中的某条真实服务器记录 |
-d --delete-server | 删除一条虚拟服务器记录中的某条真实服务器记录 |
-L|-l --list | 显示内核虚拟服务器表 |
-Z --zero | 虚拟服务表计数器清零(清空当前的连接数量等) |
--set tcp tcpfin udp | 设置连接超时值 |
--start-daemon | 启动同步守护进程。他后面可以是master或backup,用来说明LVS Router 是master或是backup。在这个功能上也可以采用keepalived的VRRP功能 |
--stop-daemon | 停止同步守护进程 |
-h --help | 显示帮助信息 |
其他的选项:
参数 | 解释 |
---|---|
-t --tcp-service service-address | 说明虚拟服务器提供的是 tcp 的服务[vip:port] or [real-server-ip:port] |
-u --udp-service service-address | 说明虚拟服务器提供的是 udp 的服务[vip:port] or [real-server-ip:port] |
-f --fwmark-service fwmark | 说明是经过 iptables 标记过的服务类型 |
-s --scheduler scheduler | 使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是:wlc |
-p --persistent [timeout] | 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout的默认值为30秒 |
-M --netmask | netmask persistent granularity mask |
-r --real-server server-address | 真实的服务器[Real-Server:port] |
-g --gatewaying | 指定LVS的工作模式为直接路由模式(也是 LVS 默认的模式) |
-i --ipip | 指定LVS的工作模式为隧道模式 |
-m --masquerading | 指定LVS的工作模式为NAT模式 |
-w --weight weight | 真实服务器的权值 |
--mcast-interface interface | 指定组播的同步接口 |
-c --connection | 显示LVS目前的连接 如:ipvsadm -L -c |
--timeout | 显示tcp tcpfin udp的timeout 值 如:ipvsadm -L --timeout |
--daemon | 显示同步守护进程状态 |
--stats | 显示统计信息 |
--rate | 显示速率信息 |
--sort | 对虚拟服务器和真实服务器排序输出 |
--numeric -n | 输出IP地址和端口的数字形式 |
超时时间用ipvsadm --set tcp tcpfin udp设置,比如
ipvsadm --set 120 20 100
表示tcp空闲等待时间为120 秒
客户端关闭链接等待时间为20秒
udp空闲等待为100秒