• 运维特工,战胜心魔!!
  • 有些事情其实没有那么难,只是我们感觉难,走出第一步!
  • 你所浪费的今天,是昨天死去的人奢望的明天!!!
  • 欢迎访问 unixfbi.com 运维特工社区http://unixfbi.com/
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧
  • 运维特工:http://www.unixfbi.com
  • 人生没有白走的路,每一步都算数!!
  • 空杯心态,沉淀自己!

LVS-NAT模式

LVS unixfbi 1年前 (2018-03-28) 3405次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

LVS-NAT 模式

LVS-NAT 模式介绍

VS/NAT(Virtual Server via Network Address Translation)
也就是网络地址翻译技术实现虚拟服务器,当用户请求到达调度器时,负载均衡器检查数据包的目的地址和端口号,如果根据虚拟服务器规则表匹配虚拟服务器服务,则通过调度算法从群集中选择真实服务器,并将连接添加到记录建立的连接的哈希表中。调度器将请求报文的目标地址(即虚拟 IP 地址)改写成选定的 Real Server 地址,同时报文的目标端口也改成选定的 Real Server 的相应端口,最后将报文请求发送到选定的 Real Server。在服务器端得到数据后,Real Server 返回数据给用户时,需要再次经过负载调度器将报文的源地址和源端口改成虚拟 IP 地址和相应端口,然后把数据发送给用户,完成整个负载调度过程。

简单来讲 VS/NAT,通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
拓扑图:
LVS-NAT 模式

二、LVS-NAT 模式搭建

1.环境信息介绍

实验拓扑图:
LVS-NAT 模式

环境信息:

主机名 角色 IP VIP
lvs-dr Load Balancer eth1:172.16.84.128 eth0:192.168.64.134 172.16.84.128
rs-node1 Real Server eth0:192.168.64.135
rs-node2 Real Server eth0:192.168.64.136

软件版本:

名称 版本
系统 CentOS Linux release 7.2.1511 (Core)
IPVS v1.2.1
ipvsadm v1.27

2.配置 Real Server

主要配置网络和 route
rs-node1 和 rs-node2 的网关为 :192.168.64.134
配置 rs-node1:
配置网络 eth0

# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.64.135
NETMASK=255.255.255.0
GATEWAY=192.168.64.134

重启网卡:

# systemctl restart network.service

查看网关:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.64.134  0.0.0.0         UG    100    0        0 eth0
192.168.64.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0

安装个 httpd 或者 nginx:
配置并测试静态页:

# curl 192.168.64.135
<h1>UnixFBI rs node1</h1>

rs-node2 配置:
配置网络 eth0

# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.64.136
NETMASK=255.255.255.0
GATEWAY=192.168.64.134

重启网卡:

# systemctl restart network.service

查看网关:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.64.134  0.0.0.0         UG    100    0        0 eth0
192.168.64.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0

安装个 httpd 或者 nginx:
配置并测试静态页:

# curl 192.168.64.136
<h1>UnixFBI rs node2</h1>

3.安装 LVS 管理程序包

在 lvs-dr 机器上

# yum install -y ipvsadm

4. Virtual Server 开启转发

# echo 1 > /proc/sys/net/ipv4/ip_forward
# cat /proc/sys/net/ipv4/ip_forward     
1

5.定义 LVS 服务端口和调度算法

[root@lvs-dr unixfbi]# ipvsadm -A -t 172.16.84.128:80 -s rr
[root@lvs-dr unixfbi]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.84.128:80 rr

6.添加 RS

并指定 Lvs 为 Nat 类型

[root@lvs-dr unixfbi]# ipvsadm -a -t 172.16.84.128:80 -r 192.168.64.135 -m
[root@lvs-dr unixfbi]# ipvsadm -a -t 172.16.84.128:80 -r 192.168.64.136 -m

查看配置的 LVS

# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.84.128:80 rr
  -> 192.168.64.135:80            Masq    1      0          0         
  -> 192.168.64.136:80            Masq    1      0          0  

保存 LVS 配置

# ipvsadm -S -n > /etc/sysconfig/ipvsadm

[root@lvs-dr unixfbi]# cat /etc/sysconfig/ipvsadm
-A -t 172.16.84.128:80 -s rr
-a -t 172.16.84.128:80 -r 192.168.64.135:80 -m -w 1
-a -t 172.16.84.128:80 -r 192.168.64.136:80 -m -w 1

7.测试

