作者:Antonius
docker環境下zookeeper集羣部署(一)
單節點docker,多個zookeeper容器集羣
直接使用shell腳本完成鏡像下載、子網創建、部署集羣等功能。
部署腳本
#!/bin/bash
#Get zookeeper image
zkimage=`docker images | grep zookeeper | awk {'print $1'}`
if [ -n "$zkimage" ]
then
echo 'The zookeeper image is already existed.'
else
echo 'Pull the latest zookeeper image.'
docker pull zookeeper
fi
#Create network for zookeeper containers
zknet=`docker network ls | grep zknetwork | awk {'print $2'}`
if [ -n "$zknet" ]
then
echo 'The zknetwork is already existed.'
else
echo 'Create zknetwork.'
docker network create zknetwork
fi
#Start zookeeper cluster
echo 'Start 3 zookeeper servers.'
ZOO_SERVERS="server.1=zkServer1:2888:3888 server.2=zkServer2:2888:3888 server.3=zkServer3:2888:3888"
docker run -d -e ZOO_SERVERS="$ZOO_SERVERS" -e ZOO_MY_ID=1 --name zkServer1 --net zknetwork -p 2181:2181 zookeeper
docker run -d -e ZOO_SERVERS="$ZOO_SERVERS" -e ZOO_MY_ID=2 --name zkServer2 --net zknetwork -p 2182:2181 zookeeper
docker run -d -e ZOO_SERVERS="$ZOO_SERVERS" -e ZOO_MY_ID=3 --name zkServer3 --net zknetwork -p 2183:2181 zookeeper
查看容器:
docker container ls
使用containerId進入容器內部,就可以像正常zk命令行操作了
docker exec -it containerId sh
使用python操作zk集羣:
# -*- coding:utf-8 -*-
__author__ = 'xxxx'
from kazoo.client import KazooClient
HOSTS="$serverIp:2181"
class PyZooConn(object):
# init function include connection method
def __init__(self):
self.zk = KazooClient(hosts=HOSTS)
self.zk.start()
# get node data
def get_data(self, param):
result = self.zk.get(param)
print
result
# create a node and input a value in this node
def create_node(self, node, value):
self.zk.create(node, value)
# close the connection
def close(self):
self.zk.stop()
if __name__ == '__main__':
pz = PyZooConn()
pz.create_node("/test", bytes("123",encoding='utf8'))
pz.get_data("/test/")
pz.close()
總結:
1.docker命令權限問題
當前用戶既不是root,也沒有加入docker羣組,無法操作docker.sock文件。
解決辦法:
(1). 使用sudo來使用docker命令
(2). 將當前用戶加入docker權限組
2.配置修改
如果需要修改zookeeper配置,進入container後修zoo.cfg文件
3.配置文件位置
(1). my.id文件:/data/my.id
(2). zoo.cfg文件:/conf/zoo.cfg
4.配置文件參數介紹
參考https://hub.docker.com/_/zookeeper/