解析负载均衡集群—LVS
集群(Cluster)集群就是按照某种方式把服务器连起来来完成一种特定的任务。集群的目的是共享和高效地利用资源,提供大型运算,提供负载均衡分配请求压力以及出现故障时能够进行切换实现高可用性。
在集群服务中有几个常用简称,后文介绍中会使用到。在此做一下简单的描述。
Director:调度器,接收请求并转发请求的服务器。
RealServer:后端服务器,真正实现某种服务并响应客户端请求的服务器。
VIP:在调度器上,接收用户请求的IP。
DIP:在调度器上与集群节点通信的IP。
RIP:集群节点的IP地址
集群的种类
负载均衡集群(LB:LoadBalancing):前端有个调度器(Director)负责接收客户端的请求以轮询的方式分发服务到后端的RealServer上
高可用集群(HA:High Avalibility):为避免业务终止设置多个调度器,其中一个时时在线的提供服务,其他的做备份
高性能集群(HP:High Performance):把任务分片发给集群服务器,然后把结果收集,计算速度非常快
在负载均衡的实现过程中,调度器至关重要。而能实现负载均衡调度作用的既有硬件也有软件。在此重点讲述软件的种类。
靠软件实现的调度器有二种:基于OSI模型四层和七层交换。四层交换的负载均衡是通过IP和端口判断用户请求实现不同的服务访问,用LVS软件实现。七层交换实的现负载均衡是nginx的反向代理(squid,反向代理)负载均衡技术,需要特定的协议。
LVS
LVS(Linux Virtual Server)基于OSI模型的四层交换(L4 Switch),工作在防火墙的INPUT链上,根据地址和端口判断用户请求,可并发响应400w个用户请求。它有三种类型,如下所述。
LVS-NAT:LVS地址转换。其实就是目标地址转换,它的实现要求所有的集群节点都必须在同一个网络内,且节点的默认网关应该指向DIP;支持端口映射;进栈和出栈的数据包都由Director处理,也正是这一点使得Director压力过大。因此Director也是LVS-NAT模型的瓶颈。
LVS-DR:直接路由类型。这是一种最常用的类型,它解决了Director成为瓶颈的问题。它要求所有的集群节点全部都与Director在同一个物理网络中;RIP不要求全部是私有地址,且网关一定不能指向DIP;VIP必须是公有地址。而且Director只处理进栈数据,不处理出栈数据。不能实现端口映射。
LVS-TUN:LVS隧道模式。和DR模型一样,但Director和RealServer可以不在同一个网络内,实现了异地容灾的功能。RIP必须是公网地址,因为RealServer直接响应客户请求。
LVS调度方法
当客户端请求时,Director要根据算法把请求重定向到后台服务器上响应。前四种为静态算法,后六种为动态算法。静态的固定算法不考虑Realserver上实际存活的数目
1、Round-robin RR(轮询)当一个新的连接请求到达时,director只是顺序的选择一个下realserver上
2、Weighted Round-Robin WRR:加权轮询,给每一个realserver一个权重来确定下一个请求给谁,权重越大分到请求越多
3、Destination HashingDH(目标散列)相当于DNAT,来自同一个ip的请求都重定向到同一个Realserver上去,保证目标地址不变
4、Source hashing SH(源散列)相当于SNAT,算法正好与目标地址散列调度算法相反,当来自同一个服务器的响应。还通过同一个路由器出去响应给客户端,保证源地址不变,在实际应用中,源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口 动态调度算法(通过检查服务器当前连接的活动状态决定如何进行调度)
5、LC(最少连接)新的连接请求将被分配至当前连接数最少的RealServer上;最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。
6、WLC(加权最少连接)在原有的最少连接的基础上给realserver一个权重,是比较理想的算法,也是默认的调度算法。
7、SED:最短期望延迟,是对wlc的改进,
8、NQ :永不排队,对sed简单改进,还检查当前服务器有没有连接。当不考虑非活动连接时此算法比较理想。
9、LBLC:基于本地的最少连接,动态的DH,不仅检查是不是请求是不是同一个ip还检查当前有没有连接
10、LBLCR:带复制的最少连接,对LBLC的改进,当第二个realserver上的全部请求断开,允许第一个realserver上的请求复制到第二个realserver上响应,减轻第一个realserver上的负担
定义集群规则的工具是ipvsadm。
ipvsadm -Lcn 查看当前的所有连接,或者cat /proc/net/ip_vs_conn 查看虚拟服务和RealServer上当前的连接数
数据包数和字节数的统计值,则可以使用下面的命令实现:
ipvsadm -l --stats
查看包传递速率的近似精确值,可以使用下面的命令:
ipvsadm -l --rate
ipvsadm -Ln 查看定义的服务
ipvsadm
-A 定义服务,
-a 加入realserver
-s指定算法
-t IP:port 服务类型为tcp
-u IP:port 服务类型为udp
-f防火墙标记
-r 实际服务器
-m指定lvm类型为nat,
-g指定lvm类型为路由,默认的
-i 表示隧道
-p定义持久连接
-w指定权重
-E 更改算法类型
ipvsadm -D 删除服务
ipvsadm –d 删除某一个realserver
ipvsadm -Z 清空计数器
ipvsadm -C 清空规则
ipvsadm -S >/root.a.ipvs 保存规则到一个位置
ipvsadm –S> /etc/sysconfig/ipvs-config =ipvsadm-save保存规则
ipvsadm –R
页:
[1]