LVS负载均衡群集——其一
LVS负载均衡群集
一、LVS简介
LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式。
(https://cloud.tencent.com/developer/article/2054205)
群集:
cluster,集群、群集
多台主机构成,表现为一个整体,只提供一个访问入口(域名、IP地址),相当于一台大型计算机,与集群相反的叫分布式
目的:满足互联网对站点性能、响应速度、稳定性、可靠性的高要求
特点:多台主机构成,都干同一件事,对外展现为一个整体
二、群集分三类
1.负载均衡群集(load balance cluster)LB
提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体性能
LB的负载分配依赖于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而缓解整个系统的负载压力。例如,“DNS轮询” “反向代理”等
典型代表:软件类:LVS(基于内核转发)、Nginx(基于软件转发)、HAProxy等;硬件类:F5、绿盟等
2.高可用群集(high availability cluster)HA
提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用 (HA)的容错效果(几个九,99.9%)
HA的工作方式包括双工和主从两种模式,双工即所有节点同时在线主从则只有主节点在线,但当出现故障时从节点能自动切换为主节点例如,“故障切换”“双机热备”等
典型代表:keepalived、heartbeat
3.高性能运算群集(high performance computer cluster)HPC
以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力
高性能依赖于“分布式运算”、“并行计算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力。例如,“云计算”“网格计算”等
通过云计算或分布式计算来获取高性能的CPU、内存等资源,来提高整体运算能力
三、负载均衡的结构类型
几个九,三个九(99.9%)五个久(99.999%)
第一层,负载调度器(load balabcer或director)
访问整个群集系统的唯一入口,对外使用所有服务器共有的VIP地址,也称为群集IP 地址。通常会配置主、备两台调度器实现热备份,当主调度器失效以后能够平滑替换至备用调度器,确保高可用性。
第二层,服务器池(Server Pool)
群集所提供的应用服务、由服务器池承担,其中每个节点具有独立的RIP地址(真实IP),只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池。
第三层,共享存储(Share Storage)
为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个群集的统一性共享存储可以使用NAS设备,或者提供NFS共享服务的专用服务器
资源池方便了集群里每个服务器调用相同资源,即为共享存储。
四、负载均衡集群工作模式
1.地址转换(NAT模式)
类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口
服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式
调度机会做网关,承载双向流通压力;有一定的安全性
调度器会作为所有节点服务器的默认网关,也是客户端的访问入口和节点服务器返回响应消息的出口,也就是说调度器会承载双向数据流量的负载压力,可能会成为整个群集的性能瓶颈。由于节点服务器都处于内网环境,使用私网IP地址,所有具有一定的安全性。
2.IP隧道(TUN模式)
采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器
服务器节点分散在互联网中的不同位置具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信
调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不需要经过调度器。但是由于节点服务器需要部署在不同位置的公网环境中,需要具有独立的公网IP,调度器与节点服务器是通过专用的IP隧道实现相互通信的,因此IP隧道模式的成本较高,安全性较低,且IP隧道需要额外的封装和解封装,性能会受到一定影响
3.直接路由(DR模式)
采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络
负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道
调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不需要经过调度器。(与NAT模式的区别)
节点服务器与调度器是部署在同一个物理网络内,因此不需要建立专用的IP隧道。(与TUN模式的区别)
DR模式是企业首选的LVS模式
modprobe ip_vs
cat /proc/net/
ls /usr/lib/modules/3.10.0-1160.71.1.el7.x86_64/kernel/net/netfilter/ipvs
awk -F . '{print $1}'
[root@localhost ~]#for i in `ls /usr/lib/modules/3.10.0-1160.71.1.el7.x86_64/kernel/net/netfilter/ipvs`;
do k=`echo $i | awk -F . '{print $1}'`;
modprobe $k;
done
ls ip_vs.ko.xz | grep -o "^[^.]*"
LVS的负载调度算法
轮询(round robin)
将收到的访问请求按照顺序轮流分配给各节点
加权轮询(weighted round robin)
权重值高的优先获得任务,分配的请求数更高
保证性能强的服务器承担更多访问流量
最少连接(least connections)
将收到的访问请求优先分给连接数最少的节点
加权最少连接(weighted least connections)
连接数/权重=num,num越小越先被分配
LVS调度算法
rr轮询 wrr加权轮询 sh源地址哈希 dh目的地址哈希 lc最小连接 wlc加权最小连接 lblc基于地址的最小连接
LVS-NAT模式配置步骤:
1)配置NFS共享存储
2)节点服务器安装web服务(apache、nginx、tomcat),注意:默认网关要指向调度器的IP地址,测试的时候关闭连接保存
3)调度服务器要设置IP路由转发功能和设置SNAT等iptables规则,安装ipvsadm工具,配置虚拟服务器和真实节点服务器相关配置
4)客户端测试的时候,网关要指向调度器的IP地址
使用ipcsadm工具,工具选项:
ipvsadm 工具选项说明:
-A:添加虚拟服务器
-D:删除整个虚拟服务器
-s:指定负载调度算法(轮询: rr、加权轮询: wrr、最少连接: c、加权最少连接: wlc)
-a:表示添加真实服务器(节点服务器)
-d:删除某一个节点
-t:指定 VIP地址及 TCP端口
-r:指定 RIP地址及 TCP端口
-m:表示使用 NAT群集模式
-g:表示使用 DR模式
-i:表示使用 TUN模式
-w: 设置权重(权重为 时表示暂停节点)
-P 60: 表示保持长连接60秒(默认关闭连接保持)
-l:列表查看 Lvs 虚拟服务器(默认为查看所有 )
-n:以数字形式显示地址、端口等信息,常与"-l"选项组合使用。ipvsadm -ln [-t VIP:PORT]
五、LVS-NAT部署实战
前提准备,关闭防火墙,不然会出现403禁止
负载调度器:内网关 ens33:192.168.177.10,外网关 ens36:12.0.0.10 Web节点服务器1:192.168.177.104 Web节点服务器2:192.168.177.105 NFS服务器:192.168.177.106 客户端:12.0.0.120
1.部署共享存储
(NFS服务器:192.168.177.106)
06号机器做NFS共享端
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
yum install nfs-utils rpcbind -y
systemctl start rpcbind.service
systemctl start nfs.service
systemctl enable nfs.service
systemctl enable rpcbind.service
mkdir /opt/kgc /opt/benet
chmod 777 /opt/kgc /opt/benet
echo '内容' > /opt/kgc/index.html
echo '内容' > /opt/benet/index.html
[root@localhost ~]# rpm -q rpcbind nfs-utils
rpcbind-0.2.0-42.el7.x86_64
nfs-utils-1.3.0-0.48.el7.x86_64
[root@localhost opt]#vim /etc/exprots
/opt/ky31 192.168.177.0/24(rw,sync,no_root_squash)
/opt/ky32 192.168.177.0/24(rw,sync,no_root_squash)
[root@localhost opt]# systemctl enable --now rpcbind nfs
验证
06号机上
[root@localhost opt]# showmount -e
Export list for localhost.localdomain:
/opt/ky32 192.168.177.0/24
/opt/ky31 192.168.177.0/24
04机上
[root@localhost ~]# showmount -e 192.168.177.106
Export list for 192.168.177.106:
/opt/ky32 192.168.177.0/24
/opt/ky31 192.168.177.0/24
05机上
[root@localhost ~]# showmount -e 192.168.177.106
Export list for 192.168.177.106:
/opt/ky32 192.168.177.0/24
/opt/ky31 192.168.177.0/24
2.配置节点服务器
(192.168.177.105、192.168.177.104)
04号机,安装nginx,服务名nginx
cd /etc/yum.repos.d/
mkdir repo.bak
mv *.repo repo.bak
vim nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
###1、安装、启动
yum install -y nginx
systemctl start httpd.service
systemctl enable httpd.service
vim /etc/nginx/conf.d/default.conf #进入配置文件找默认根目录
#根目录在/usr/share/nginx/html
#移走根目录源文件
cd /usr/share/nginx/html/
mv * /opt/
###2、挂载到根目录
mount 192.168.177.106:/opt/ky31 /usr/share/nginx/html/
# 文件再移回来
mv /opt/* /usr/share/nginx/html/
####永久挂载
vim /etc/fstab
192.168.177.106:/opt/ky31 /usr/share/nginx/html nfs defaults,_netdev 0 0

05号机,安装apache,服务名httpd
###1、安装
yum install -y httpd
vim /etc/httpd/conf/httpd.conf
#95行
ServerName www.yml.com:80
#添加关闭长连接命令,提升实验流畅性
KeepAlive off
###2、挂载到根目录
mount 192.168.177.106:/opt/ky32 /var/www/html/
systemctl enable --now httpd
####永久挂载
vim /etc/fstab
192.168.177.106:/opt/ky32 /var/www/html nfs defaults,_netdev 0 0
验证:

3.配置负载调度器
(内网关 ens33:192.168.177.103,外网关 ens36:12.0.0.10)
03号机网关服务器,配置双网卡
cd /etc/sysconfig/network-scripts/
cp ens-33 ens-36
[root@localhost network-scripts]#vim ifcfg-ens36#192.168.177.103
[root@localhost network-scripts]#vim ifcfg-ens33#12.0.0.10
#注释网关、DNS服务器地址

测试

网关服务器再开启IP转发功能
#vim /etc/sysctl.conf
#写入
net.ipv4.ip_forward=1
[root@localhost ~]#sysctl -p
net.ipv4.ip_forward = 1
#仅仅给网关增加路由转发功能还不够
节点服务器04号、05号将网关改成网关服务器的地址(192.168.177.103)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.177.103
#刷新
systemctl restart network
实现内网访问外网:
(1)网关配置SNAT转发规则
# 网关服务器上
iptables -nL
iptables -F#清除规则
iptables -F -t nat#清除nat表规则
#添加snat
[root@localhost ~]#iptables -t nat -A POSTROUTING -s 192.168.177.0/24 -o ens36 -j SNAT --to 12.0.0.10
#36:12.0.0.10;33:192.169.177.103
(2)加载LVS内核模块
[root@localhost ~]#cd /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/net/netfilter/ipvs/
[root@localhost ipvs]#ls
ip_vs_dh.ko.xz ip_vs_lblc.ko.xz ip_vs_nq.ko.xz ip_vs_sed.ko.xz ip_vs_wrr.ko.xz
ip_vs_ftp.ko.xz ip_vs_lblcr.ko.xz ip_vs_pe_sip.ko.xz ip_vs_sh.ko.xz
ip_vs.ko.xz ip_vs_lc.ko.xz ip_vs_rr.ko.xz ip_vs_wlc.ko.xz
#使用for循环加载所以模块
[root@localhost ipvs]#for i in ` ls /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/net/netfilter/ipvs/ | grep -o "^[^.]*"`
> do
> modprobe $i
> done
#查看
[root@localhost ipvs]#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
(3)安装ipvs工具
yum install -y ipvsadm
04号机上永久挂载nfs
vim /etc/fstab
192.168.177.106:/opt/ky31 /var/www/html nfs defaults,_netdev 0 0
#启动
#先失败,缺文件,看日志
9月 08 23:57:33 localhost.localdomain bash[57712]: /bin/bash: /etc/sysconfig/ipvsadm: 没有那个文件或目录
#解决方法——创建文件
touch /etc/sysconfig/ipvsadm
#或
ipvsadm-save /etc/sysconfig/ipvsadm
(4)配置负载均衡,利用工具
大致三步
1、先看是否已经有策略
ipvsadm -ln
存在则删除ipvsadm -C
2、进行配置
[root@localhost ~]#ipvsadm -A -t 12.0.0.10:80 -s rr
[root@localhost yum.repos.d]#ipvsadm -a -t 12.0.0.10:80 -r 192.168.177.104:80 -m
[root@localhost yum.repos.d]#ipvsadm -a -t 12.0.0.10:80 -r 192.168.177.105:80 -m
-A用于确定具体服务器
-D删除整个虚拟服务器
-t指定虚拟服务器的vip地址(与外网对接的ip地址)
-s指定调度算法(rr:轮询、wrr:加权轮询、lc:最少连接、wlc:加权最少连接)
-p 60指定长连接,等待60秒(默认关闭)
ipvsadm -a -t 12.0.0.10:80 -r 192.168.177. -s rr
-a确定真实服务器
-t指定虚拟服务器的IP地址与端口号
-r指定真实服务器的IP地址与端口号
-m使用NAT模式
-g使用DR模式
-i使用TUN模式
-w设置权重(为0表示暂停节点)
-l列表查看LVS虚拟服务器(默认查看所有)
-n以数字形式显示地址、端口等信息(常与"-l"共同使用)
3、激活
[root@localhost ~]#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.177.104:http Masq 1 0 0
-> 192.168.177.105:http Masq 1 0 0

验证:客户机(12.0.0.120)访问网关

测试时需要关闭NGINX上的长连接
04号机安装的Nginx
04机上
cd /etc/httpd/conf/
vim httpd.conf
KeepAlive 0;
后记:ipvsadm工具
策略配置是临时的,工具一关闭策略就消失
#保存
ipvsadm-save > /opt/ipvsadm#任意文件
#删除
[root@localhost ~]#ipvsadm -ln
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.177.104:http Masq 1 0 0
-> 192.168.177.105:http Masq 1 0 0
#删除单条策略-d
[root@localhost ~]#ipvsadm -d -t 12.0.0.10:80 -r 192.168.177.105:80 -m
[root@localhost ~]#ipvsadm -ln
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.177.104:http Masq 1 0 0
#删除全部策略-D
[root@localhost ~]#ipvsadm -D -t 12.0.0.10:80
[root@localhost ~]#ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
恢复
[root@localhost ~]#ipvsadm-restore < /opt/ipvsadm#之前保存的文件位置
[root@localhost ~]#ipvsadm -ln
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.177.104:http Masq 1 0 0
-> 192.168.177.105:http Masq 1 0 0
LVS负载均衡群集——其一的更多相关文章
- LVS负载均衡群集部署——DR模式
LVS负载均衡群集部署--DR模式 1.LVS-DR概述 2.部署实验 1.LVS-DR概述: LVS-DR(Linux Virtual Server Director Server)工作模式,是生产 ...
- LVS负载均衡群集部署——NAT模式
LVS负载均衡群集部署--NAT模式 1.群集应用概述 2.NAT模式LVS负载均衡群集部署 1.群集应用概述: 存在的问题: 互联网应用中,随着站点对硬件性能.响应速度.服务稳定性.数据可靠性等要求 ...
- 21.LVS负载均衡群集-DR群集
LVS负载均衡群集-DR群集 目录 LVS负载均衡群集-DR群集 数据包流向分析 DR模式的特点 LVS-DR中的ARP问题 IP地址冲突 解决办法 路由根据ARP表项,会将新来的请求报文转发给Rea ...
- 20.LVS负载均衡群集—NAT模式实例
LVS负载均衡群集-NAT模式实例 目录 LVS负载均衡群集-NAT模式实例 群集引用概述 群集的含义 问题 解决方法 企业群集分类 群集的三种类型 负载均衡群集(Load Balance Clust ...
- NAT模式 LVS负载均衡群集部署
NAT模式 LVS负载均衡群集部署的操作步骤 实验环境准备: 负载调度器:内网关 ens33:172.16.10.1,外网关 ens37:12.0.0.1 Web节点服务器1:172.16.10.10 ...
- LVS负载均衡群集
概述 群集的类型:无论是哪种服务器,都至少包括两台节点服务器,而对外表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机.根据群集所针对的目标差异,可以分为以下三个类型: 1.负 ...
- 搭建Lvs负载均衡群集
一.Lvs详解 lvs内核模型 1.模型分析 用户访问的数据可以进入调度器 匹配调度器分配的虚拟IP|IP+端口(路由走向) 根据调度器的算法确定匹配的服务器 2.调度条件:基于IP.基于端口.基于内 ...
- LVS负载均衡群集(NAT)
----构建NAT模式的LVS群集----------client---------------LVS----------------WEB1-----------WEB2------------NF ...
- LVS负载均衡集群--DR模式部署
目录: 一.LVS-DR数据包流向分析 二.DR 模式的特点 三.LVS-DR中的ARP问题 四.DR模式 LVS负载均衡群集部署 一.LVS-DR数据包流向分析 1.为方便进行原理分析,将clien ...
- LVS负载均衡集群--NAT模式部署
目录: 一.企业群集应用概述 二.负载均衡群集架构 三.负载均衡群集工作模式分析 四.关于LVS虚拟服务器 五.NAT模式 LVS负载均衡群集部署 一.企业群集应用概述 1.群集的含义 Cluster ...
随机推荐
- Centos使用keepalived配置MySQL双主热备集群
目录 安装MySQL 下载安装包 卸载mariadb-lib 安装依赖 安装gcc 安装perl 永久关闭selinux 安装 配置 创建mysql数据库管理用户和组 创建数据目录 修改my.cnf配 ...
- 图像分割_评价指标_PSNR峰值信噪比和SSIM结构相似度
PSNR psnr是"Peak Signal to Noise Ratio"的缩写,即峰值信噪比,是一种评价图像的客观标准. 为了衡量经过处理后的影像品质,我们通常会参考PSNR值 ...
- LNMP环境搭建wordPress
LNMP linux Nginx --apache Mysql php 在redhat上LNMP的搭建 首先配置软件源仓库 给redhat选择ISO镜像并连接 输入下面代码后:wq保存并退出 [Bas ...
- 利用Anaconda3安装tensorflow/keras,并迁移虚拟环境至不能上网的电脑
利用Anaconda3安装tensorflow/keras,并迁移虚拟环境至不能上网的电脑 下面记录下利用Anaconda安装tensorflow和keras,前前后后也踩了不少坑.并分别在windo ...
- PTA 21级数据结构与算法实验4—字符串和数组
目录 7-1 字符串模式匹配(KMP) 7-2 [模板]KMP字符串匹配 7-3 统计子串 7-4 好中缀 7-5 病毒变种 7-6 判断对称矩阵 7-7 三元组顺序表表示的稀疏矩阵转置运算Ⅰ 7-8 ...
- OSS的使用(谷粒商城58-64)
OSS的使用(谷粒商城58-64) 购买之类的就不在这里详述了,阿里云文档几乎都写了 创建bucket 学习阶段,相对独特的点在于我们需要选择公共读 项目开发阶段,不能选择公共读了,要尽量选择私有(代 ...
- K8S | Deployment应用编排
目录 一.背景 二.Deployment组件 1.简介 2.语法说明 三.基础用例 1.创建操作 2.查看信息 3.更新操作 4.删除操作 四.进阶用例 1.回滚操作 2.伸缩操作 3.暂停与恢复 五 ...
- 获取Rtx用户状态方法
背景:企业OA系统需要与Rtx集成,且高权限身份用户需要获取符合某一条下的所有员工rtx状态... 方案:以此背景,基于rtx sdk做二次开发, 1.后台调用RootObj.QueryUserSta ...
- 解决npm install 报错 'proxy' config is set properly. See: 'npm help config'
输入以下命令 npm config set proxy null npm config set https-proxy null 之后重新安装即可 文章参考 https://blog.csdn.net ...
- openpyxl 设置某列单元格样式
1 # 边框线 2 border_set = Border(left=Side(border_style='thin', color='000000'), 3 right=Side(border_st ...