ZooKeeper 集群搭建

码农UP2U

共 3840字,需浏览 8分钟

 · 2021-12-22

早期文章


ZooKeeper 简介

        ZooKeeper 是一个分布式应用程序协调服务,主要用于解决分布式集群中应用系统的一致性问题。ZooKeeper 的应用场景包括但不限于统一命名服务、集群管理 和 分布式锁 等。其架构图大致如下:

        ZooKeeper 集群由一组服务器组成,这些节点当中有一个角色为 Leader,其他节点的角色为 Follower。当 Leader 节点发生故障而失效时,Follower 节点会快速相应,重新选出一个 Leader 节点。


ZooKeeper 的安装模式

        ZooKeeper 有三种安装模式,分别是 单机模式、伪分布式模式 和 集群模式。


        单机模式是指部署一个 ZooKeeper 进程,客户端直接与 ZooKeeper 进程进行通信;伪分布式模式是在单台计算机上运行多个 ZooKeeper 实例组成一个集群;集群模式则是在多台计算机上部署 ZooKeeper。


        在 ZooKeeper 集群中,会有一台机器作为 Leader 服务器负责管理和协调其他集群服务器。服务器的数量通常是单数。


ZooKeeper 集群的部署

        这里使用三台虚拟机来部署 ZooKeeper 集群,三台虚拟机的服务器均为 CentOS,且主机名分别为 centos01、centos02 和 centos03。


(1)上传 ZooKeeper 安装文件

        首先任选一台服务器来安装和配置 ZooKeeper,这里我选择在 centos01 服务器上进行完成。下载 ZooKeeper 的 tar 包,上传到 centos01 的服务器上,这里我上传到了 /opt/software/ 目录下,然后对其进行解压,命令如下:

# tar -zxf zookeeper-3.4.10.tar.gz -C /opt/modules/


(2)配置 ZooKeeper 的配置文件

        首先,在 ZooKeeper 的安装目录下创建一个 dataDir 目录,其用于存放 ZooKeeper 相关数据。


        然后,在 ZooKeeper 安装目录下的 conf 文件夹中新建配置文件 zoo.cfg 文件,内容如下:

tickTime=2000initLimit=5syncLimit=2dataDir=/opt/modules/zookeeper-3.4.10/dataDirclientPort=2181
server.1=centos01:2888:3888server.2=centos02:2888:3888server.3=centos03:2888:3888

        下面对配置项进行简单的说明:

  • tickTime:表示每次心跳间隔的时间;

  • initLimit:集群中的 Follower 服务器初始化连接 Leader 服务器时能等待的最大心跳数,如果在指定的心跳之后 Follower 仍然没有收到 Leader 服务器的返回信息,则连接失败;initLimit * tickTime 就是连接超时的时长;

  • server.id = host:port1:port2:该配置项用来标识不同的 ZooKeeper 服务器,id 必须在整个集群中是唯一的,且大小在 1 到 255 之间;host 是服务器的名称或 IP 地址,port1 是 Leader 端口,该服务器作为 Leader 时供 Follower 连接的端口,port2 是选举端口,选举 Leader 服务器时供其他 Follower 连接的端口

  • dataDir:存储数据的目录

  • clientPort:客户端连接 ZooKeeper 服务器的端口,ZooKeeper 会监听这个端口,接收客户端的请求


        最后,在 dataDir 目录下创建一个 myid 的文件,将服务器的 id 写入到该文件中。


(3)复制 ZooKeeper 安装信息到其他节点

        将 centos01 的 ZooKeeper 安装目录复制到 centos01 和 centos03 两个服务器上。命令如下:

# scp -r /opt/modules/zookeeper-3.4.10/ hadoop@centos02:/opt/modules/# scp -r /opt/modules/zookeeper-3.4.10/ hadoop@centos03:/opt/modules/


(4)修改其他节点配置

        需要修改 centos02 和 centos03 中 myid 的值,需要与其 server.id 的 id 进行对应。


(5)启动 ZooKeeper

        分别在每台 ZooKeeper 上启动 ZooKeeper,命令如下:

# ./bin/zkServer.sh start


(6)查看启动状态

        ZooKeeper 启动后会自动的选举 Leader,查看服务状态时,可以查看到不同服务器的角色,查看如下:

        以下是 Leader 角色的输出状态:

$ /opt/modules/zookeeper-3.4.10/bin/zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /opt/modules/zookeeper-3.4.10/bin/../conf/zoo.cfgMode: leader

        以下是 Follower 角色的输出状态

$ /opt/modules/zookeeper-3.4.10/bin/zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /opt/modules/zookeeper-3.4.10/bin/../conf/zoo.cfgMode: follower


(7)客户端连接服务器

        在 centos01 节点上,连接 ZooKeeper 服务器,命令如下:

$ ./bin/zkCli.sh -server centos01:2181


总结

        本篇内容简单的整理了搭建 ZooKeeper 集群的步骤,整个步骤比较固定。当 ZooKeeper 服务器过多时,可以通过脚本来进行批量的启动,这里就不再赘述。本文并没有整理 ZooKeeper 的应用场景,也没有整理 ZooKeeper 选举 Leader 的算法,以后会逐步的补上。希望本文对大家有所帮助。


公众号内回复 【mongo】 下载 SpringBoot 整合操作 MongoDB 的文档。


        之前整理的关于 Redis 的文章:

Redis | Redis 的安装

Redis | Redis 的帮助命令

Redis | Redis 命令分类

Redis | Redis 通用命令

Redis | Redis 字符串相关命令

Redis | Redis 列表相关命令

Redis | Redis 集合相关命令

Redis | Redis 有序集合相关命令

Redis | Redis 哈希相关命令

Redis | 源码阅读 —— 字符串

Redis | 源码阅读 —— 链表

Redis | Redis Pub/Sub相关命令

Redis | 管道 —— PipeLine

Redis | SpringBoot整合Redis

Redis | Redis 的事务一

Redis | Redis 的事务二

Redis | 基础数据类型应用场景

Redis | 事务源码阅读

Redis | 事物源码阅读 —— watch

Redis | 慢查询

Redis | 给接口添加缓存

Redis | Redis 也会算距离




浏览 35
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报