LVS集群

一. LVS集群相关知识:

1. 集群和分布式:

系统性能扩展方式:

  • Scale UP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务 升级单机的硬件设备

  • Scale Out:水平扩展,向外扩展,增加设备,并行地运行多个服务调度分配问题,Cluster

注意:

垂直扩展不再提及:

随着计算机性能的增长,其价格会成倍增长,单台计算机的性能是有上限的,不可能无限制地垂直扩展,多核CPU意味着即使是单台计算机也可以并行的。

1.1 集群 Cluster:

Cluster:集群,为解决某个特定问题将多台计算机组合起来形成的单个系统

Cluster分为三种类型:

  • LB: Load Balancing,负载均衡,多个主机组成,每个主机只承担一部分访问请求
  • HA: High Availiablity,高可用,避免 SPOF(single Point Of failure)
  • HPC: High-performance computing,高性能

知识拓展:

MTBF: Mean Time Between Failure 平均无故障时间,正常时间

MTTR: Mean Time To Restoration( repair)平均恢复前时间,故障时间

A = MTBF /(MTBF+MTTR) (0,1):99%,99.5%,99.9%,99.99%,99.999%

SLA:服务等级协议(简称:SLA,全称:service level agreement)。是在一定开销下为保障服

务的性能和可用性,服务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服

务质量的主要因素。在常规的领域中,总是设定所谓的三个9,四个9来进行表示,当没有达到这

种水平的时候,就会有一些列的惩罚措施,而运维,最主要的目标就是达成这种服务水平。

停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外停机时间。

1.2 分布式系统:

分布式存储:Ceph,GlusterFS,FastDFS,MogileFS

分布式计算:hadoop,Spark

分布式常见应用:

  • 分布式应用-服务按照功能拆分,使用微服务(单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值服务)
  • 分布式静态资源--静态资源放在不同的存储集群上
  • 分布式数据和存储--使用key-value缓存系统
  • 分布式计算--对特殊业务使用分布式计算,比如Hadoop集群

1.3 集群和分布式:

集群

同一个业务系统,部署在多台服务器上。集群中,每一台服务器实现的功能没有差别,数据和代码都是一样的。

分布式:

一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完整的业务。

分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决定由给哪一台去完成响应,并且一台服务器垮了,其它的服务器可以顶上来。

分布式的每一个节点,都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败。

1.4 集群设计原则:

可扩展性 ------ 集群的横向扩展能力

可用性 ------ 无故障时间 (SLA service level agreement)

性能 ------ 访问响应时间

容量 ------ 单位时间内的最大并发吞吐量(C10K 并发问题)

1.5 集群设计实现:

基础设施层面
  • 提升硬件资源性能---从入口防火墙到后端 web server 均使用更高性能的硬件资源
  • 多域名---DNS 轮询A记录解析
  • 多入口---将A记录解析到多个公网IP入口
  • 多机房---同城+异地容灾
  • CDN(Content Delivery Network)---基于GSLB(Global Server Load Balance)实现全局负载均衡,如:DNS
业务层面:
  • 分层:安全层、负载层、静态层、动态层、(缓存层、存储层)持久化与非持久化

  • 分割:基于功能分割大业务为小服务

  • 分布式:对于特殊场景的业务,使用分布式计算

1.6 LB Cluster 负载均衡集群:

1.6.1 按实现方式划分:

硬件:

F5 Big-IP(F5服务器负载均衡模块)

Citrix Netscaler

A10 A10

软件:

lvs:Linux Virtual Server,阿里四层 SLB (Server Load Balance) 使用

nginx:支持七层调度,阿里七层SLB使用 Tengine

haproxy:支持七层调度

ats:Apache Traffic Server,yahoo捐助给apache

perlbal:Perl 编写

pound

1.6.2 基于工作的协议层次划分:

传输层(通用):DNAT 和 DPORT

LVS:

nginx:stream

haproxy:mode tcp

应用层(专用):针对特定协议,常称为 proxy server

http:nginx, httpd, haproxy(mode http), ...

fastcgi:nginx, httpd, ...

mysql:mysql-proxy, mycat...

1.6.3 负载均衡的会话保持:

1. session sticky :同一用户调度固定服务器

Source IP:LVS sh算法(对某一特定服务而言)

2.session replication:每台服务器拥有全部session(复制)

session multicast cluster

3.session server:专门的session服务器(server)

Memcached,Redis

1.7 HA 高可用集群实现:

