Thrift做rpc服务器怎么进行负载均衡

Thrift做rpc服务器怎么进行负载均衡,第1张

负载均衡有分硬件负载和软件。
1 硬件方面,可以用F5做负载,内置几十种算法
2 软件方面,可以使用反向代理服务器,例如apache,Nginx等高可用反向代理服务器。
利用DNSPOD智能解析的功能,就可以实现多台机器负载均衡
首先你用一台高配置的机器来当数据库服务器然后把网站的前端页面复制成多份,分别放在其他的几台机器上面再用DNSPOD做智能解析,把域名解析指向多个服务器的IP,DNSPOD默认就有智能分流的作用,也就是说当有一台机器的资源不够用时会自动引导用户访问其他机器上这是相对来讲比较简单的实现负载均衡的方法

负载均衡

先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。那么负载均衡的前提就是要有多台服务器才能实现,也就是两台以上即可。

测试环境
在VMware里安装了三台。

A服务器IP :1921680219 (主)

B服务器IP :1921680119

C服务器IP :1921680109

部署思路
A服务器做为主服务器,域名直接解析到A服务器(1921680219)上,由A服务器负载均衡到B服务器(1921680119)与C服务器(1921680109)上。

在A服务器上,upstream指令——分配负载

vi /etc/nginx/confd/defaultconf


upstream 1921680219 {
server 1921680119:80;
server 1921680109:80;
}


