ZooKeeper---搭建

简要


ZooKeeper的安装模式分为三种,分别为:单机模式(stand-alone)、集群模式和集群伪分布模式。ZooKeeper 单机模式的安装相对比较简单,如果第一次接触ZooKeeper的话,建议安装ZooKeeper单机模式或者集群伪分布模式。

安装


  • 首先去官网下载ZooKeeper稳定版
  • 自备JDK 6以上环境
  • 解压 tar xvzf zookeeper-x.x.x.tar
  • 配置文件
    在zookeeper x.x.x/conf 下,将zoo_sample.cfg 复制一份为zoo.cfg
    配置项解析:
    • tickTime=2000
      基本事件单元,以毫秒为单位。它用来控制心跳和超时,默认情况下最小的会话超时时间为两倍的 tickTime

    • dataDir=/tmp/zookeeper
      存储内存中数据库快照的位置;
      注意 应该谨慎地选择日志存放的位置,使用专用的日志存储设备能够大大地提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会在很大程度上影响系统的性能。

    • dataLogDir
      这个操作将管理机器把事务日志写入到“ dataLogDir ”所指定的目录,而不是“ dataDir ”所指定的目录。这将允许使用一个专用的日志设备并且帮助我们避免日志和快照之间的竞争。

    • clientPort=2181
      ** 监听客户端连接的端口**

    • maxClientCnxns=60
      这个操作将限制连接到 ZooKeeper 的客户端的数量,限制并发连接的数量,它通过 IP 来区分不同的客户端。此配置选项可以用来阻止某些类别的 Dos 攻击。将它设置为 0 或者忽略而不进行设置将会取消对并发连接的限制

    • initLimit=10(集群配置)
      此配置表示,允许 follower (相对于 leader 而言的“客户端”)连接并同步到 leader 的初始化连接时间,它以 tickTime 的倍数来表示。当超过设置倍数的 tickTime 时间,则连接失败。

    • syncLimit=5(集群配置)
      此配置表示, leader 与 follower 之间发送消息,请求和应答时间长度。如果 follower 在设置的时间内不能与leader 进行通信,那么此 follower 将被丢弃。

    • autopurge.snapRetainCount=3
      这个参数和autopurge.purgeInterval搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。

    • autopurge.purgeInterval=1
      这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默认是0,表示不开启自己清理功能。

单机版

  • 单机版zoo.cfg配置如下:
    clientPort=2181 dataDir=/tmp/zookeeper tickTime=2000
  • 启动方式
    直接在bin目录,运行 zkServer.sh start
Paste_Image.png

成功启动

Paste_Image.png

联机版

  • 联机版每台机器的zoo.cfg配置如下:
    tickTime=2000 dataDir=/tmp/zookeeper clientPort=2181 initLimit=10 syncLimit=5 maxClientCnxns=60 server.1=ip1:2887:3887 server.n=ip2:2888:3888 ... (实际上,有多少台机器,这边就要配多少个ip,联机版下组成集群,端口可以一样,但是在单机多实例下,端口必须不同,否则会有冲突,详细见下方)
  • 启动方式跟单机版一致(穷人只有一台vps,请自行测试)

单机多实例版

一台机器,启动多个zooKeeper

  • 单机多实例版每个实例的zoo.cfg配置如下:
    • zoo1.cfg:
      tickTime=2000 dataDir=/tmp/zookeeper/zk_data_1 clientPort=2181 initLimit=10 syncLimit=5 maxClientCnxns=60 server.1=localhost:2887:3887 server.2=localhost:2888:3888
    • zoo2.cfg:
      tickTime=2000 dataDir=/tmp/zookeeper/zk_data_2 clientPort=2182 initLimit=10 syncLimit=5 maxClientCnxns=60 server.1=localhost:2887:3887 server.2=localhost:2888:3888

注意dataDir的路径是不一样的,clientPort也必须是不一样

  • 启动方式
    直接./zkServer.sh start zooX.cfg
Paste_Image.png

** 然并卵,当查看输出文件的时候,你会发现根本就没跑起来,还抛异常了**

Paste_Image.png

2017-06-05 02:44:07,009 [myid:] - INFO [main:QuorumPeerConfig@124] - Reading configuration from: ./conf/zoo1.cfg 2017-06-05 02:44:07,448 [myid:] - INFO [main:QuorumPeer$QuorumServer@149] - Resolved hostname: localhost to address: localhost/127.0.0.1 2017-06-05 02:44:07,449 [myid:] - INFO [main:QuorumPeer$QuorumServer@149] - Resolved hostname: localhost to address: localhost/127.0.0.1 2017-06-05 02:44:07,459 [myid:] - WARN [main:QuorumPeerConfig@305] - No server failure will be tolerated. You need at least 3 servers. 2017-06-05 02:44:07,459 [myid:] - INFO [main:QuorumPeerConfig@352] - Defaulting to majority quorums 2017-06-05 02:44:07,462 [myid:] - ERROR [main:QuorumPeerMain@85] - Invalid config, exiting abnormally org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing ./conf/zoo1.cfg at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:144) at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:101) at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78) Caused by: java.lang.IllegalArgumentException: /tmp/zookeeper/data1/myid file is missing at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:362) at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:140) ... 2 more Invalid config, exiting abnormally
之前一直想,它是怎么在同一台机器上,识别到自己就是server.1,并且使用对应的端口,它报的就是这个问题.
解决方式: 在配置文件中的dataDir指定的目录下,创建一个myid的文件,里面的内容只有一个数字,就是server.x后面的x,例如zoo1.cfg,采用server.1的ip与端口,则在对应的dataDir下创建一个myid,并把数字写入

Paste_Image.png

再重新跑起来,问题解决.

测试对应的zooKeeper进程是否有正常运行,使用命令
echo stat | nc yourZooKeeperIP yourZooKeeperPort
有返回即正常

Paste_Image.png

ZooKeeper命令


表 1 : ZooKeeper 四字命令

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

下图 1 是 ZooKeeper 四字命令的简单用例:

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

推荐阅读更多精彩内容