keepalived:vrrp协议

Ais:应用接口规范

heartbeat

cman+rgmanager(RHCS)

coresync_pacemaker

2.Linux Virtual Server 简介:

2.1 LVS介绍:

LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩(花名正明), 阿里的四层SLB(Server Load Balance)是基于LVS+keepalived实现

SLB(Server Load Balance)是基于LVS+keepalived实现

整个SLB系统由3部分构成:四层负载均衡,七层负载均衡和控制系统

四层负载均衡 ,采用开源软件LVS(linux virtual server),并根据云计算需求对其进行了定制化;该技术已经在阿里巴巴内部业务全面上线应用2年多
七层负载均衡,采用开源软件Tengine;该技术已经在阿里巴巴内部业务全面上线应用3年多;

控制系统,用于配置和监控负载均衡系统;

2.2 LVS工作原理:

VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS。LVS是内核级功能,工作在INPUT链的位置,将发往INPUT的流量进行"处理"

2.3 LVS集群体系架构:

第一层:负载调度器 :通过VIP接收用户的请求,再通过调度算法确定要转发的节点服务器

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

第二层:服务器池中的节点服务器 : 通过RIP接收调度器转发来的请求,并处理请求进行响应

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

第三层:共享存储 :为各个节点服务器提供稳定、一致的文件存取服务,比如NAS+NFS,文件服务器+NFS,分布式对象存储等存储设备

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

(因为节点服务器的资源都是由NAS或NFS提供,所以NAS或NFS需要做主备、或分布式,从而实现高可用。)

2.4 LVS 功能及组织架构:

负载均衡的应用场景为高访问量的业务,提高应用程序的可用性和可靠性。

① 应用于高访问量的业务

如果您的应用访问量很高,可以通过配置监听规则将流量分发到不同的云服务器 ECS(Elastic Compute Service 弹性计算服务)实例上。此外,可以使用会话保持功能将同一客户端的请求转发到同一台后端ECS

② 扩展应用程序

可以根据业务发展的需要,随时添加和移除ECS实例来扩展应用系统的服务能力,适用于各种Web服务器和App服务器。

③ 消除单点故障

可以在负载均衡实例下添加多台ECS实例。当其中一部分ECS实例发生故障后,负载均衡会自动屏蔽故障的ECS实例,将请求分发给正常运行的ECS实例,保证应用系统仍能正常工作

④ 同城容灾(多可用区容灾)

为了提供更加稳定可靠的负载均衡服务,阿里云负载均衡已在各地域部署了多可用区以实现同地域容灾。当主可用区出现机房故障或不可用时,负载均衡仍然有能力在非常短的时间内(如:大约30s中断)切换到另外一个备可用区恢复服务能力;当主可用区恢复时,负载均衡同样会自动切换到主可用区提供服务。使用负载均衡时,您可以将负载均衡实例部署在支持多可用区的地域以实现同城容灾。此外,建议您结合自身的应用需要,综合考虑后端服务器的部署。如果您的每个可用区均至少添加了一台ECS实例,那么此种部署模式下的负载均衡服务的效率是最高的。

2.5 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 (代理服务器的外网ip)
  • DIP:Director IP VS内网的IP (代理服务器的内网ip)
  • RIP:Real server IP (真实服务器的IP地址)

3.LVS工作模式和相关命令:

3.1 LVS 集群的工作模式:

  • lvs-nat:修改请求报文的目标IP,多目标IP的DNAT

  • lvs-dr:操纵封装新的MAC地址(直接路由)

  • lvs-tun:隧道模式

3.1.1LVS 的NAT模式:

过程:

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

PORT实现转发

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

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

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

(4)VS必须是Linux系统,RS可以是任意OS系统

3.1.2 IP隧道:
  1. RIP和DIP可以不处于同一物理网络中,RS的网关一般不能指向DIP,且RIP可以和公网通信。也就是

    说集群节点可以跨互联网实现。DIP, VIP, RIP可以是公网地址。

  2. RealServer的通道接口上需要配置VIP地址,以便接收DIP转发过来的数据包,以及作为响应的

    报文源IP。

  3. DIP转发给RealServer时需要借助隧道,隧道外层的IP头部的源IP是DIP,目标IP是RIP,而

    RealServer响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP

  4. 请求报文要经由Director,但响应不经由Director,响应由RealServer自己完成

  5. 不支持端口映射

  6. RS的OS须支持隧道功能一般来说,隧道模式常会用来负载调度缓存服务器组,这些缓存服务器一般放置在不同的网络环境,可以就近

