千家信息网

ZooKeeper集群如何安装、配置

发表于:2024-11-25 作者:千家信息网编辑
千家信息网最后更新 2024年11月25日,这篇文章主要介绍ZooKeeper集群如何安装、配置 ,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一. ZooKeeper介绍ZooKeeper是一个分布式的,开放源码的分布
千家信息网最后更新 2024年11月25日ZooKeeper集群如何安装、配置

这篇文章主要介绍ZooKeeper集群如何安装、配置 ,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一. ZooKeeper介绍

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、命名服务、分布式同步、组服务等

二. ZooKeeper的使用场景

  1. 数据发布与订阅(配置中心)

    发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新。例如全局的配置信息,服务式服务框架的服务地址列表等就非常适合使用。

注意:在上面提到的应用场景中,有个默认前提是:数据量很小,但是数据更新可能会比较快的场景。

  1. 负载均衡

    这里说的负载均衡是指软负载均衡。在分布式环境中,为了保证高可用性,通常同一个应用或同一个服务的提供方都会部署多份,达到对等服务。而消费者就须要在这些对等的服务器中选择一个来执行相关的业务逻辑,其中比较典型的是消息中间件中的生产者,消费者负载均衡。

    在某个消费者故障或者重启等情况下,其他消费者会感知到这一变化(通过 zookeeper watch消费者列表),然后重新进行负载均衡,保证所有的分区都有消费者进行消费。

  2. 命名服务(Naming Service)

    命名服务也是分布式系统中比较常见的一类场景。在分布式系统中,通过使用命名服务,客户端应用能够根据指定名字来获取资源或服务的地址,提供者等信息。被命名的实体通常可以是集群中的机器,提供的服务地址,远程对象等等--这些我们都可以统称他们为名字(Name)。其中较为常见的就是一些分布式服务框架中的服务地址列表。通过调用ZK提供的创建节点的API,能够很容易创建一个全局唯一的path,这个path就可以作为一个名称。

    注意,所有向ZK上注册的地址都是临时节点,这样就能够保证服务提供者和消费者能够自动感应资源的变化。

  3. 分布式通知/协调

    ZooKeeper中特有watcher注册与异步通知机制,能够很好的实现分布式环境下不同系统之间的通知与协调,实现对数据变更的实时处理。使用方法通常是不同系统都对ZK上同一个znode进行注册,监听znode的变化(包括znode本身内容及子节点的),其中一个系统update了znode,那么另一个系统能够收到通知,并作出相应处理

    1). 另一种心跳检测机制:检测系统和被检测系统之间并不直接关联起来,而是通过zk上某个节点关联,大大减少系统耦合。

    2). 另一种系统调度模式:某系统有控制台和推送系统两部分组成,控制台的职责是控制推送系统进行相应的推送工作。管理人员在控制台作的一些操作,实际上是修改了ZK上某些节点的状态,而ZK就把这些变化通知给他们注册Watcher的客户端,即推送系统,于是,作出相应的推送任务。

    3). 另一种工作汇报模式:一些类似于任务分发系统,子任务启动后,到zk来注册一个临时节点,并且定时将自己的进度进行汇报(将进度写回这个临时节点),这样任务管理者就能够实时知道任务进度。

    总之,使用zookeeper来进行分布式通知和协调能够大大降低系统之间的耦合

  4. 集群管理与Master选举

    Master选举则是zookeeper中最为经典的应用场景了。

  5. 分布式锁

    分布式锁,这个主要得益于ZooKeeper为我们保证了数据的强一致性。锁服务可以分为两类,一个是 保持独占,另一个是 控制时序。

  6. 分布式队列

    队列方面,简单地讲有两种,一种是常规的先进先出队列,另一种是要等到队列成员聚齐之后的才统一按序执行。对于第一种先进先出队列,和分布式锁服务中的控制时序场景基本原理一致,这里不再赘述。 第二种队列其实是在FIFO队列的基础上作了一个增强。通常可以在 /queue 这个znode下预先建立一个/queue/num 节点,并且赋值为n(或者直接给/queue赋值n),表示队列大小,之后每次有队列成员加入后,就判断下是否已经到达队列大小,决定是否可以开始执行了。这种用法的典型场景是,分布式环境中,一个大任务Task A,需要在很多子任务完成(或条件就绪)情况下才能进行。这个时候,凡是其中一个子任务完成(就绪),那么就去 /taskList 下建立自己的临时时序节点(CreateMode.EPHEMERAL_SEQUENTIAL),当 /taskList 发现自己下面的子节点满足指定个数,就可以进行下一步按序进行处理了。

三. ZooKeeper的集群安装部署

**要将 ZK 集群的节点数量要为奇数(2n+1:如 3、5、7 个节点)较为合适**服务器 1:192.168.1.81  端口:2181、2881、3881服务器 2:192.168.1.82  端口:2182、2882、3882服务器 3:192.168.1.83  端口:2183、2883、38831. 修改/etc/hosts192.168.1.81  zk-01192.168.1.82  zk-02192.168.1.83  zk-03 2. 解压zookeeper,在安装目录中创建data,logs目录3. copy 安装文件中conf/ 下的 zoo_sample.cfg     cp zoo_sample.cfg zoo.cfg4. 配置每个节点的zoo.cfg,例如:    #心跳时间    tickTime=2000    #Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器    initLimit=10    syncLimit=5    dataDir=/${ZK_HOME}/node-01/data    dataLogDir=/${ZK_HOME}/node-01/logs    clientPort=2181    server.1=zk-01:2881:3881    server.2=zk-02:2882:3882    server.3=zk-03:2883:38835. 在 dataDir=/${ZK_HOME}/data 下创建 myid 文件分别是配置中server.x中x的值6. iptables中过滤暴露的端口7. 启动 /${ZK_HOME}/bin/zkServer.sh start8. 侦听 tail -500f /${ZK_HOME}/bin/zookeeper.out

以上是"ZooKeeper集群如何安装、配置 "这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

0