LVS-NAT模式

一、LVS集群类型中的术语

  • VS:Virtual Server,Director Server(DS), Dispatcher(调度器),Load Balancer(lvs服务器)
  • RS:Real Server(lvs), upstream server(nginx), backend server(haproxy)(真实服务器)
  • CIP:Client IP(客户机IP)
  • VIP:Virtual serve IP VS外网的IP
  • DIP:Director IP VS内网的IP
  • RIP:Real server IP (真实IP)

二、LVS的NAT模式(什么是NAT模式)

lvs-nat:本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某处的RS的RIP和

PORT实现转发

(1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP

(2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈

(3)支持端口映射,可修改请求报文的目标PORT

(4)VS必须是Linux系统,RS可以是任意OS系统
在这里插入图片描述

三、 ipvsadm 工具选项说明

-A: 添加虚拟服务器
-D: 删除整个虚拟服务器
-s: 指定负载调度算法(轮询: rr、加权轮询: wrr、最少连接: lc、加权最少连接: wlc)
-a: 添加真实服务器(节点服务器)
-d: 删除某一个节点
-t: 指定VIP地址及TCP端口
-r: 指定RIP地址及TCP端口
-m: 表示使用NAT群集模式
-g: 表示使用DR模式
-i: 表示使用TUN模式
一w: 设置权重(权重为0时表示暂停节点)
-p 60: 表示保持长连接60秒
-l: 列表查看 LVS虚拟服务器(默认为查看所有)
-n: 以数字形式显示地址、端口等信息,常与"-l“选项组合使用。ipvsadm -ln

四、部署LVS-NAT需要的坏境

负载调度器:配置双网卡 内网:192.168.111.50(ens33)  外网卡:12.0.0.1(ens37)
二台WEB服务器集群池:192.168.111.51、192.168.111.53   
一台NFS共享服务器:192.168.111.54
客户端:

五、部署NFS服务器(共享)

NFS 是一种基于 TCP/IP 传输的网络文件系统协议,最初由 Sun 公司开发。通过使用 NFS 

协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。对于大多数负载均衡 

群集来说,使用 NFS 协议来共享数据存储是比较常见的做法,NFS 也是 NAS 存储设备必然支 

持的一种协议。

NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制,以完成远程 

到本地的映射过程。在 CentOS 7 系统中,需要安装 nfs-utils、rpcbind 软件包来提供 NFS 

共享服务,前者用于 NFS 共享发布和访问,后者用于 RPC 支持
#关闭防火墙及selinux
[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0

安装NFS服务
[root@localhost ~]# yum install nfs-utils rpcbind -y
[root@localhost ~]# cd /opt
[root@localhost opt]# mkdir kgc benet

#新建目录,并创建站点文件
[root@localhost opt]# echo "this is kgc! " >kgc/index.html
[root@localhost opt]# echo "this is benet \!" >benet/index.html
#开启服务
[root@localhost opt]# systemctl start rpcbind
[root@localhost opt]# systemctl start nfs
[root@localhost opt]# chmod 777 kgc/ benet/
[root@localhost opt]# vim /etc/exports
#设置共享策略
/opt/kgc  192.168.111.0/24(rw,sync)
/opt/benet  192.168.111.0/24(rw,sync)


[root@localhost opt]# systemctl restart nfs
#发布服务
[root@localhost opt]# exportfs -rv
exporting 192.168.111.0/24:/opt/benet
exporting 192.168.111.0/24:/opt/kgc

六、节点服务器

第一个节点服务器

#关闭防火墙及selinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

#安装httpd服务
[root@localhost ~]# yum install -y httpd

#在节点服务器上查看NFS共享服务
[root@localhost ~]# showmount -e 192.168.111.54
Export list for 192.168.111.54:
/opt/benet 192.168.111.0/24
/opt/kgc   192.168.111.0/24

#将NFS服务器上的站点文件挂载到/var/www/html/
[root@localhost ~]# mount 192.168.111.54:/opt/kgc /var/www/html/

#查看是否挂载上
[root@localhost ~]# df
192.168.111.54:/opt/kgc 17811456 3826688 13984768   22% /var/www/html
#查看有没有挂载到/var/www/html/
[root@localhost ~]# ls /var/www/html/
index.html

#查看能不能看到NFS共享的文件
[root@localhost ~]# cat /var/www/html/index.html 
this is kgc! 


[root@localhost ~]# systemctl start httpd


#修改网关  作用:指定网关 使服务能回到客户端  所以网关指向调度服务器
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 

GATEWAY=192.168.111.51
#DNS1=8.8.8.8

#然后重启网卡
[root@localhost ~]# systemctl restart network












#永久挂载站点
[root@localhost ~]# vim /etc/fstab 
192.168.111.54:/opt/kgc       /var/www/html     nfs     defaults,_netdev    0 0

[root@localhost ~]# mount -a

第二个节点服务器

#关闭防火墙及selinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

#安装httpd服务
[root@localhost ~]# yum install -y httpd

#在节点服务器上查看NFS共享服务
[root@localhost ~]# showmount -e 192.168.111.54
Export list for 192.168.111.54:
/opt/benet 192.168.111.0/24
/opt/kgc   192.168.111.0/24

#将NFS服务器上的站点文件挂载到/var/www/html/
[root@localhost ~]# mount 192.168.111.54:/opt/benet /var/www/html/

#查看是否挂载上
[root@localhost ~]# df
192.168.111.54:/opt/benet 17811456 3826688 13984768   22% /var/www/html

#查看有没有挂载到/var/www/html/
[root@localhost ~]# ls /var/www/html/
index.html

#查看能不能看到NFS共享的文件
[root@localhost ~]# cat /var/www/html/index.html 
this is benet \!

[root@localhost ~]# systemctl start httpd

#修改网关  作用:指定网关 使服务能回到客户端  所以网关指向调度服务器
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 

GATEWAY=192.168.111.51
#DNS1=8.8.8.8

#然后重启网卡
[root@localhost ~]# systemctl restart network









#永久挂载站点
[root@localhost ~]# vim /etc/fstab 
192.168.111.54:/opt/benet       /var/www/html    nfs    defaults,_netdev    0 0

[root@localhost ~]# mount -a

七、调度服务器

#关闭防火墙及selinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

#添加一块网卡
#查看是否添加成功
[root@localhost ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.111.51  netmask 255.255.255.0  broadcast 192.168.111.255
        inet6 fe80::3721:e287:acd2:cd60  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c7:78:85  txqueuelen 1000  (Ethernet)
        RX packets 5844  bytes 433673 (423.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1784  bytes 157614 (153.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.111.133  netmask 255.255.255.0  broadcast 192.168.111.255
        inet6 fe80::a09e:1b3f:810f:913e  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c7:78:8f  txqueuelen 1000  (Ethernet)
        RX packets 21  bytes 1880 (1.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 23  bytes 4207 (4.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

#切换目录
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
#将原来的ens33网卡内容复制给ens37
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens37
#修改ens37网卡 作为外网地址  去掉网关
[root@localhost network-scripts]# vim ifcfg-ens37
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37    这里要改
DEVICE=ens37   这里要改 
ONBOOT=yes
IPADDR=12.0.0.1    这里要改
NETMASK=255.255.255.0
#GATEWAY=192.168.111.2   这里要改
#DNS1=8.8.8.8       这里要改

[root@localhost network-scripts]# systemctl restart network
#再次查看是否修改成功
[root@localhost network-scripts]# ifconfig 

#打开路由转发功能
[root@localhost network-scripts]# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1 
#刷新
[root@localhost network-scripts]# sysctl -p
net.ipv4.ip_forward = 1

#防火墙
[root@localhost network-scripts]# iptables -nL -t nat
#查看策略
[root@localhost network-scripts]# iptables -F

#添加策略
[root@localhost network-scripts]# iptables -t nat -A POSTROUTING -s 192.168.111.0/24 -o ens37 -j SNAT --to 12.0.0.1

#查看策略
[root@localhost network-scripts]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  192.168.111.0/24     0.0.0.0/0            to:12.0.0.1

#加载内核模块
[root@localhost network-scripts]# modprobe ip_vs
[root@localhost network-scripts]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn

#安装ipvsadm
[root@localhost network-scripts]# yum install -y ipvsadm* 

#重启服务
[root@localhost network-scripts]# systemctl start ipvsadm.service 
Job for ipvsadm.service failed because the control process exited with error code. See "systemctl status ipvsadm.service" and "journalctl -xe" for details.
报错了 
两种查看报错方法
[root@localhost network-scripts]# journalctl -xe
[root@localhost network-scripts]# vim /var/log/messages
#找到报错后
#保存配置文件
[root@localhost network-scripts]# ipvsadm-save >/etc/sysconfig/ipvsadm
#开启服务
[root@localhost network-scripts]# systemctl start ipvsadm
[root@localhost network-scripts]# systemctl status ipvsadm.service 

#清空策略
[root@localhost network-scripts]# ipvsadm -C

#指定IP地址 外网的入口  -s rr  轮询
[root@localhost network-scripts]# ipvsadm -A -t 12.0.0.1:80 -s rr

#先指定虚拟服务器再添加真实服务器地址,-r:真实服务器地址 -m指定nat模式
[root@localhost network-scripts]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.111.50:80 -m
[root@localhost network-scripts]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.111.53:80 -m


#启动
[root@localhost network-scripts]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  localhost.localdomain:http rr
  -> 192.168.111.50:http          Masq    1      0          0         
  -> 192.168.111.53:http          Masq    1      0          0         


#查看是否添加成功
[root@localhost network-scripts]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  12.0.0.1:80 rr
  -> 192.168.111.50:80            Masq    1      0          0         
  -> 192.168.111.53:80            Masq    1      0          0         






八、测试

在windows上 ping  192.168.111.51
                 192.168.111.50
                 192.168.111.53
在浏览器上输入12.0.0.1

九、LVS的负载均衡注意点

LVS的负载调度算法有四种最常用的:轮询算法(rr)、加权轮询(wrr)、最少轮询(lc)、加权最少轮询(wlc)

1)创建虚拟服务器(注意:NAT模式要两块网卡,调度器的地址是外网口地址)
群集的VIP地址为192.168.80.33,针对TCP 80端口提供负载分流服务,使用的轮询调度算法。对于负载均衡调度器来说,VIP必须是本机实际已启用的IP地址
ipvsadm -A -t 192.168.20.11:80 -s rr

//选项 "-A"表示添加虚拟服务器,"-t"用来指定VIP地址及TCP端口,"-s"用来指定负载调度算法——rr、wrr、lc、wlc

2)添加服务器节点
ipvsadm -a -t 192.168.20.11:80 -r 192.168.80.33:80 -m
ipvsadm -a -t 192.168.20.11:80 -r 192.168.80.44:80 -m

//选项 "-a"表示添加真实服务器,"-t"用来指定VIP地址及TCP端口,"-r"用来指定RIP地址及TCP端口,"-m"表示使用NAT群集模式("-g"是DR模式,"-i"是TUN模式)
{ -m参数后面还可以跟-w的参数,这里没有做的"-w"用来设置权重(权重为0时表示暂停节点)}

4)删除服务器节点
ipvsadm -d -r 192.168.90.22:80 -t 192.168.80.88:80

//需要从服务器池中删除某一个节点时,使用选项"-d"。执行删除操作必须指定目标对象,包括节点地址、虚拟IP地址。如上所示的操作将会删除LVS群集192.168.80.88中的节点192.168.90.22

若需要删除整个虚拟服务器时,使用选项-D并指定虚拟IP地址即可,无需要指定节点。例如:“ipvsadm -D -t 192.168.80.11:80",则删除此虚拟服务器。

ipvsadm -L	//查看节点状态,加个"-n"将以数字形式显示地址、端口信息
ipvsadm-save  > /etc/sysconfig/ipvsadm	//保存策略

使用导出/导入工具ipvsadm-save/ipvsadm-restore可以保存、恢复LVS策略,方法类似于iptables的规则的导出、导入

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LVSLinux Virtual Server)是一个开源项目,可以在Linux内核中实现一个高性能、高可用性的服务器集群。其中,NAT模式LVS集群的一种常见部署方式,可以将外部请求通过LVS集群中的虚拟IP地址映射到后端真实服务器上。 以下是LVS集群搭建NAT模式的步骤: 1. 安装LVS软件包 在LVS集群中,需要安装ipvsadm和keepalived这两个软件包来实现负载均衡和高可用性。可以使用以下命令安装: ``` sudo apt-get install ipvsadm keepalived ``` 2. 配置LVS集群 在LVS集群中,需要至少有一个Director服务器和多个Real服务器。Director服务器是LVS集群中的核心部分,负责接收外部请求并将它们转发到Real服务器上。Real服务器是LVS集群中的后端服务器,负责处理来自Director服务器的请求。 在Director服务器上,需要进行以下配置: - 配置网络接口,将其绑定到虚拟IP地址上; - 配置ipvsadm规则,将请求映射到Real服务器上; - 配置keepalived,实现高可用性。 在Real服务器上,需要关闭iptables和ARP扫描功能,并配置正确的网络接口。 3. 测试LVS集群 在完成LVS集群的配置后,可以使用curl等工具测试其性能和可用性。例如,可以使用以下命令发送一个HTTP请求: ``` curl http://<虚拟IP地址>/ ``` 如果一切正常,请求应该被转发到Real服务器上,并返回正确的响应。 以上是LVS集群搭建NAT模式的基本步骤,具体的操作细节和配置方法可以参考LVS官方文档或相关的教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值