linux之Load Balancing(LB)集群基础知识

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介:

----本文大纲

集群定义

扩展类型

集群类型

LB(负载均衡)集群

一、集群定义

集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面

的 相对较高的收益,其任务调度则是集群系统中的核心技术。集群是一组相互独立的、通过高速网络互联的计算机,

它们构成了一个组,并以单一系统的模式加以管 理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群

配置是用于提高可用性和可缩放性。集群系统的主要优点:高可扩展性、高可用性、高性能、高 性价比。

二、扩展类型

1.scale on:向上扩展

将服务器的内存容量调大和cpu数量增加些(简单说升级服务器硬件)

缺点:在一定的范围之内它的性能是上升的趋势,但是超出范围之后就是下降的趋势。因为随着它的cpu的个数以及我

们需要给cpu仲裁,而且随着cpu个数的增加资源竞争性越大。

2.scale out:向外扩展

一台服务器应付不过来,我们就再增加一台服务器。

优点:增减服务器很方便,而且没有向上扩展随着增加性能下降。

向外扩张的工作模式:当客户端向服务器端发送请求,服务器端只拿出来一台服务器来相应我们的客户端的请求。

三、集群类型

1、LB:Load Balancing:负载均衡集群

负载均衡集群中有一个分发器或者叫调度器,我们将其称之为Director,它处在多台服务器的上面,分发器根据内部

锁定义的规则或调度方式从下面的服务器群中选择一个以此来响应客户端发送的请求。

2、HA:High Availability 高可用集群

高可用集群是服务的可用性比较高,当我们某台服务器死机后不会造成我们的 服务不可用。其工作模式则是将一个具有故障的服务转交给一个正常工作的服务器,从而达到服务不会中断。一般来说我们集群中工作在前端(分发器)的服务器都 会对我们的后端服务器做一个健康检查,如果发现我们服务器当机就不会对其在做转发。

衡量标准:可用性=在线时间/(在线时间+故障处理时间)

99%、99.9%、99.99%、99.999%

3、HP:Hight Performance 高性能

高性能的集群是当某一个任务量非常大的时候,我们做一个集群共同来完成这一个 任务。这种处理方式我们称为并行处理集群,并行处理集群是将大任务划分为小任务,分别进行处理的机制。一般这样的集群用来科学研究与大数据运算等方面的工 作。现在比较火的Hadoop就是使用的并行处理集群。

说明:三种集群之间的区别

负载均衡着重在于提供服务并发处理能力的集群,高可用以提升服务在线的能力的集群。高性能着重用于处理一个海量数据。

四、LB(负载均衡)集群

1、LB 分类

(1)、硬件LB(比较出名的)

F5 公司的 BIG-IP系列

Citrix 公司的 NetScaler系列

A10 公司的 AX系列

(2)、软件LB

四层:LVS(Linux Virtual Server)

七层:Nginx,HAProxy

2、LVS定义

一般来说,LVS采用三层结构:负载调度器、服务器池、共享存储。工作在TCP/IP协议的四层,其转发是依赖于四层协议的特征进行转发的,由于其 转发要依赖于协议的特征进行转发,因此需要在内核的TCP/IP协议栈进行过滤筛选,可想而知,这就需要在内核的模块来完成,而这样的过滤转发规则又是由管理员进行定义的,所以,LVS就是两段式的架构设计,在内核空间中工作的是"ipvs", 而在用户空间中工作的,用来定义集群服务规则的是"ipvsadm"。这与iptables的结构多么相似啊,而LVS正好工作在iptables的input链 上。

3、LVS组成

ipvsadm:用于管理集群服务的命令行工具,工作于Linux系统中的用户空间。

ipvs:为lvs提供服务的内核模块,工作于内核空间 (相对于是框架,通过ipvsadm添加规则,来实现ipvs功能)。

注:在linux内核2.4.23之前的内核中模块默认是不存在的,需要自己手动打补丁,然后把此模块编译进内核才可以使用此功能。

4、LVS中每个主机IP地址的定义

VIP:Director用来向外部提供服务的IP地址,也就是DNS通过域名解析到的IP

RIP:集群节点(后台真正提供服务的服务器)所使用的IP地址

