centos7.1下 ZooKeeper 集群安装配置+Python实战范例 下载:http://apache.fayea.com/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz 解压: tar zxvf zookeeper-3.4.9.tar.gz -C /opt/ 改名:cd /opt/ && mv zookeeper-3.4.9 zookeeper && cd zookeeper 建立 data目录 mkdir data 分布式模式配置 ZooKeeper集群一般被称为ZooKeeper ensemble,或者 quorum. 2.1 准备5台机器 假设有五台机器,hostname和ip对应关系是: 192.168.48.13 hzmaster1 192.168.48.17 hzmaster2 192.168.48.16 hzslave1 192.168.48.5 hzslave2 192.168.48.12 hzslave3 ZooKeeper不存在明显的master/slave关系,各个节点都是服务器,
leader挂了,会立马从follower中选举
一个出来作为
leader. 由于没有主从关系,也不用配置SSH无密码
登录了,各个zk服务器是自己启动的,互相之间通过TCP端口来交换数据。 2.2
修改配置文件/opt/zookeeper/conf/zoo.cfg tickTime=2000 initLimit=10 syn
climit=5 dataDir=/opt/zookeeper/data clientPort=2181 server.0=192.168.48.13:2888:3888 server.1=192.168.48.17:2888:3888 server.2=192.168.48.16:2888:3888 server.3=192.168.48.5:2888:3888 server.4=192.168.48.12:2888:3888 我一般把服务器程序,即需要启动daemon进程的程序,放在单独的
用户里安装;且
用户的数据,放在local/var下面,所以我的dataDir是/home/zookeeper/local/var/zookeeper。 2.3 myid
文件 要在每台机器的dataDir下,新建
一个myid
文件,里面存放
一个数字,用来标识当前主机。 hzmaster1:$ echo "0" >>/opt/zookeeper/data/myid hzmaster2:$ echo "1" >>/opt/zookeeper/data/myid hzslave1:$ echo "2" >>/opt/zookeeper/data/myid hzslave2:$ echo "3" >>/opt/zookeeper/data/myid hzslave3:$ echo "4" >>/opt/zookeeper/data/myid 2.4 启动每台机器 hzmaster1:$ /opt/zookeeper/bin/zkServer.sh start hzmaster2:$ /opt/zookeeper/bin/zkServer.sh start hzslave1:$ /opt/zookeeper/bin/zkServer.sh start hzslave2:$ /opt/zookeeper/bin/zkServer.sh start hzslave3:$ /opt/zookeeper/bin/zkServer.sh start 启动顺序无关 2.5 查看状态 $ /opt/zookeeper/bin/zkServer.sh status 3 使用java客户端连接ZooKeeper集群 找一台机器,解压zookeeper压缩包,不用配置,就可以使用Java客户端连接ZooKeeper集群中的任意一台服务器了。 $ /opt/zookeeper/bin/zkCli.sh -server hzmaster2 常用命令: 1. 启动ZK服务: sh bin/zkServer.sh start 2. 查看ZK服务状态: sh bin/zkServer.sh status 3. 停止ZK服务: sh bin/zkServer.sh stop 4. 重启ZK服务: sh bin/zkServer.sh restart 客户端工具 ./zkCli.sh ZooKeeper命令行工具类似于Linux的shell环境,不过
功能肯定不及shell啦,但是使用它我们可以简单的对ZooKeeper进行访问,数据创建,数据
修改等操作. 使用 zkCli.sh -server 127.0.0.1:2181 连接到 ZooKeeper 服务,连接成功后,系统会
输出 ZooKeeper 的相关环境以及配置信息。 命令行工具的一些简单操作如下: 1.
显示根目录下、
文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的
内容 2.
显示根目录下、
文件: ls2 / 查看当前节点数据并能看到更新
次数等数据 3.
创建文件,并设置初始
内容: create /zk "test" 创建
一个新的 znode节点“ zk ”以及与它关联的字符串 4.
获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串 5.
修改文件内容: set /zk "zkbak" 对 zk 所关联的字符串进行设置 6.
删除文件: delete /zk 将刚才创建的 znode
删除 7.
退出客户端: quit 8. 帮助命令: help
删除要逐层
删除才可以,子节点下如果还有
内容就不能
删除! 一段python
代码: #coding=utf-8 __author__ = 'huangzhi' import kazoo import logging from time import sleep from kazoo.client import KazooClient import time import logging logging.basicCon
fig() zk = KazooClient(hosts='192.168.51.19:2181,192.168.51.85:2181,192.168.51.196:2181,192.168.51.225:2181,192.168.51.227:2181') # zk = KazooClient(hosts='192.168.51.19:2181') zk.start(timeout=2) print (zk.state) def myWatch(handler): # 保证可以被重复监听,值发生变化后会立即触发 value = zk.get('/test',myWatch) print(value[0].decode()) print(zk.hosts) """An ephemeral node will be automatically removed by ZooKeeper when the session associated with the creation of the node expires. """ # zk.create("/test",value=b"a test value",ephemeral=True) #
退出后
自动删除 # zk.create("/test",ephemeral=False) #
退出后不
自动删除 # zk.set('test',b"hello I'm") value = zk.get('/test',myWatch) print(value[0].decode()) for v in value: print(v) # print (zk.state) #CONNECTED # print (zk.randomize_hosts) # Ensure a path,create if necessary # zk.ensure_path("/test/failure_detection") # # # Create a node with data # zk.create("/test/failure_detection/worker",ephemeral=True) while True: # print ("I am alive!") time.sleep(1) zk.stop()
python3.6下运行完美,收工!任何疑问请联系我本人 QQ:99923309