server {
listen 80;
server_name 1921680219;
charset utf8;

location / {
proxy_pass
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

保存重启nginx


在B、C服务器上,

vi /etc/nginx/confd/defaultconf


server {
listen 80;
server_name 1921680219;
index indexhtml;
root /usr/share/nginx/html;

}

保存重启nginx

测试
当访问的时候,为了区分是转向哪台服务器处理我分别在B、C服务器下写一个不同内容的indexhtml文件,以作区分。

打开浏览器访问acom结果,刷新会发现所有的请求均分别被主服务器(1921685149)分配到B服务器(1921680119)与C服务器(1921680109)上,实现了负载均衡效果。

主服务器不能提供服务吗?
以上例子中,我们都是应用到了主服务器负载均衡到其它服务器上,那么主服务器本身能不能也加在服务器列表中,这样就不会白白浪费拿一台服务器纯当做转发功能,而是也参与到提供服务中来。

怎么解决这个问题呢?因为80端口已经用来监听负载均衡的处理,那么本服务器上就不能再使用80端口来处理1921680219的访问请求,得用一个新的。

于是我们在主服务器中编辑/etc/nginx/confd/defaultconf,添加以下内容

server {
listen 8080;
server_name 1921680219;
index indexhtml;
root /usr/share/nginx/html;
}

重启nginx

然后,再重新渡负载均衡。

更多Nginx相关教程见以下内容

CentOS 62实战部署Nginx+MySQL+PHP

使用Nginx搭建WEB服务器

搭建基于Linux63+Nginx12+PHP5+MySQL55的Web服务器全过程

CentOS 63下Nginx性能调优

CentOS 63下配置Nginx加载ngx_pagespeed模块

CentOS 64安装配置Nginx+Pcre+php-fpm

Nginx安装配置使用详细笔记

Nginx日志过滤 使用ngx_log_if不记录特定日志

一般用的就用简单的轮询就好了
调度算法
静态方法:仅根据算法本身实现调度;实现起点公平,不管服务器当前处理多少请求,分配的数量一致
动态方法:根据算法及后端RS当前的负载状况实现调度;不管以前分了多少,只看分配的结果是不是公平
静态调度算法(static Schedu)(4种):
(1)rr (Round Robin) :轮叫,轮询
说明:轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。缺点:是不考虑每台服务器的处理能力。
(2)wrr (Weight Round Robin) :加权轮询(以权重之间的比例实现在各主机之间进行调度)
说明:由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。
(3)sh (Source Hashing) : 源地址hash实现会话绑定sessionaffinity
说明:简单的说就是有将同一客户端的请求发给同一个real server,源地址散列调度算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的并且没有超负荷,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标IP地址换成请求的源IP地址。
(4)dh : (Destination Hashing) : 目标地址hash
说明:将同样的请求发送给同一个server,一般用于缓存服务器,简单的说,LB集群后面又加了一层,在LB与realserver之间加了一层缓存服务器,当一个客户端请求一个页面时,LB发给cache1,当第二个客户端请求同样的页面时,LB还是发给cache1,这就是我们所说的,将同样的请求发给同一个server,来提高缓存的命中率。目标地址散列调度算法也是针对目标IP地址的负载均衡,它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
动态调度算法(dynamic Schedu)(6种):
(1)lc (Least-Connection Scheduling): 最少连接
说明:最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,最小连接调度是一种动态调度短算法,它通过服务器当前所活跃的连接数来估计服务器的负载均衡,调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1,当连接中止或超时,其连接数减一,在系统实现时,我们也引入当服务器的权值为0时,表示该服务器不可用而不被调度。此算法忽略了服务器的性能问题,有的服务器性能好,有的服务器性能差,通过加权重来区分性能,所以有了下面算法wlc。
简单算法:active256+inactive (谁的小,挑谁)
(2)wlc (Weighted Least-Connection Scheduling):加权最少连接
加权最小连接调度算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权限,加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。由于服务器的性能不同,我们给性能相对好的服务器,加大权重,即会接收到更多的请求。
简单算法:(active256+inactive)/weight(谁的小,挑谁)
(3)sed (shortest expected delay scheduling):最少期望延迟
说明:不考虑非活动连接,谁的权重大,我们优先选择权重大的服务器来接收请求,但会出现问题,就是权重比较大的服务器会很忙,但权重相对较小的服务器很闲,甚至会接收不到请求,所以便有了下面的算法nq。
基于wlc算法,简单算法:(active+1)256/weight (谁的小选谁)
(4)nq (Never Queue Scheduling): 永不排队
说明:在上面我们说明了,由于某台服务器的权重较小,比较空闲,甚至接收不到请求,而权重大的服务器会很忙,所此算法是sed改进,就是说不管你的权重多大都会被分配到请求。简单说,无需队列,如果有台real server的连接数为0就直接分配过去,不需要在进行sed运算。
(5)LBLC(Locality-Based Least Connections) :基于局部性的最少连接
说明:基于局部性的最少连接算法是针对请求报文的目标IP地址的负载均衡调度,主要用于Cache集群系统,因为Cache集群中客户请求报文的目标IP地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负载基本平衡的情况下,将相同的目标IP地址的请求调度到同一个台服务器,来提高服务器的访问局部性和主存Cache命中率,从而调整整个集群系统的处理能力。
(6)LBLCR(Locality-Based Least Connections with Replication) :基于局部性的带复制功能的最少连接
说明:基于局部性的带复制功能的最少连接调度算法也是针对目标IP地址的负载均衡,该算法根据请求的目标IP地址找出该目标IP地 址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除, 以降低复制的程度。

1、打开Workbench并从功能区中选择Tools选项卡。选择Platform Services。

2、在Basic选项卡下, 选择‘Standard’ 作为它的服务器角色。

3、对Load Balance Server 2重复步骤2。负载均衡服务器的设置。

4、如果希望同时设置两个服务器作为冗余对和负载均衡对,则可以只需添加FrameWorX服务器冗余即可。

注意事项:

交换机根据工作位置的不同,可以分为广域网交换机和局域网交换机。广域的交换机就是一种在通信系统中完成信息交换功能的设备,它应用在数据链路层。交换机有多个端口,每个端口都具有桥接功能,可以连接一个局域网或一台高性能服务器或工作站。实际上,交换机有时被称为多端口网桥。

像其他任何Web服务器一样,你可以对Citrix StoreFront、DDC和VMware连接服务器进行负载均衡。下面是实现这种工作负载的一些方式:
DNS轮转:这是一种简单的方式,可以通过在DNS服务器上为StoreFront或连接服务器设定多个名称或者“A”记录的方式实现。比如,用于轮转的DNS列表可以是这样的:STOREFRONT 192168010, STOREFRONT 192168011,等等。DNS服务器使用下一个可用IP地址来解析对于服务器名的后续请求。
这种方式的优点是十分简单、可用性高和开销低(没有开销)。但是缺点是,这并不是真正的负载均衡;只是简单的给出了下一个可用的服务器IP地址。这种方式没有使用先进的负载均衡器(LBs)进行查询和更为先进的关键性能因素。专用的负载均衡服务器可以根据目标服务器的CPU、网络使用率、磁盘输入/输出情况和服务可用性来平衡负载。对于一个出现关键服务离线或者崩溃的服务器来说,将其加入到负载均衡当中没有什么意义。
微软网络负载均衡服务(NLB)。NLB需要使用Windows服务器授权。可以在连接服务器或者StoreFront服务器本地运行NLB,并加入到集群当中,产生一个逻辑名称和IP地址。NLB根据网络流量负载情况来判断主机的繁忙程度,这样可以提供更为有意义的负载均衡。其可以智能地判断出如果集群中的某个主机不可用,那么就不会将负载转发到这个主机上。这个测试不包括集群中的服务器是活动的,但是StoreFront或连接服务没有正常工作的情况。
专用负载均衡器。 Citrix NetScaler、F5 Big IP Local Traffic Manager、Kemp Technologies LoadMaster和Radware 的Alteon工具都可以为XenDesktop和Horizon View提供专用的负载均衡功能。这些负载均衡器可能是物理硬件或者虚拟设备,相比于DNS轮转和NLB方式,它们有很多优势。
专用的负载均衡器可以在VDI实施过程中识别更多因素。它会持续评估目标服务器的健康程度,包括像内存和CPU使用率这样的性能指标。负载均衡器可以对服务器进行评估和常规测试,以判断服务器是否工作正常。如果在健康检查时发现问题,其可以将服务器从用户的可用列表中删除,实现宕机时间的透明化。
负载均衡只是这些产品诸多特性中的一个。负载均衡服务器提供的内容缓存、压缩、优先级和其他网络流量优化可以通过降低VDI服务器自身负载来改善性能表现。

阅读本文前,需熟悉OSI七层参考模型。

常见的负载均衡设备,有F5,Haproxy,lvs, nginx等。

F5是商用硬件负载均衡,性能很好,但是价格昂贵,除了负载均衡,还有应用交换、会话交换、状态监控等众多功能。
F5一般做四层负载均衡,但也支持七层负载均衡。

Haproxy(以下简称ha)是软件负载均衡,开源,一般做七层负载均衡,但也支持四层负载均衡。

Linux Virtual Server(以下简称lvs)是软件负载均衡,开源,二层或四层负载均衡,已集成到linux内核,自身有完备的热备方案(keepalived+lvs),稳定性极强。

nginx也是软件负载均衡,开源,通过反向代理实现负载均衡,是七层负载均衡,性能不如上面的几个。
tips1
有些公司,测试环境用ha/lvs/nginx,生产环境用F5。

tips2
nginx做web服务器时,一般做静态资源服务器和php的web服务器,所以很多公司,会采用F5+nginx或者ha+nginx的架构

tips3
微服务中的ribbon属于客户端负载均衡,上面的几种都是服务端负载均衡
二层负载均衡
在数据链路层通过修改mac地址实现,如lvs的DR模式(直接路由模式)

三层负载均衡
在网络层通过DNAT协议修改目标地址实现

四层负载均衡
用ip+端口实现请求转发
备注:tcp报文里并没有ip,但是四层负载均衡可以用ip+端口,是因为server可以拿到ip

七层负载均衡
通过重新发起>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10309644.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存