折返给客户端。在请求对象不在Cache服务器本地命中的情况下,Cache服务器要向源服务器发送请求,将结

果取回,最后将结果返回给用户。

3.1.3 直接路由:

直接路由(Direct Routing):简称 DR 模式,采用半开放式的网络结构,与 TUN

模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。

负载调度器与各节点服务器通过本地网络连接,不需要建立专用的 IP 隧道

直接路由,LVS默认模式,应用最广泛,通过请求报文重新封装一个MAC首部

进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变

DR模式的特点:

  1. Director和各RS都配置有VIP

  2. 确保前端路由器将目标IP为VIP的请求报文发往Director

  3. RS和Director要在同一个物理网络

  4. 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client

  5. 不支持端口映射(端口不能修改)

  6. 无需开启 ip_forward

  7. RS可使用大多数OS系统

3.1.4 LVS工作模式总结和比较:

NAT TUN DR
优点 端口转换 WAN 性能最好
缺点 性能瓶颈 服务器支持隧道模式 不支持跨网段
真实服务器要求 any Tunneling Non-arp device
支持网络 private(私网) LAN/WAN(私网/公网) LAN(私网)
真实服务器数量 low (10~20) High (100) High (100)
真实服务器网关 lvs内网地址 Own router(网工定义) Own router(网工定义)

3.2 LVS调度算法:

ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态

分为两种:静态方法和动态方法

**静态方法:**不管后端真实服务器的状态,根据自身算法进行调度

**动态方法:**会根据后端服务器的状态来进行调度

静态::

1、RR:roundrobin,轮询,较常用

2、WRR:Weighted RR,加权轮询,较常用

3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定

4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如: Web

动态:

一个参考值来确定服务器是否忙,这个值越小,代表服务器闲 就会优先调度服务器

主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度

这个值越小 ,代表服务器闲 就会优先调度给闲的服务器

1、LC:least connections 适用于长连接应用

2、WLC:Weighted LC,默认调度方法,较常用

3、SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接

4、NQ:Never Queue,第一轮均匀分配,后续SED

5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现Web Cache等

6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,,实现Web Cache等

4 ipvsadm 工具:

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

bash 复制代码
#管理集群服务
 
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
 
ipvsadm -D -t|u|f service-address   #删除
ipvsadm --C #清空
ipvsadm --R #重载,相当于ipvsadm-restore
ipvsadm -S [-n] #保存,相当于ipvsadm-save
 
 
#管理集群中的RS
 
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]  
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
 
选项:
lvs类型:
    -g: gateway, dr类型,默认
    -i: ipip, tun类型
    -m: masquerade, nat类型        
    -w weight:权重
 
例子:
ipvsadm -A -t 12.0.0.1:80 -s rr   #定义代理服务器  -A 新建代理服务器  -t  tcp协议  -s  rr 算法
ipvsadm -a -t 12.0.0.1:80 -r 192.168.40.20:80 -m   #定义真实服务器  -a 
ipvsadm -a -t 12.0.0.1:80 -r 192.168.40.30:80 -m     -r  认12.0.0.1做代理   -m  nat类型

配置文件:

Unit File: ipvsadm.service

主程序:/usr/sbin/ipvsadm

规则保存工具:/usr/sbin/ipvsadm-save

规则重载工具:/usr/sbin/ipvsadm-restore

配置文件:/etc/sysconfig/ipvsadm-config

ipvs调度规则文件:/etc/sysconfig/ipvsadm

二. NAT模式 LVS负载均衡部署:

配置环境:

bash 复制代码
负载调度器:配置双网卡 内网:192.168.91.3(ens33)  外网卡:12.0.0.1(ens36)
 
二台WEB服务器集群池:192.168.44.4、192.168.44.5    
 
一台NFS共享服务器:192.168.44.7

1.关掉防火墙和selinux:

bash 复制代码
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# 

2.配置7-4NFS服务器:

**安装NFS:**yum install nfs-utils rpcbind -y
开启NFS:systemctl start nfs

配置共享文件:

