zookeeper

简介

ZooKeeper是一个为分布式应用所设计的分布的、开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以Standalone模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。

集群角色

  • 领导者(leader),用于负责进行投票的发起和决议,更新系统状态。
  • 学习者(learner),包括跟随者(follower)和观察者(observer)。

其中follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票。

而observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度。

安装

jdk安装

通用二进制包安装:

# tar xf jdk-7u79-linux-x64.tar.gz -C /usr/local/
# ln -sv /usr/local/jdk1.7.0_79 /usr/local/java
"/usr/local/java" -> "/usr/local/jdk1.7.0_79"
# cat /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/java
export JAVA_CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
# . /etc/profile.d/java.sh
# java -version
java version "1.7.0_79"
OpenJDK Runtime Environment (rhel-2.5.5.4.el6-x86_64 u79-b14)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

yum 安装:

# yum install -y java-1.7.0-openjdk

zookeeper安装

下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

# tar xf zookeeper-3.4.10.tar.gz -C /opt/
# cd /opt/
# chown -R root.root zookeeper-3.4.10/

单实例配置

# cd /opt/zookeeper-3.4.10/conf/
# cp zoo_sample.cfg zoo.cfg
# mkdir /data/zookeeper/log -p
# grep -v '^#' zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper
dataLogDir=/data/zookeeper/log
clientPort=2181

配置参数说明

  • tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
  • initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒。
  • syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒
  • dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
  • dataLogDir:这个操作将管理机器把事务日志写入到“ dataLogDir ”所指定的目录,而不是“ dataDir ”所指定的目录。这将允许使用一个专用的日志设备并且帮助我们避免日志和快照之间的竞争。
  • clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

启动

# /opt/zookeeper-3.4.10/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

查看状态

# /opt/zookeeper-3.4.10/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: standalone

连接

# /opt/zookeeper-3.4.10/bin/zkCli.sh -server  localhost:2181
Connecting to localhost:2181
......
[zk: localhost:2181(CONNECTED) 0]

伪集群搭建

配置前请将单实例的zookeeper给关闭。

# grep -v '^#' z1.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/z1/
clientPort=2181
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445
# grep -v '^#' z2.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/z2/
clientPort=2182
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445
# grep -v '^#' z3.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/z3/
clientPort=2183
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445
# mkdir -p /data/zookeeper/z{1,2,3}
  • server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。

# echo 1>/data/zookeeper/z1/myid
# echo 2>/data/zookeeper/z2/myid
# echo 3>/data/zookeeper/z3/myid

启动

# ./zkServer.sh start z1.cfg
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.10/bin/../conf/z1.cfg
Starting zookeeper ... STARTED
# ./zkServer.sh start z2.cfg
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.10/bin/../conf/z2.cfg
Starting zookeeper ... STARTED
# ./zkServer.sh start z3.cfg
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.10/bin/../conf/z3.cfg
Starting zookeeper ... STARTED

状态查看

# ./zkServer.sh status z1.cfg
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.10/bin/../conf/z1.cfg
Mode: follower
# ./zkServer.sh status z2.cfg
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.10/bin/../conf/z2.cfg
Mode: leader
# ./zkServer.sh status z3.cfg
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.10/bin/../conf/z3.cfg
Mode: follower

四字命令

ZooKeeper 支持某些特定的四字命令字母与其的交互。它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息。用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令。 ZooKeeper 常用四字命令见下表 :

四字命令 功能描述
conf 输出相关服务配置的详细信息。
cons 列出所有连接到服务器的客户端的完全的连接/会话的详细信息。包括“接受 / 发送”的包数量、会话 id 、操作延迟、最后的操作执行等等信息。
dump 列出未经处理的会话和临时节点。
envi 输出关于服务环境的详细信息(区别于 conf 命令)。
reqs 列出未经处理的请求
ruok 测试服务是否处于正确状态。如果确实如此,那么服务返回“imok ”,否则不做任何相应。
stat 输出关于性能和连接的客户端的列表。
wchs 列出服务器 watch 的详细信息。
wchc 通过 session 列出服务器 watch 的详细信息,它的输出是一个与watch 相关的会话的列表。
wchp 通过路径列出服务器 watch 的详细信息。它输出一个与 session相关的路径。

使用举例

# echo conf |nc 192.168.197.61 2181
clientPort=2181
dataDir=/data/zookeeper/z1/version-2
dataLogDir=/data/zookeeper/z1/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=1
initLimit=10
syncLimit=5
electionAlg=3
electionPort=2223
quorumPort=2222
peerType=0

命令行操作

[zk: 192.168.197.61:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: 192.168.197.61:2181(CONNECTED) 1] create /zk myDate
Created /zk
[zk: 192.168.197.61:2181(CONNECTED) 2] ls /
[zk, zookeeper]
[zk: 192.168.197.61:2181(CONNECTED) 3] get /zk
myDate
cZxid = 0x300000002
ctime = Thu May 18 18:36:41 CST 2017
mZxid = 0x300000002
mtime = Thu May 18 18:36:41 CST 2017
pZxid = 0x300000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
[zk: 192.168.197.61:2181(CONNECTED) 4] set /zk yourDate
cZxid = 0x300000002
ctime = Thu May 18 18:36:41 CST 2017
mZxid = 0x300000003
mtime = Thu May 18 18:37:10 CST 2017
pZxid = 0x300000002
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0
[zk: 192.168.197.61:2181(CONNECTED) 5] get /zk
yourDate
cZxid = 0x300000002
ctime = Thu May 18 18:36:41 CST 2017
mZxid = 0x300000003
mtime = Thu May 18 18:37:10 CST 2017
pZxid = 0x300000002
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0
[zk: 192.168.197.61:2181(CONNECTED) 6] delete /zk
[zk: 192.168.197.61:2181(CONNECTED) 7] ls /
[zookeeper]