DIP:Director用来和RIP进行交互的IP地址

CIP:客户端使用的IP或公网IP

RS:集群节点服务器Real server

5、LVS的三种转发模式

·LVS-NAT:网络地址转换 Network address translation

·LVS-DR:直接路由 Direct routing

·LVS-TUN:IP隧道 IP tunneling

6、LVS的三种转发模式特点

LVS NAT的特性:

RS应该使用私有地址;

RS的网关的必须指向DIP;

RIP和DIP必须在同一网段内;

请求和响应的报文都得经过Director;在高负载场景中,Director很可能成为系统性能瓶颈;

支持端口映射;

RS可以使用任意支持集群服务的OS;

LVS DR类型:

让前端路由将请求发往VIP时,只能是Dirctor上的VIP;

解决方案:

1、在前端路由上实现静态MAC地址VIP的绑定;
前提:得有路由器的配置权限;
缺点:Directory故障转时,无法更新此绑定;
2、arptables
前提:在各RS在安装arptables程序,并编写arptables规则
缺点:依赖于独特功能的应用程序
3、修改Linux内核参数
前提:RS必须是Linux;
缺点:适用性差;
两个参数:
arp_announce:定义通告模式
arp_ignore:定义收到arp请求的时响应模式
配置专用路由,以使得响应报文首先通过vip所配置的lo上的别名接口

LVS DR类型的特性:

RS可以使用私有地址;但也可以使用公网地址,此时可以直接通过互联网连入RS以实现配置、监控等;

RS的网关一定不能指向DIP;

RS跟Dirctory要在同一物理网络内(不能由路由器分隔);

请求报文经过Directory,但响应报文一定不能经过Director

不支持端口映射;

RS可以使用大多数的操作系统;

LVS TUN类型:IP隧道

RIP、DIP、VIP都得是公网地址;

RS的网关不会指向也不可能指向DIP;

请求报文经过Directory,但响应报文一定不经过Director;

不支持端口映射;

RS的OS必须得支持隧道功能;

7、LVS的调度算法

⑴.rr : round robin :轮询

说明

轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。缺点:是不考虑每台服务器的处理能力。

(2).wrr: weight round robin :加权轮询(以权重之间的比例实现在各主机之间进行调度)

说明

由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。

(3).sh : source hashing : 源地址hash实现会话绑定session affinity

说明

简单的说就 是有将同一客户端的请求发给同一个real server,源地址散列调度算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的并且没有超负荷,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调 度算法的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标IP地址换成请求的源IP地址。

(4).dh : destination hashing : 目标地址hash

说明

将同样的请求发送给同一个server,一般用户于缓存服务器说,简单的说,LB集群后面又加了一层,在LB与real server之间加了一层缓存服务器,当一个客户端请求一个页面时,LB发给cache1,当第二个客户端请求同样的页面时,LB还是发给cache1, 这就是我们所说的,将同样的请求发给同一个server,来提高缓存的命中率。目标地址散列调度算法也是针对目标IP地址的负载均衡,它是一种静态映射算 法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

动态调度算法(6种):

(1).lc :leash-connection 最少连接

说明

最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,最 小连接调度是一种动态调度短算法,它通过服务器当前所活跃的连接数来估计服务器的负载均衡,调度器需要记录各个服务器已建立连接的数目,当一个请求被调度 到某台服务器,其连接数加1,当连接中止或超时,其连接数减一,在系统实现时,我们也引入当服务器的权值为0时,表示该服务器不可用而不被调度。此算法忽 略了服务器的性能问题,有的服务器性能好,有的服务器性能差,通过加权重来区分性能,所以有了下面算法wlc。

简单算法

active*256+inactive (谁的小,转发给谁)

(2).wlc :加权最少连接

说明

加权最小连接调度算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为 1,系统管理员可以动态地设置服务器的权限,加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。由于服务器的性能不同,我们给 性能相对好的服务器,加大权重,即会接收到更多的请求。

简单算法

(active*256+inactive)/weight(谁的小,转发给谁)

(3).sed :最少期望延迟

说明

