原创:centos7.1下 ZooKeeper 集群安装配置+Python实战范例
生活随笔
收集整理的這篇文章主要介紹了
原创:centos7.1下 ZooKeeper 集群安装配置+Python实战范例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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
syncLimit=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.basicConfig()
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", value=b"a test value", 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", value=b"a test value", ephemeral=True)
while True:
? ? # print ("I am alive!")
? ? time.sleep(1)
zk.stop()
python3.6下運行完美,收工!任何疑問請聯系我本人 QQ:99923309
下載: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
syncLimit=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.basicConfig()
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", value=b"a test value", 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", value=b"a test value", ephemeral=True)
while True:
? ? # print ("I am alive!")
? ? time.sleep(1)
zk.stop()
python3.6下運行完美,收工!任何疑問請聯系我本人 QQ:99923309
轉載于:https://www.cnblogs.com/bdccloudy/p/7665262.html
總結
以上是生活随笔為你收集整理的原创:centos7.1下 ZooKeeper 集群安装配置+Python实战范例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】gdb 调试段错误
- 下一篇: Jenkins 笔记