黑马程序员技术交流社区

标题: 【广州校区】+zookeeper_负载均衡 [打印本页]

作者: 原则至上    时间: 2019-4-4 10:30
标题: 【广州校区】+zookeeper_负载均衡
本文介绍zookeeper在集群负载均衡中的应用。
一、zookeeper的重要概念总结:



     



二、zookeeper在集群负载均衡中的应用
   上文中大致介绍了zookeeper的概念和应用,从上文中得知,zookeeper本身是不提供负载均衡的策略的,需要自己来实现,所以确定的说:是在负载均衡中应用到了zookeeper做集群的协调;
    对于http请求的负载均衡,成熟的解决方案是Nginx(或者Haproxy)+keepalived。其中Niginx负责代理Http请求,通过某种负载均衡策略访问集群中的服务器,keepalived负责检测集群中的服务器运行情况(有故障的机器移除,机器回复工作后重新加入);
    而对应TCP层的负载均衡,比如用Apache Mina做的网络通信用用,上面这种方案明显不合适,因为网络通信客户端和服务端要保持长连接,所以针对这种长连接做的负载均衡,一般都是基于连接数这种均衡策略,也就是在第一次连接时,分配服务器ip,取当前连接数最少的那台服务器进行连接
    集群中有几台服务器处于运行状态,每一台服务器连接的客户数量,最大连接数,等等这些信息都需要记录起来,然后每次做负载均衡时根据这些信息来做分配,一般首先想到的是将这些信息存放到数据库里。
    简单的做法就是
        服务器启动时,--------->把数据库里相应的状态改为运行;
        客户连接或者断开时----->把连接数做加数或者减数运算;
    但是,服务器关闭时,问题就出现了:
        1、服务器关闭,可以数据源也已经被关闭了,没法操作数据库,该机器在数据库里一直处于运行状态(数据库不能及时记录服务器状态。)
        2、服务器宕机,这种问题就很致命,这是链关闭的程序都没有执行,更不用说能操作数据库了。
    解决的方案就是用zookeeper保存服务器的连接信息:
       1、当服务器启动时,往zookeeper的节点里写入数据(节点的类型是临时节点);
       2、当关闭服务器时,从zookeeper移除相应的节点数据;
       3、当服务器宕机,zookeeper因为没有检测到心跳,自动把该节点移除,并通知其他服务器,其他服务器得知该机器已宕机,在分配连接时,不会分配到这台机器上,这点也就是本文中所说,负载均衡中使用zookeeper的原因。


    对比了一下保存在数据库那种方式,zookeeper其实就是一个具有通知功能的数据库,也就是它底下节点数据有变化时,会通知它的所有客户端(这里的客户端指的连接到zookeeper的服务器)




111.jpg (65.16 KB, 下载次数: 23)

111.jpg

作者: 原则至上    时间: 2019-4-4 10:48
写的很辛苦,很棒哦
作者: 原则至上    时间: 2019-5-16 14:52
都没人看,,,写来干嘛




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2