[root@lvs-dr unixfbi]# curl 172.16.84.128
<h1>UnixFBI rs node2</h1>
[root@lvs-dr unixfbi]# curl 172.16.84.128
<h1>UnixFBI rs node1</h1>

###8.查看当前的连接

[root@lvs-dr unixfbi]# ipvsadm -Lnc
IPVS connection entries
pro expire state       source             virtual            destination
TCP 14:55  ESTABLISHED 172.16.84.1:53915  172.16.84.128:80   192.168.64.135:80
TCP 02:00  FIN_WAIT    172.16.84.1:53916  172.16.84.128:80   192.168.64.136:80
TCP 14:55  ESTABLISHED 172.16.84.1:53917  172.16.84.128:80   192.168.64.135:80
TCP 01:43  TIME_WAIT   172.16.84.1:53910  172.16.84.128:80   192.168.64.135:80
TCP 01:45  TIME_WAIT   172.16.84.1:53911  172.16.84.128:80   192.168.64.136:80

9.查看统计信息

[root@lvs-dr unixfbi]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  172.16.84.128:80                   24      148       98    14291    13115
  -> 192.168.64.135:80                  12       60       39     3706     3726
  -> 192.168.64.136:80                  12       88       59    10585     9389

10.查看速率

[root@lvs-dr ~]# ipvsadm -Ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port                 CPS    InPPS   OutPPS    InBPS   OutBPS
  -> RemoteAddress:Port
TCP  172.16.84.128:80                    0        3        2      194      202
  -> 192.168.64.135:80                   0        2        1      103      122
  -> 192.168.64.136:80                   0        1        1       91       80 

三、规则清除与恢复

1.规则清除

# ipvsadm  -C

2.恢复(重载)保存的规则

# ipvsadm  -R  < /etc/sysconfig/ipvsadm
# ipvsadm -L -n

四、规则修改

1.修改集群的调度算法

# ipvsadm   -E  -t   172.16.84.128:80   -s  sh 

2.管理集群中 RS

# ipvsadm -e 
# ipvsadm  -e  -t 172.16.84.128:80  -r 192.168.64.135:8080 -m
# ipvsadm  -e  -t 172.16.84.128:80  -r 192.168.64.136:8080 -m

另外一种修改 RS 的方法:

直接修改/etc/sysconfig/ipvsadm
ipvsadm  -C
ipvsadm   -R < /etc/sysconfig/ipvsadm
ipvsadm -L -n

3.删除 RS

# ipvsadm  -d  -t 172.16.84.128:80  -r  192.168.64.135:8080
# ipvsadm   -L -n

4.删除 DR

# ipvsadm  -D -t 172.16.84.128:80

遇到问题

ipvsadm 无法启动

# systemctl status ipvsadm -l
● ipvsadm.service - Initialise the Linux Virtual Server
   Loaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 五 2018-02-16 01:51:56 CST; 14s ago
  Process: 3215 ExecStart=/bin/bash -c exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm (code=exited, status=1/FAILURE)
 Main PID: 3215 (code=exited, status=1/FAILURE)

2 月 16 01:51:56 lvs-dr systemd[1]: Starting Initialise the Linux Virtual Server...
2 月 16 01:51:56 lvs-dr bash[3215]: /bin/bash: /etc/sysconfig/ipvsadm: 没有那个文件或目录
2 月 16 01:51:56 lvs-dr systemd[1]: ipvsadm.service: main process exited, code=exited, status=1/FAILURE
2 月 16 01:51:56 lvs-dr systemd[1]: Failed to start Initialise the Linux Virtual Server.
2 月 16 01:51:56 lvs-dr systemd[1]: Unit ipvsadm.service entered failed state.
2 月 16 01:51:56 lvs-dr systemd[1]: ipvsadm.service failed.

问题原因
缺少/etc/sysconfig/ipvsadm 文件
解决方法

# touch /etc/sysconfig/ipvsadm

参考文档

http://www.linuxvirtualserver.org/VS-NAT.html
https://awen.me/post/131270620.html
http://blog.51cto.com/ghbsunny/1975813
http://blog.wangbinzhou.com/2017/12/29/LVS%E4%B9%8BNAT%E7%B1%BB%E5%9E%8B%E5%AE%9E%E9%AA%8C/


UnixFBI 运维特工 , 版权所有丨如未注明 , 均为原创丨 转载请务必注明原文链接http://www.unixfbi.com/412.html
喜欢 (0)
[支付宝]
分享 (0)
unixfbi
关于作者:
运维工程师一枚,做有价值的事情!
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址