作者: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/