不考虑非活动连接,谁的权重大,我们优先选择权重大的服务器来接收请求,但会出现问题,就是权重比较大的服务器会很忙,但权重相对较小的服务器很闲,甚至会接收不到请求,所以便有了下面的算法nq。

简单算法(基于wlc算法)

(active+1)*256/weight (谁的小转发给谁)

(4).nq :never queue 永不排队

说明

在上面我们说明了,由于某台服务器的权重较小,比较空闲,甚至接收不到请求,而权重大的服务器会很忙,所此算法是sed改进,就是说不管你的权重多大都会被分配到请求。简单说,无需队列,如果有台real server的连接数为0就直接分配过去,不需要在进行sed运算。

(5).LBLC :基于局部性的最少连接

说明

基于局部性的最少连接算法是针对请求报文的目标IP地址的负载均衡调度,主要用于 Cache集群系统,因为Cache集群中客户请求报文的目标IP地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负 载基本平衡的情况下,将相同的目标IP地址的请求调度到同一个台服务器,来提高服务器的访问局部性和主存Cache命中率,从而调整整个集群系统的处理能力。

(6).LBLCR :基于局部性的带复制功能的最少连接

说明

基于局部性的带复制功能的最少连接调度算法也是针对目标IP地址的负载均 衡,该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该 服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段 时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

注:

LVS默认调度算法是 wlc

8、Session持久机制
1、session绑定:始终将同一个请求者的连接定向至同一个RS(第一次请求时仍由调度方法选择);没有容错能力,有损均衡效果;
2、session复制:在RS之间同步session,因此,每个RS持集群中所有的session;对于大规模集群环境不适用;
3、session服务器:利用单独部署的服务器来统一管理session;

===================================完==================================================










本文转自 jinlinger 51CTO博客,原文链接:http://blog.51cto.com/essun/1398850,如需转载请自行联系原作者
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
3月前
|
运维 负载均衡 监控
"Linux高可用集群背后的神秘力量:揭秘心跳机制,如何确保服务永不掉线?"
【8月更文挑战第21天】今天探讨Linux高可用集群中的心跳机制——节点间定期发送信号以确认彼此状态的关键技术。它主要用于故障检测、负载均衡及资源接管。示例代码展示如何使用Corosync+Pacemaker配置心跳,确保服务连续性与可靠性。正确配置心跳机制能够显著提升系统的稳定性。
55 1
|
3月前
|
并行计算 Linux TensorFlow
【Deepin 20系统+Tensorflow 2】Linux系统解决Could not load dynamic library ‘libcudart.so.10.0‘
本文描述了在Deepin 20系统中使用TensorFlow 2时遇到GPU未被利用的问题,并给出了相关的调试日志信息。
55 2
|
3月前
|
存储 分布式计算 负载均衡
在Linux中,什么是集群,并且列出常见的集群技术。
在Linux中,什么是集群,并且列出常见的集群技术。
|
3月前
|
负载均衡 监控 算法
在Linux中,如何配置和管理LVS集群?
在Linux中,如何配置和管理LVS集群?
|
3月前
|
存储 运维 监控
在Linux中,心跳机制在Linux高可用集群中作用是什么?
在Linux中,心跳机制在Linux高可用集群中作用是什么?
|
3月前
|
Oracle Java 关系型数据库
简单记录在Linux上安装JDK环境的步骤,以及解决运行Java程序时出现Error Could not find or load main class XXX问题
本文记录了在Linux系统上安装JDK环境的步骤,并提供了解决运行Java程序时出现的"Error Could not find or load main class XXX"问题的方案,主要是通过重新配置和刷新JDK环境变量来解决。
145 0
|
3月前
|
消息中间件 Java Kafka
Linux——Kafka集群搭建
Linux——Kafka集群搭建
49 0
|
5月前
|
Linux 数据安全/隐私保护
HTCondor下多台Linux计算集群的搭建
HTCondor下多台Linux计算集群的搭建
HTCondor下多台Linux计算集群的搭建
|
5月前
|
Linux 网络安全
|
5月前
|
Linux 芯片
Linux 驱动开发基础知识——查询方式的按键驱动程序_编写框架(十三)
Linux 驱动开发基础知识——查询方式的按键驱动程序_编写框架(十三)
69 2
下一篇
无影云桌面