zookeeper安装部署

zookeeper安装部署

下载

wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz

解压

tar xvf zookeeper-3.4.12.tar.gz

解压完成后进入zookeeper-3.4.12

目录结构如下:

├── bin

├── build.xml

├── conf

├── contrib

├── dist-maven

├── docs

├── ivysettings.xml

├── ivy.xml

├── lib

├── LICENSE.txt

├── NOTICE.txt

├── README.md

├── README_packaging.txt

├── recipes

├── src

├── zookeeper-3.4.12.jar

├── zookeeper-3.4.12.jar.asc

├── zookeeper-3.4.12.jar.md5

└── zookeeper-3.4.12.jar.sha1

其中:

  • bin

    • zk的可执行脚本目录,包括zk服务进程,zk客户端,等脚本。其中,.sh是Linux环境下的脚本,.cmd是Windows环境下的脚本。
  • conf

    • 配置文件目录。zoo_sample.cfg为样例配置文件,需要修改为自己的名称,一般为zoo.cfg。log4j.properties为日志配置文件。
  • lib

    • zk依赖的包。
  • contrib

    • 一些用于操作zk的工具包。
  • recipes

    • zk某些用法的代码示例

单机模式部署

单机模式的部署较为简单,主要用于开发环境下较为方便的开发和测试,生产环境不可应用单击模式,无论稳定性和IO效率单机模式都无法满足生产需求。

单机模式配置

运行单击模式需要更改一下配置文件,zk的本身提供了一个样例配置文件,位于conf/zoo_sample.cfg,复制一份命名为zoo.cfg并根据需求修改 cp conf/zoo_sample.cfg zoo.cfg

来看一下zoo.cfg的默认配置

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/depdata/zk/dataDir
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

其中:

  • tickTime

    • 心跳间隔时间,以毫秒为单位。客户端与ZK服务端每2000ms进行一次心跳通信,如果ZK服务端超过4000ms没有收到客户端的心跳,那么认为客户端会话超时
    • 更低的tickTime值可以更快的发现超时问题,但是也会因为心跳通信更频繁而导致更高的网络流量和更高的CPU使用
  • dataDir

    • ZK存储内存数据库的位置,目录位置可以自定义,更改为/depdata/zk/dataDir/
    • 注意提前创建/depdata/zk/dataDir/目录,并保证读写权限
  • clientPort

    • ZK服务进程监听的TCP端口,客户端与ZK服务端连接时即使用这个端口号

单机模式启动

启动服务端

后台启动 /bin/zkServer.sh start

如果想要前台启动并查看日志 bin/zkServer.sh start-foreground

可以观察到日志输出:

......

2018-06-24 18:01:21,076 [myid:] - INFO  [main:Environment@100] - Server environment:user.home=/root
2018-06-24 18:01:21,076 [myid:] - INFO  [main:Environment@100] - Server environment:user.dir=/storage/dep/zookeeper-3.4.12
2018-06-24 18:01:21,098 [myid:] - INFO  [main:ZooKeeperServer@835] - tickTime set to 2000
2018-06-24 18:01:21,098 [myid:] - INFO  [main:ZooKeeperServer@844] - minSessionTimeout set to -1
2018-06-24 18:01:21,098 [myid:] - INFO  [main:ZooKeeperServer@853] - maxSessionTimeout set to -1
2018-06-24 18:01:21,141 [myid:] - INFO  [main:ServerCnxnFactory@117] - Using org.apache.zookeeper.server.NIOServerCnxnFactory as server connection factory
2018-06-24 18:01:21,148 [myid:] - INFO  [main:NIOServerCnxnFactory@89] - binding to port 0.0.0.0/0.0.0.0:2181


观察日志可知ZK服务已经启动并且绑定了我们在配置文件zoo.cfg中指定的端口号2181

客户端连接

在同一台主机上可以启动ZK客户端进行连接 bin/zkCli.sh 默认客户端会连接本机127.0.0.1 端口号2181

如果客户端和服务端位于不同的机器,可以使用-server 来指定ip和端口,比如bin/zkCli.sh -server 192.168.4.50:2181

客户端连接成功之后,可以输出几个命令来测试客户端连接,如ls /

输出:[zookeeper]

创建一个节点 create /zk_test my_data,再ls /得到输出[zookeeper, zk_test],说明zk_test节点创建好了

观察我们在配置文件指定的dataDir(ZK存储内存数据库的位置)ll /depdata/zk/dataDir/发现已经有ZK创建的文件

关闭ZK服务bin/zkServer.sh stop

