LVS负载均衡群集和NAT部署

1、企业群集应用概述

(1)群集的含义

  • Cluster,集群(也称群集)
  • 由多台主机构成,都做相同的一件事,但对外只表现为一一个整体,只提供一个访问入口(域名或IP地址), 相当于一台大型计算机

对于企业服务的的性能提升两种方式:

  • 纵向扩展 :对服务器的CPU 内存 硬盘 等硬件进行升级或者扩容来实现的,性能上限会有瓶颈,成本昂贵,收效比不高等问题
  • 横向扩展 :通过增加服务器主机数量来实现

(2)企业群集分类

  • 负载均衡群集(LB):提高应用系统的响应能力,处理更多的访问请求,减少延迟,实现高并发、高负载的能力,同时也是如今企业运用最多的群集类型。
  • 高可用群集(HA): 提高应用系统的可靠性,减少服务中断时间标,确保服务的连续性,达到高可用(HA)的容错效果。(通常使用n个9来代表高可用的指标)
  • 高性能运算群集(HPC):将多台服务器的硬件资源整合成资源池以获取高性能的CPU、内存等资源,来提高整体运算能力

2、LVS负载均衡群集运用理论

(1)负载均衡的架构

第一层:负载调度器:

访问整个群集系统的唯一入口,对外使用所有服务器共有的VIP地址,也称为群集IP 地址。通常会配置主、备两台调度器实现热备份,当主调度器失效以后能够平滑替换至备用调度器,确保高可用性。

第二层:服务器池:

群集所提供的应用服务、由服务器池承担,其中每个节点具有独立的RIP地址(真实IP),只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池。

第三层:共享存储 :

为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个群集的统一性。共享存储可以使用 NAS设备,或者提供 NFS共享服务的专用服务器。

(2)LVS负载均衡群集工作的三种模式

地址转换(NAT模式) ,直接路由(DR模式),IP隧道(IP-TUN)。对于商用来说,最常用是NAT模式和DR模式

1)NAT模式

调度器会作为所有节点服务器的默认网关,也是客户端的访间入口和节点服务器返回响应消息的出口,所以调度器会承载双向流量的负载压力,可能会成为整个群集的件能低颈。由于节点服务器都会处于内网环境并使用私网IP,所以NAT模式具有一定的安全性。

2)TUN模式

调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不需要经过调度器。由于节点服务器需要部署在不同的互联网环境中,所以需要有独立的公网IP。调度器与节点服务器是通过专用的IP隧道相五通信因此IP隧道模式的成本较高、网络安全性较低密,且数据在IP隧道传输的过程中需要额外的封装和解封装过程,性能也会受到一定的影响。

3)DR模式

调度器也是仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不需要经过调度器。(与NBT模式的区别)节点服务器与调度器是部署在同一个物理网络中,因此不需要专用的IP隧道(JIP隧道模式的区别)DR模式是企业首选的IVs模式。

3、LVS虚拟服务器Linux Virtual Server

  • 针对Linux内核开发的负载均衡
  • 1998年5月,由我国的章文嵩博士创建
  • 官方网站:www.linuxvirtualserver.org/
  • LVS实际上相当于基于IP地址的虚拟化应用,为基于IP地址和内容请求分发的负载均衡提出来一种高效的解决方法

(1) ip_vs通用模块 

LVS所有相关的调度算法模块

[root@zx1 ~]# ls /usr/lib/modules/3.10.0-1160.71.1.el7.x86_64/kernel/net/netfilter/ipvs
ip_vs_dh.ko.xz   ip_vs.ko.xz       ip_vs_lblcr.ko.xz  ip_vs_nq.ko.xz      ip_vs_rr.ko.xz   ip_vs_sh.ko.xz   ip_vs_wrr.ko.xz
ip_vs_ftp.ko.xz  ip_vs_lblc.ko.xz  ip_vs_lc.ko.xz     ip_vs_pe_sip.ko.xz  ip_vs_sed.ko.xz  ip_vs_wlc.ko.xz
[root@zx1 ~]#

