Zookeeper概念简介
Zookeeper是一个分布式协调服务;就是为用户的分布式应用程序提供协调服务
A、zookeeper是为别的分布式程序服务的
B、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务,所以一般zk都是奇数台服务器)
C、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一名称服务……
D、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能:
- 管理(存储,读取)用户程序提交的数据;
- 并为用户程序提供数据节点监听服务;
Zookeeper集群的角色: Leader 和 follower (Observer)
只要集群中有半数以上节点存活,集群就能提供服务
Zookeeper常用应用场景
服务器节点动态上下线
Zookeeper的出现就是因为有需求,假设我们的系统需要和外部系统交互(采集外部系统的数据),外部系统给我们系统提供数据,外部系统部署了若干台FTP服务器。这些FTP服务器会会获取到大量的数据,每一秒钟都有大量的数据进入到这些FTP服务器,但是这些FTP服务器的容量有限。所以我们的系统要及时把这些数据采集过来,避免这些新数据把老数据给覆盖掉,所以我们也要弄若干台服务器去及时把数据采集过来。但如果我们的系统中有一台服务器挂掉该怎么办?
我们可能会想到弄两台服务器,设置其一主一备,备用的服务器跟主服务器产生心跳连接,每时每刻发送信息给主服务器查看是否有响应,并且要记录每时每刻主服务器下载的进度。
上面这样做起来十分麻烦而且浪费服务器。
假如有一个第三方能帮助我们完成这种工作就好了。比如我们系统的每台服务器启动的时候,都到第三方去注册一下,注册服务器的相关信息,并且还可以在每台服务器的节点下记录每台服务器的下载进度。并且在我们服务器宕机的时候,我们的第三方能够感知的到。这样就需要我们的第三方能够提供监听功能给我们系统的服务器。
所以这个第三方就是我们的Zookeeper。
服务器主从协调
假如我们的程序是提供服务的,所以我们提供服务程序的服务器有很多台,保证我们服务程序的高可用。假设现在我们有两台提供服务的服务器,现在我们客户端来连接服务器的时候应该去找哪一台呢?这个时候就涉及到服务器的主从选举的场景。
这个时候如果有第三方,然后我们的服务程序一旦启动就去第三方去注册。然后第三方给每台注册的服务器一个编号,并记录其IP信息;然后我们假如指定编号最大的作为主服务器,然后其他服务器去监听父节点,如果父节点下面子节点的服务器挂掉了,第三方会帮我们删除掉这个子节点,然后通知那些监听的服务器,让他们从小选举一台编号最大的服务器作为主服务器。然后客户端来连接的时候先去找第三方,查看当前谁是主服务器并获取到其IP,然后去连接到主服务器。
所以这个第三方就是我们的Zookeeper。
统一配置管理
一台服务器的存储空间是有限的,我们使用solr服务器,假如数据文档特别多,solr索引库就会特别大,所以我们可以把一个索引库放到多台solr服务器去。假如现在我们有一个商品库,然后我们就可以把它分片存入到每个solr服务器中。那现在就有一个问题了,我们solr使用的配置应该都是一样的,比如使用的是什么分词器、索引有哪些字段,这些整个商品库都应该是一样的。但是这次配置信息有可能会变,隔一段时间可能要增加索引字段之类的。这样每个服务器都需要去更新这些配置。这种操作就会很慢很麻烦也容易出错。现在如果有一个第三方可以帮我们存储这个商品库的配置,而其他的solr服务器不再持有这些商品库的配置。然后其他的solr服务器都从第三方去读取商品库的配置信息。一旦更新商品库的配置信息的时候,可以去通知solr服务器重新读取商品库的配置信息。
所以这个第三方就是我们的Zookeeper。