集群模式部署

虽然单机模式的zk便于开发与测试,但并不适合在生产环境使用。在生产环境下,我们需要使用集群模式来对zk进行部署。

注意

在集群模式下,建议至少部署3个zk进程,或者部署奇数个zk进程。如果只部署2个zk进程,当其中一个zk进程挂掉后,剩下的一个进程并不能构成一个quorum的大多数。因此,部署2个进程甚至比单机模式更不可靠,因为2个进程其中一个不可用的可能性比一个进程不可用的可能性还大。

集群模式配置

在集群模式下,所有的zk服务可以使用相同的配置文件(是指各个zk服务部署在不同的机器上面),例如如下配置:

tickTime=2000
dataDir=/depdata/zk/dataDir/
clientPort=2181
initLimit=5
syncLimit=2
server.0=192.168.4.50:2888:3888
server.1=vc1:2888:3888
server.2=vc2:2888:3888

其中:

  • initLimit

    ZooKeeper集群模式下包含多个zk进程,其中一个进程为leader,余下的进程为follower。
    当follower最初与leader建立连接时,它们之间会传输相当多的数据,尤其是follower的数据落后leader很多。initLimit配置follower与leader之间建立连接后进行同步的最长时间。

  • syncLimit

    配置follower和leader之间发送消息,请求和应答的最大时间长度。

  • tickTime

    tickTime则是上述两个超时配置的基本单位,例如对于initLimit,其配置值为5,说明其超时时间为 2000ms * 5 = 10秒。

  • server.id=host:port1:port2

    • 其中id为一个数字,表示zk进程的id,这个id也是dataDir目录下myid文件的内容。
    • 不同的机器下需要在dataDir下分别生成一个myid文件,文件的内容就是主机对应的id号,比如机器vc0的/depdata/zk/dataDir/下需要有文件myid,内容为0
    • host是该zk服务所在的IP地址
    • port1表示follower和leader交换消息所使用的端口,port2表示选举leader所使用的端口。

将配置文件拷贝到3个不同的主机之后,在/depdata/zk/dataDir下创建文件myid,文件myid的内容为0或1或2,取值对应的是server.id的配置值

集群模式启动

分别在3台主机上启动ZK服务bin/zkServer.sh start-foreground

查看ZK集群的服务状态

分别查看ZK的服务状态bin/zkServer.sh status

三台主机分别返回:


[root@vc1 zookeeper-3.4.12]# bin/zkServer.sh status  
ZooKeeper JMX enabled by default
Using config: /root/dep/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: leader

[root@vc0 zookeeper-3.4.12]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/dep/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower


[root@vc2 zookeeper-3.4.12]# bin/zkServer.sh status  
ZooKeeper JMX enabled by default
Using config: /root/dep/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower

测试集群高可用性

停掉集群中的为leader的ZK服务,在名称为vc1的主机上执行bin/zkServer.sh stop

连接集群

输入:bin/zkCli.sh -server 192.168.4.50:2181,192.168.4.14:2181,192.168.4.18:2181

响应:

2018-06-24 21:16:02,305 [myid:] - INFO  [main:ZooKeeper@441] - Initiating client connection, connectString=192.168.4.50:2181,192.168.4.14:2181,192.168.4.18:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@4b85612c
Welcome to ZooKeeper!
2018-06-24 21:16:02,360 [myid:] - INFO  [main-SendThread(192.168.4.18:2181):ClientCnxn$SendThread@1028] - Opening socket connection to server 192.168.4.18/192.168.4.18:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2018-06-24 21:16:02,422 [myid:] - INFO  [main-SendThread(192.168.4.18:2181):ClientCnxn$SendThread@878] - Socket connection established to 192.168.4.18/192.168.4.18:2181, initiating session
[zk: 192.168.4.50:2181,192.168.4.14:2181,192.168.4.18:2181(CONNECTING) 0] 2018-06-24 21:16:02,497 [myid:] - INFO  [main-SendThread(192.168.4.18:2181):ClientCnxn$SendThread@1302] - Session establishment complete on server 192.168.4.18/192.168.4.18:2181, sessionid = 0x2000002cb0c0000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

从日志输出可以看到,客户端连接的是192.168.4.18:2181进程(连接上哪台机器的zk进程是随机的),客户端已成功连接上zk集群。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,175评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,674评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,151评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,597评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,505评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,969评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,455评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,118评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,227评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,213评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,214评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,928评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,512评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,616评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,848评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,228评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,772评论 2 339

推荐阅读更多精彩内容