zookeeper环境搭建.md的更多相关文章

  1. hadoop2.6.2+hbase+zookeeper环境搭建

    1.hadoop环境搭建,版本:2.6.2,参考:http://www.cnblogs.com/bookwed/p/5251393.html 启动服务:在master机器上,进入hadoop安装目录, ...

  2. [转]云计算之hadoop、hive、hue、oozie、sqoop、hbase、zookeeper环境搭建及配置文件

     云计算之hadoop.hive.hue.oozie.sqoop.hbase.zookeeper环境搭建及配置文件已经托管到githubhttps://github.com/sxyx2008/clou ...

  3. 【Hadoop离线基础总结】CDH版本的zookeeper环境搭建

    CDH版本的zookeeper环境搭建 下载 下载地址 http://archive.cloudera.com/cdh5/cdh/5/ 修改配置文件 创建ZooKeeper数据存放目录 mkdir - ...

  4. Hadoop学习笔记—14.ZooKeeper环境搭建

    从字面上来看,ZooKeeper表示动物园管理员,这是一个十分奇妙的名字,我们又想起了Hadoop生态系统中,许多项目的Logo都采用了动物,比如Hadoop采用了大象的形象,所以我们可以猜测ZooK ...

  5. zookeeper 环境搭建

    1.准备三台服务器 ip分别为:192.168.100.128.192.168.100.129.192.168.100.133 a.修改主机名称 vi /etc/sysconfig/network 修 ...

  6. Linux系统zookeeper环境搭建(单机、伪分布式、分布式)

    本人现在对zookeeper的环境搭建做一个总结,一般zookeeper的安装部署可以有三种模式,单机模式.伪分布式和分布式,这三种模式在什么时候应用具体看大家的使用场景,如果你只有一台机器且只是想自 ...

  7. ZooKeeper环境搭建(单机/集群)(转)

    前提: 配置文件主要是在$ZOOKEEPER_HOME/conf/zoo.cfg,刚解压时为zoo_sample.cfg,重命名zoo.cfg即可. 配置文件常用项参考:http://www.cnbl ...

  8. gitlab+jenkins环境搭建.md

    gitlab+jenkins自动化部署环境搭建 环境说明 系统 主机 IP 安装软件 CentOS 7 study-1 192.168.100.51 gitlab.git CentOS 7 study ...

  9. Zookeeper环境搭建

    zookeeper支持windows.linux.mac等操作系统,其搭建方式也有集群.伪集群.单机环境.下面研究三种方式的搭建. 单机环境:windows操作系统 伪集群:windows 集群:li ...

随机推荐

  1. elasticsearch java使用

    本文将介绍如何使用java调用elasticsearch的api 1.获取client连接 package com.test.elasticsearch; import java.net.InetAd ...

  2. SQL Server数据库状态和文件状态

    数据库状态 (database states) 查询数据库的当前状态 : 1.查询所有数据库的状态 ,通过sys.databases目录视图的state_desc列 user master go se ...

  3. [javaSE] 基本类型(String相关)

    字符串是一个特殊的对象 字符串一旦初始化就不可以被改变 获取字符串的长度 调用String对象的length()方法,返回int长度 获取某个索引位置的字符 调用String对象的charAt()方法 ...

  4. javax.naming.NamingException: Cannot create resource instance报错修改

    //下面内容为网上获取 avax.naming.NamingException: Cannot create resource instance at org.apache.naming.factor ...

  5. 使用tcmalloc替换系统的malloc

    https://blog.csdn.net/educast/article/details/79166553?utm_source=blogxgwz0 今天对服务器进行压测,模拟的请求量到4万次/分的 ...

  6. 项目Debug版本与Release版本的区别

    Debug版本:通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序. Release版本:称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很 ...

  7. UNIX 系统调用:dup,dup2实现重定向

    重定向一般在命令行里就是把原本输出到屏幕的数据转而输出到一个指定的文件当中.如 $ pwd > workdir.txt 此时workdir.txt内就存储了pwd命令的输出,当前所在的工作目录 ...

  8. 在arcgis使用python脚本进行字段计算时对中文的处理方案

    一.引言 在arcgis打开一个图层的属性表,可以对属性表的某个字段进行计算,但是在平常一般都是使用arcgis提供的字段计算器的界面进行傻瓜式的简答的赋值操作,并没有使用到脚本对字段值进行逻辑的操作 ...

  9. LOJ#6035. 「雅礼集训 2017 Day4」洗衣服

    传送门 先处理出每一件衣服最早什么时候洗完,堆+贪心即可 然后同样处理出每件衣服最早什么时候烘干 然后倒序相加取最大值 # include <bits/stdc++.h> using na ...

  10. mysql_real_escape_string与mysqli_real_escape_string

    参考 mysql_real_escape_string  mysqli_real_escape_string mysql_real_escape_string是用来转义字符的,主要是转义POST或GE ...