LVS现在已成为 Linux 内核的一部分,默认编译为 ip_vs 模块,必要时能够自动调动。

在CentOS 7 系统中,手动加载 ip_vs 模块的命令如下:

modprobe ip_vs     手动加载 ip_vs 模块

​cat /proc/net/ip_vs  查看当前系统中ip_vs模块的版本信息

[root@zx1 ~]# cat /proc/net/ip_vs
cat: /proc/net/ip_vs: 没有那个文件或目录
[root@zx1 ~]# modprobe ip_vs
[root@zx1 ~]# 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
[root@zx1 ~]#

(2)LVS调度器用的调度方法

固定调度算法:rr,wrr,dh,sh
rr:轮询算法,将请求依次分配给不同的rs节点,即RS节点中均摊分配。适合于RS所有节点处理性能接近的情况。
wrr:加权轮训调度,依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。
dh:目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得所需RS。
sh:源地址哈希调度(source hashing)以源地址为关键字查找一个静态hash表来获得需要的RS。

动态调度算法:wlc,lc,lblc
wlc:加权最小连接数调度,假设各台RS的权值依次为Wi,当前tcp连接数依次为Ti,依次去Ti/Wi为最小的RS作为下一个分配的RS。
lc:最小连接数调度(least-connection),IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS。
lblc:基于地址的最小连接数调度(locality-based least-connection):将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。

(3)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 [-t VIP:PORT]

4、NAT模式 LVS负载均衡群集部署

准备工具

四台linux虚拟机加一台windows虚拟机

20.0.0.10做LVS调度器

20.0.0.20和20.0.0.30做nginx web服务器

20.0.0.40做NFS共享存储

(1)虚拟机做初始化操作

[root@zx1 ~]# systemctl stop firewalld
[root@zx1 ~]# setenforce 0

(2)配置NFS共享存储
 

[root@zx4 ~]# yum -y install nfs-untils rpcbind
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
没有可用软件包 nfs-untils。
软件包 rpcbind-0.2.0-49.el7.x86_64 已安装并且是最新版本
[root@zx4 ~]# mkdir /share
[root@zx4 ~]# cd /
[root@zx4 /]# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  share  srv  sys  tmp  usr  var
[root@zx4 /]# vim /etc/exports
[root@zx4 /]# systemctl enable --now rpcbind nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@zx4 /]# showmount -e
Export list for zx4:
/share 20.0.0.0/24
[root@zx4 /]#

/share 20.0.0.0/24(ro)    ##文件添加内容


(3)nginx服务器部署

1)两台nginx服务器yum安装nginx

上传nginx.repo至/etc/yum.repos.d目录中

[root@zx2 ~]# cd /etc/yum.repos.d/
[root@zx2 yum.repos.d]# ls
local.repo  repo.bar
[root@zx2 yum.repos.d]# ls
local.repo  nginx.repo  repo.bar
[root@zx2 yum.repos.d]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
devtmpfs                 1913504       0  1913504    0% /dev
tmpfs                    1930624       0  1930624    0% /dev/shm
tmpfs                    1930624   21104  1909520    2% /run
tmpfs                    1930624       0  1930624    0% /sys/fs/cgroup
/dev/mapper/centos-root 36805060 5419432 31385628   15% /
/dev/sda1                1038336  191268   847068   19% /boot
tmpfs                     386128      40   386088    1% /run/user/0
/dev/sr0                 4635056 4635056        0  100% /mnt
[root@zx2 yum.repos.d]# yum install -y nginx

-------------------------------------------------------------------------------------------

