摘要

Zookeeper是针对大型分布式系统的高可靠的协调系统。它基于对Paxos算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得ZooKeeper解决很多分布式问题。把分布式集群当成zoo,那么zookeeper就是管理员。zookeeper本身也可以是个集群,通过几台follow机器选举leader。zookeeper的主要作用包括,命名服务,配置管理,分布式一致性锁,HA(High available)。真是因为zookeeper在分布式系统领域如此重要,可以说是基石,所以我们绕不开要学习其使用及原理。

本文基于Ubuntu 16.04 LTS,介绍如何搭建1主2从的zookeeper集群。

环境依赖

  • 奇数台服务器,且非observer节点数>1;如果是偶数台服务器,可以把多出来的1台设置为observer
  • Java 8+
  • 防火墙开放2181、2888、3888端口:
ufw allow 2181
ufw allow 2888
ufw allow 3888
ufw reload

一、下载与解压ZooKeeper

1、下载

$ wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz

2、解压到指定位置

$ tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz -C /usr/local

$ mv /usr/local/apache-zookeeper-3.6.2-bin /usr/local/zookeeper_3.6.2

$ cd /usr/local/zookeeper_3.6.2

二、配置文件

本小节先在服务器1上进行配置,下一小节再通过scp将配置好的ZooKeeper分发到其他服务器上,减少重复工作。

1、创建配置文件

利用模板文件zoo_sample.cfg,通过拷贝创建配置文件zoo.cfg

$ cd /usr/local/zookeeper_3.6.2/conf
$ cp zoo_sample.cfg zoo.cfg

2、创建数据目录

$ mkdir /usr/local/zookeeper_3.6.2/data

3、修改配置文件dataDir

$ vim /usr/local/zookeeper_3.6.2/conf/zoo.cfg

#修改dataDir为如下内容
dataDir=/usr/local/zookeeper_3.6.2/data

4、添加server.id

$ vim /usr/local/zookeeper_3.6.2/conf/zoo.cfg

# 添加如下内容:
server.1=192.168.1.113:2888:3888
server.2=192.168.1.114:2888:3888
server.3=192.168.1.115:2888:3888
# server.id=zookeeper节点主机名 或 主机ip:2888:3888 选举端口和投票端口固定
# 如果有四台zookeeper的话,由于非observer节点数必须为奇数个
# 所以如果有第四台的话,可以使用如下添加方式:
# server.4=xx.xx.xx.xx:2888:3888:observer
# id是自己定义的,0~255间,不必一次递增,自己定即可,id表示该节点所持有的投票编号id,必需保证全局唯一

注意:不要在配置后面加注释#,这会导致cfg文件解析失败!从而导致zookeeper无法正常启动!

server.A=B:C:D中各参数解析如下:

A:其中 A 是一个数字,表示这个是服务器的编号;

B:是这个服务器的 ip 地址 或 主机名;

C:Leader选举的端口;

D:Zookeeper服务器之间的通信端口。

5、创建myid文件

在dataDir目录下创建myid文件

机器192.168.1.113上:

$ vim /usr/local/zookeeper_3.6.2/data/myid

#输入server.1=192.168.1.113:2888:3888所指定的id:1
1

机器192.168.1.114上:

$ vim /usr/local/zookeeper_3.6.2/data/myid

#输入server.1=192.168.1.114:2888:3888所指定的id:2
2

机器192.168.1.115上:

$ vim /usr/local/zookeeper_3.6.2/data/myid

#输入server.1=192.168.1.115:2888:3888所指定的id:3
3

三、将ZooKeeper分发到各个节点

$ cd /usr/local/
$ scp -r zookeeper_3.6.2 root@192.168.1.114:/usr/local/
$ scp -r zookeeper_3.6.2 root@192.168.1.115:/usr/local/

四、配置环境变量

需要再各个服务器上进行配置:

vim /etc/profile

#添加如下内容
export ZOOKEEPER_HOME=/usr/local/zookeeper_3.6.2
export PATH=$ZOOKEEPER_HOME/bin:$PATH #激活环境变量
source /etc/profile

五、启动zkServer

所有节点上启动zkServer

$ zkServer.sh start

#输出如下:
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper_3.6.2/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

查看集群节点状态:

$ zkServer.sh status

#一个节点输出如下:
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper_3.6.2/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader #另外两个节点输出如下:
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper_3.6.2/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

有一台服务器的zk Mode为leader ,另外两台服务器的zk Mode为follower,如果配置了observer节点,则会有一台服务器的zk Mode为observer

停止命令:

zkServer.sh stop

重启命令:

zkServer.sh restart

六、查看ZooKeeper日志

如果启动过程出现了failed,可通过查看详细日志进行分析:

$ cd /usr/local/zookeeper_3.6.2/logs
$ cat zookeeper-<somthing>.out

至此,ZooKeeper集群环境搭建结束。

参考

