专栏首页Ken的杂谈ZooKeeper集群部署指南

ZooKeeper集群部署指南

一、前言

1、ZooKeeper简介

ZooKeeper是一个开源的分布式应用程序协调服务,是Google的Chubby一个开源的实现。ZooKeeper为分布式应用提供一致性服务,提供的功能包括:分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)、分布式锁(Distributed Lock)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。

ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。

2、ZooKeeper集群角色说明

ZooKeeper主要有领导者(Leader)、跟随者(Follower)和观察者(Observer)三种角色。

角色

说明

领导者(Leader)

为客户端提供读和写的服务,负责投票的发起和决议,更新系统状态。

跟随者(Follower)

为客户端提供读服务,如果是写服务则转发给Leader。在选举过程中参与投票。

观察者(Observer)

为客户端提供读服务器,如果是写服务则转发给Leader。不参与选举过程中的投票,也不参与“过半写成功”策略。在不影响写性能的情况下提升集群的读性能。此角色于zookeeper3.3系列新增的角色。

二、准备工作

1、集群节点规划

ZooKeeper在提供分布式锁等服务的时候需要过半数的节点可用。另外高可用的诉求来说节点的个数必须>1,所以ZooKeeper集群需要是>1的奇数节点。例如3、5、7等等。 本次我们规划三个节点,操作系统选用CnetOS 7

节点名

IP

说明

zk01

192.168.88.11

ZooKeeper节点

zk02

192.168.88.12

ZooKeeper节点

zk03

192.168.88.13

ZooKeeper节点

2、软件版本说明

说明

Linux Server

CentOS 7

JDK

1.8.0_161

ZooKeeper

3.4.11

3、部署JDK8

所有节点均需要安装JDK8 参考CentOS下部署Java7/Java8: https://ken.io/note/centos-java-setup

三、部署ZooKeeper

本次一共要部署三个ZooKeeper节点,所有文中没有指定机器的操作都表示每个节点都要执行该操作

1、下载ZooKeeper&基础准备

  • 下载ZooKeeper

官方镜像选择:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

cd /home/download
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz
  • 创建ZooKeeper相关目录
#创建应用目录
mkdir /usr/zookeeper

#创建数据目录
mkdir /zookeeper
mkdir /zookeeper/data
mkdir /zookeeper/logs
  • 解压到指定目录
tar -zvxf zookeeper-3.4.11.tar.gz -C /usr/zookeeper
  • 配置环境变量
#修改环境变量文件
vi /etc/profile

#增加以下内容
export ZOOKEEPER_HOME=/usr/zookeeper/zookeeper-3.4.11
export PATH=$ZOOKEEPER_HOME/bin:$PATH

#使环境变量生效
source /etc/profile

#查看配置结果
echo $ZOOKEEPER_HOME

既然已配置环境变量,为了方便访问ZooKeeper目录 后续通过$ZOOKEEPER_HOME代替/usr/zookeeper/zookeeper-3.4.11

2、配置ZooKeeper

  • ZooKeeper基础配置
#进入ZooKeeper配置目录
cd $ZOOKEEPER_HOME/conf

#新建配置文件
vi zoo.cfg

#写入以下内容并保存

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeper/data
dataLogDir=/zookeeper/logs
clientPort=2181
server.1=192.168.88.11:2888:3888
server.2=192.168.88.12:2888:3888
server.3=192.168.88.13:2888:3888
  • 配置节点标识

zk01:

echo "1" > /zookeeper/data/myid

zk02:

echo "2" > /zookeeper/data/myid

zk03:

echo "3" > /zookeeper/data/myid
  • 防火墙配置
#开放端口
firewall-cmd --add-port=2181/tcp --permanent
firewall-cmd --add-port=2888/tcp --permanent
firewall-cmd --add-port=3888/tcp --permanent

#重新加载防火墙配置
firewall-cmd --reload

3、启动ZooKeeper

#进入ZooKeeper bin目录
cd $ZOOKEEPER_HOME/bin

#启动
sh zkServer.sh start

出现以下字样表示启动成功:

ZooKeeper JMX enabled by default Using config: /usr/zookeeper/zookeeper-3.4.11/bin/../conf/zoo.cfg Starting zookeeper … STARTED

四、集群查看&连接测试

1、查看节点状态

sh $ZOOKEEPER_HOME/bin/zkServer.sh status

#状态信息
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-3.4.11/bin/../conf/zoo.cfg
Mode: follower

#如果为领导者节点则Mode:leader

2、客户端连接测试

这里随机选其中一个节点作为客户端连接其他节点即可

#指定Server进行连接
sh $ZOOKEEPER_HOME/bin/zkCli.sh -server 192.168.88.13:2181

#正常连接后会进入ZooKeeper命令行,显示如下:
[zk: 192.168.88.13:2181(CONNECTED) 0]

输入命令测试:

#查看ZooKeeper根
[zk: 192.168.88.13:2181(CONNECTED) 0] ls /
[zookeeper]

五、备注

1、ZooKeeper常用配置项说明

配置项

名称

ken.io 的说明

tickTime

CS通信心跳间隔

服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每间隔 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。

initLimit

LF初始通信时限

集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数

syncLimit

LF同步通信时限

集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数

dataDir

数据文件目录

Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里

dataLogDir

日志文件目录

Zookeeper保存日志文件的目录

clientPort

客户端连接端口

客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求

server.N

服务器名称与地址

从N开始依次为:服务编号、服务地址、LF通信端口、选举端口;例如:server.1=192.168.88.11:2888:3888

2、附录

https://www.jianshu.com/p/abbc1411ed9d https://zookeeper.apache.org/doc/current/zookeeperStarted.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kafka集群部署指南

    Kafka是一个开源的分布式消息引擎/消息中间件,同时Kafka也是一个流处理平台。Kakfa支持以发布/订阅的方式在应用间传递消息,同时并基于消息功能添加了K...

    KenTalk
  • HBase集群部署指南

    HBase是一个分布式的、面向列的开源数据库。 HBase在Hadoop之上提供了类似于Google Bigtable的能力。HBase不同于一般的关系数据库,...

    KenTalk
  • 部署zookeeper集群

    1.把zookeeper.tar.gz解压之后,移动到/usr目录下 2.首先要给zookeeper之间的每个节点的ssh设置无密码登陆  3.在zookeep...

    岑玉海
  • 部署zookeeper集群

    说明: 系统:centos7 服务器:172.16.218.201、172.16.218.202、172.16.218.203

    用户5522200
  • k8s部署zookeeper集群

    本次的目的是通过使用k8s搭建一个三节点的zookeeper集群,因为zookeeper集群需要用到存储,所以我们需要准备三个持久卷(Persistent Vo...

    yukong
  • zookeeper(单机、伪集群、集群)部署

    ZooKeeper是一个分布式的、开源的分布式应用程序协调服务,可以在分布 式环境中实现应用配置管理、统一命名服务、状态同步服务等功能。 ZooKeeper是一...

    小手冰凉
  • CentOS 6.8 部署zookeeper集群

    由于公司缓存方案改进,准备采用codis集群作为主要的缓存解决方案(codis:国内豌豆荚开发的redis集群解决方案,已开源,github地址:https:/...

    shaonbean
  • 集群部署kafka和zookeeper

    下载zookeeper版本,3.5.16源码安装后发现启动脚本一些缺少.class等的java lib库,网上有人建议用3.4系列,

    mariolu
  • docker-compose部署zookeeper集群

    注意此处zk_cluster_zoo-net的格式为{project_name}_{network_name},project_name默认为文件夹名,netw...

    平凡的学生族

扫码关注云+社区

领取腾讯云代金券