[root@zx3 ~]# cd /etc/yum.repos.d/
[root@zx3 yum.repos.d]# ls
local.repo  repos.bak
[root@zx3 yum.repos.d]# ls
local.repo  nginx.repo  repos.bak
[root@zx3 yum.repos.d]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
devtmpfs                 1913628       0  1913628    0% /dev
tmpfs                    1930648       0  1930648    0% /dev/shm
tmpfs                    1930648   21004  1909644    2% /run
tmpfs                    1930648       0  1930648    0% /sys/fs/cgroup
/dev/mapper/centos-root 36805060 5574980 31230080   16% /
/dev/sda1                1038336  189024   849312   19% /boot
tmpfs                     386132      60   386072    1% /run/user/0
/dev/sr0                 4600876 4600876        0  100% /mnt
[root@zx3 yum.repos.d]# yum install -y nginx

2)NFS虚拟机准备测试界面

[root@zx4 /]# cd /share/
[root@zx4 share]# ls
[root@zx4 share]# echo 'this is nginx web1 test page' > test.html
[root@zx4 share]# cat test.html
this is nginx web1 test page
[root@zx4 share]# cd /
[root@zx4 /]# mkdir share2
[root@zx4 /]# vim /etc/exports
[root@zx4 /]# exportfs -avr
exporting 20.0.0.0/24:/share2
exporting 20.0.0.0/24:/share
[root@zx4 /]# echo 'this is nginx web2 test page' > /share2/test.html
[root@zx4 /]# cd share2
[root@zx4 share2]# ls
test.html
[root@zx4 share2]#



/share 20.0.0.0/24(ro)
/share2 20.0.0.0/24(ro)

3)将测试界面分别挂载到两台nginx虚拟机

20.0.0.20

[root@zx2 yum.repos.d]# cd /usr/share/nginx/html/
[root@zx2 html]# ls
50x.html  index.html
[root@zx2 html]# mkdir xy101
[root@zx2 html]# ls
50x.html  index.html  xy101
[root@zx2 html]# vim /etc/fstab
20.0.0.40:/share /usr/share/nginx/html/xy101 nfs defaults,_netdev 0 0
##在文件末行添加内容

[root@zx2 html]# mount -a
[root@zx2 html]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  1.9G     0  1.9G    0% /dev
tmpfs                   tmpfs     1.9G     0  1.9G    0% /dev/shm
tmpfs                   tmpfs     1.9G   21M  1.9G    2% /run
tmpfs                   tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        36G  5.2G   30G   15% /
/dev/sda1               xfs      1014M  187M  828M   19% /boot
tmpfs                   tmpfs     378M   40K  378M    1% /run/user/0
/dev/sr0                iso9660   4.5G  4.5G     0  100% /mnt
20.0.0.40:/share        nfs4       38G  4.4G   34G   12% /usr/share/nginx/html/xy101
[root@zx2 html]# vim /etc/nginx/nginx.conf
keepalive_timeout  0;  ##27行65改成0,关闭长连接

[root@zx2 html]# systemctl start nginx
[root@zx2 html]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@zx2 html]#

20.0.0.30

[root@zx3 yum.repos.d]# cd /usr/share/nginx/html/
[root@zx3 html]# ls
50x.html  index.html
[root@zx3 html]# mkdir xy101
[root@zx3 html]# ls
50x.html  index.html  xy101
[root@zx3 html]# vim /etc/fstab
20.0.0.40:share2 /usr/share/nginx/html/xy101 nfs defaults,_netdev 0 0

[root@zx3 html]# mount -a
[root@zx3 html]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  1.9G     0  1.9G    0% /dev
tmpfs                   tmpfs     1.9G     0  1.9G    0% /dev/shm
tmpfs                   tmpfs     1.9G   21M  1.9G    2% /run
tmpfs                   tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        36G  5.4G   30G   16% /
/dev/sda1               xfs      1014M  185M  830M   19% /boot
tmpfs                   tmpfs     378M   60K  378M    1% /run/user/0
/dev/sr0                iso9660   4.4G  4.4G     0  100% /mnt
20.0.0.40:/share2       nfs4       38G  4.4G   34G   12% /usr/share/nginx/html/xy101
[root@zx3 html]# cd /usr/share/nginx/html/xy101/
[root@zx3 xy101]# ls
test.html
[root@zx3 xy101]# cat test.html
this is nginx web2 test page
[root@zx3 xy101]# vim /etc/nginx/nginx.conf
keepalive_timeout  0;