[1]Apache Zookeeper 集群的搭建[https://blog.csdn.net/qq_33713328/article/details/88854991]

[2]zookeeper 集群搭建[https://www.cnblogs.com/ysocean/p/9860529.html]

更多关于大数据、分布式、存储、区块链、Linux相关文章请关注我的微信公众号:asympTech渐进线实验室

Linux下搭建ZooKeeper集群的更多相关文章

  1. Linux下搭建tomcat集群全记录(转)

    本文将讲述如何在Linux下搭建tomcat集群,以及搭建过程中可能的遇到的问题和解决方法.为简单起见,本文演示搭建的集群只有两个tomact节点外加一个apache组成,三者将安装在同一机器上:ap ...

  2. Linux下搭建tomcat集群全记录

    (转) Linux下搭建tomcat集群全记录 2011-10-12 10:23 6133人阅读 评论(1) 收藏 举报 tomcatlinuxapacheinterceptorsession集群 1 ...

  3. linux系统搭建zookeeper集群

    转载至:https://blog.csdn.net/weixin_38111957/article/details/82927878 一.引言 今天咱们就来搭建一下zookeeper集群,当然搭建集群 ...

  4. Linux 下配置zookeeper集群

    我们首先准备三台服务器,IP地址分别如下(前提是要先安装JDK) 192.168.100.101 192.168.100.102 192.168.100.103 1.配置主机名到IP地址的映射(此步骤 ...

  5. Linux下搭建Hadoop集群

    本文地址: 1.前言 本文描述的是如何使用3台Hadoop节点搭建一个集群.本文中,使用的是三个Ubuntu虚拟机,并没有使用三台物理机.在使用物理机搭建Hadoop集群的时候,也可以参考本文.首先这 ...

  6. Linux下安装zookeeper集群

    首先,准备三台Linux虚拟机 三台机器 centos01 :192.168.1.168(lxs001)   centos03 :192.168.1.178(lxs003)   centos03 :1 ...

  7. 170711、Linux下搭建MySQL集群

    一.MySQL集群简介 1.什么是MySQL集群 MySQL集群是一个无共享的(shared-nothing).分布式节点架构的存储方案,其目的是提供容错性和高性能. 数据更新使用读已提交隔离级别(r ...

  8. Linux下搭建mpi集群(ubuntu下用虚拟机测试)

    一 建立SSH连接(无密码登陆) 1 SSH连接的简单介绍 SSH 为 Secure Shell 的缩写,中文翻译为安全外壳协议,建立在应用层,是一种远程连接安全协议.传统的telnet,pop,ft ...

  9. Linux下搭建Hadoop集群(Centos7.0)

    Hadoop集群安装 概述 集群 cluster,将很多任务进程分布到多台计算机上:通过联合使用多台计算机的存储.计算能力完成更庞大的任务.为了实现无限量的存储和计算能力,在生产环境中必须使用集群来满 ...

随机推荐

  1. Azure Functions(一)什么是 ServerLess

    一,引言 自去年4月份分享过3篇关于 Azure Functions 的文章之后,就一直没有再将 Azure Functions 相关的内容了.今天再次开始将 Azure Functions 相关的课 ...

  2. 【hdu 4859】海岸线(图论--网络流最小割)

    题意:有一个区域,有'.'的陆地,'D'的深海域,'E'的浅海域.其中浅海域可以填充为陆地.这里的陆地区域不联通,并且整个地图都处在海洋之中.问填充一定浅海域之后所有岛屿的最长的海岸线之和. 解法:最 ...

  3. C#之Dispose

    前言 谈到Dispose,首先需要理解C#的资源 资源类型 托管资源:由CLR创建和释放 非托管资源:资源的创建和释放不由CLR管理.比如IO.网络连接.数据库连接等等.需要开发人员手动释放. 如何释 ...

  4. Cobbler服务引导第三方PE系统

    通过Cobbler服务引导第三方PE系统 1.上传第三方ios到/root/Ushendu_win10.iso并增加菜单项 cobbler distro add --name=Ushendu_win1 ...

  5. Cobbler自定义标题及菜单密码

    sha1pass mypassword || openssl passwd -1 -salt sXiKzkus mypassword $1$sXiKzkus$x12Z3ZaiC34GhceLH5LXw ...

  6. 由CloudStack项目引起的ESXI嵌套虚拟化引起的二级虚拟机无法被访问

    关于这个问题,主要以文字描述为主,最终解决方法其实就一个步骤. 问题描述: 某客户需要部署某企业的云平台,但是由于年前没有足够的物理机资源,所以提供的资源均为虚拟机,现在让我们做技术评估. 其实观察整 ...

  7. 卸载vue2.9.6版本,安装新版本

    1.检查vue安装目录(cmd中输入) where vue 2.删除目录中的关于vue的文件(可以将文件按时间排序,找到vue相关的文件删除) 3.检查vue是否还能找到 4.安装新版本的vue np ...

  8. Gym 101464C - 计算几何+二分(uva1463)

    不是很难,但是我觉得对代码能力的要求还是挺高的. 注意模块化. 因为是浮点数,所以二分用的很多很多. 参考 https://blog.csdn.net/njupt_lyy/article/detail ...

  9. nyoj-1236 挑战密室

    挑战密室 时间限制:1 s | 内存限制:128 M 提交 状态 排名 题目描述 R组织的特工Dr. Kong 为了寻找丢失的超体元素,不幸陷入WTO密室.Dr. Kong必须尽快找到解锁密码逃离,否 ...

  10. bzoj4695 最假女选手(势能线段树/吉司机线段树)题解

    题意: 已知\(n\)个数字,进行以下操作: \(1.\)给一个区间\([L,R]\) 加上一个数\(x\) \(2.\)把一个区间\([L,R]\) 里小于\(x\) 的数变成\(x\) \(3.\ ...