bash 复制代码
[root@localhost ~]# mkdir /share
[root@localhost ~]# vim /etc/exports
[root@localhost ~]# 
[root@localhost ~]# exportfs -r
exportfs: No options for /share *: suggest *(sync) to avoid warning
[root@localhost ~]# exportfs -v
/share        	<world>(ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
bash 复制代码
/share	*

更改配置文件:

bash 复制代码
[root@localhost ~]# mv /share  /benet
[root@localhost ~]# mkdir /accp
[root@localhost ~]# 
bash 复制代码
[root@localhost ~]# vim /etc/exports
 
/benet  *
/accp   *

查看:

bash 复制代码
[root@localhost ~]# exportfs -r
exportfs: No options for /benet *: suggest *(sync) to avoid warning
exportfs: No options for /accp *: suggest *(sync) to avoid warning
[root@localhost ~]# exportfs -v
/benet        	<world>(ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
/accp         	<world>(ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
[root@localhost ~]# 

写点内容 到文件夹中方便测试查看:

bash 复制代码
[root@localhost ~]# cd /accp
[root@localhost accp]# echo accp > index.html
[root@localhost accp]# cat index.html
accp
[root@localhost accp]# echo benet > /benet/index.html
[root@localhost accp]# cat /benet/index.html
benet
[root@localhost accp]#

3.配置7-2Web服务器

bash 复制代码
[root@localhost ~]# showmount -e 192.168.91.7#7-4的地址
Export list for 192.168.91.7:
/accp  *
/benet *
[root@localhost ~]# 

开启httpd服务:

挂载:

将共享文件夹accp,挂载到主站点目录下

代理服务器7-1curl访问本机7-2,查看共享结果:

4.配置7-3Web服务器:

挂载,开启httpd服务:

代理服务器7-1curl访问7-3,查看共享结果:

扩展:如果报错拒绝连接

解决方案:

端口号不对,去那个机器配置文件更改成80端口号

5.配置7-1代理服务器和网关:

配置ens36网卡:

看路由信息:

开启路由转发:

在此配置文件中添加:

查看:

bash 复制代码
[root@localhost network-scripts]# sysctl -p
net.ipv4.ip_forward = 1
[root@localhost network-scripts]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0

安装ipvsadm:

网络源安装:

bash 复制代码
yum install ipvsadm.x86_64 86_64 -y

搭建本地yum仓库安装:

bash 复制代码
[root@localhost network-scripts]# cd /etc/yum.repos.d
[root@localhost yum.repos.d]# mkdir bak
[root@localhost yum.repos.d]# mv *.repo bak/
[root@localhost yum.repos.d]# vim local.repo
 
 
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
bash 复制代码
[root@localhost yum.repos.d]# mount /dev/sr0 /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
 
[root@localhost yum.repos.d]# yum clean all#清缓存
已加载插件:fastestmirror, langpacks
 
[root@localhost yum.repos.d]# yum makecache#建立元数据
已加载插件:fastestmirror, langpacks
元数据缓存已建立
 
[root@localhost yum.repos.d]# yum install ipvsadm.x86_64 -y#直接安装
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile

开启ipvsadm软件:

bash 复制代码
[root@localhost yum.repos.d]# ipvsadm-save > /etc/sysconfig/ipvsadm

配置负载调度器ipvsadm:

bash 复制代码
[root@localhost yum.repos.d]# ipvsadm -C#清空策略
[root@localhost yum.repos.d]# ipvsadm -ln#查看策略
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@localhost yum.repos.d]# ipvsadm -A -t 12.0.0.1:80 -s rr
[root@localhost yum.repos.d]# 
 
###12.0.0.1为7-1,ens36网卡地址(网关)

6.配置网关:

修改7-1网关地址:

修改网卡自己就是网关

修改7-2网关地址:

修改7-3网关地址:

7.用代理服务器7-1curl查看结果:

实现轮询:

相关推荐
kobeyyl19 小时前
LVS项目全套知识点总结
lvs
Stewie121381 天前
LVS 项目知识点总结
lvs
Y_cheng_1 天前
LVS知识梳理
运维·服务器·lvs
高卧怡怡1 天前
LVS认识及基础详解
lvs
椿.湫1 天前
lvs技术
服务器·网络·lvs
懒神降世1 天前
LVS负载均衡集群项目总结(二)
运维·负载均衡·lvs
高磊20052 天前
LVS(Linux virual server)
linux·服务器·lvs
梦Arrebol2 天前
lvs项目知识点总结
lvs
养海绵宝宝的小蜗2 天前
LVS(Linux Virtual Server)项目知识点总结
linux·运维·lvs
池以遇2 天前
云原生——LVS
运维·云原生·lvs