[root@zx3 xy101]# systemctl start nginx
[root@zx3 xy101]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@zx3 xy101]#

(4)修改网卡配置

20.0.0.10(LVS调度器)

添加一张新的网卡

[root@zx1 ~]# cd /etc/sysconfig/network-scripts/
[root@zx1 network-scripts]# cp ifcfg-ens33 ifcfg-ens35
[root@zx1 network-scripts]# ls
ifcfg-ens33  ifdown-bnep  ifdown-ipv6  ifdown-routes    ifdown-tunnel  ifup-eth   ifup-isdn   ifup-ppp     ifup-TeamPort     network-functions
ifcfg-ens35  ifdown-eth   ifdown-isdn  ifdown-sit       ifup           ifup-ib    ifup-plip   ifup-routes  ifup-tunnel       network-functions-ipv6
ifcfg-lo     ifdown-ib    ifdown-post  ifdown-Team      ifup-aliases   ifup-ippp  ifup-plusb  ifup-sit     ifup-wireless
ifdown       ifdown-ippp  ifdown-ppp   ifdown-TeamPort  ifup-bnep      ifup-ipv6  ifup-post   ifup-Team    init.ipv6-global
[root@zx1 network-scripts]# vim ifcfg-ens33
[root@zx1 network-scripts]# vim ifcfg-ens35
[root@zx1 network-scripts]# systemctl restart network

ens33网卡文件

ens35网卡配置文件

20.0.0.20

[root@zx2 xy101]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@zx2 xy101]# systemctl restart network
[root@zx2 xy101]#

20.0.0.30

[root@zx3 xy101]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@zx3 xy101]# systemctl restart network

(5)修改LVS服务器

20.0.0.10

开启路由转发功能

[root@zx1 network-scripts]# vim /etc/sysctl.conf
[root@zx1 network-scripts]# sysctl -p
net.ipv4.ip_forward = 1
[root@zx1 network-scripts]#

net.ipv4.ip_forward=1  ##在文件末行添加内容

设置SNAT规则

[root@zx1 network-scripts]# iptables -t nat -A POSTROUTING -s 20.0.0.0/24 -o ens35 -j SNAT --to 12.0.0.30
[root@zx1 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  --  20.0.0.0/24          0.0.0.0/0            to:12.0.0.30
[root@zx1 network-scripts]#

加载模块

[root@zx1 network-scripts]# cd /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs
[root@zx1 ipvs]# for i in $(ls | awk -F. '{print $1}'); do modprobe $i; done
[root@zx1 ipvs]# lsmod

使用ipvsadm配置LVS-NAT模式转发规则

[root@zx1 ipvs]# yum install -y ipvsadm
[root@zx1 ipvs]# touch /etc/sysconfig/ipvsadm
[root@zx1 sysconfig]# systemctl start ipvsadm
[root@zx1 sysconfig]# systemctl status ipvsadm
[root@zx1 sysconfig]# systemctl enable ipvsadm
[root@zx1 sysconfig]# ipvsadm -A -t 12.0.0.30:80 -s rr
[root@zx1 sysconfig]# ipvsadm -a -t 12.0.0.30:80 -r 20.0.0.20:80 -m
[root@zx1 sysconfig]# ipvsadm -a -t 12.0.0.30:80 -r 20.0.0.30:80 -m
[root@zx1 sysconfig]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  zx1:http rr
  -> 20.0.0.20:http               Masq    1      0          0
  -> 20.0.0.30:http               Masq    1      0          0
[root@zx1 sysconfig]# 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.30:80 rr
  -> 20.0.0.20:80                 Masq    1      0          0
  -> 20.0.0.30:80                 Masq    1      0          0
[root@zx1 sysconfig]#

(6)windows测试

网页验证

  • 28
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值