Docker 搭建Zookeeper集群(Docker & Zookeeper & Replication)

环境准备

依赖

  • CentOS7.6

安装Docker

参照安装(点击)

单实例(Without Docker)

安装JDK

去官网上下载1.8版本的tar.gz ,如果使用yum安装或者下载rpm包安装,则会缺少Scala2.11需要的部分文件。

tar xf jdk-8u221-linux-x64.tar -C /usr/lib/jvm
rm -rf /usr/bin/java
ln -s /usr/lib/jvm/jdk1.8.0_221/bin/java /usr/bin/java

编辑文件

vim /etc/profile.d/java.sh

添加

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_221
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export PATH=${JAVA_HOME}/bin:$PATH

然后使环境变量生效

source /etc/profile

执行以下命令检查环境变量

[root@vm1 bin]# echo $JAVA_HOME
/usr/lib/jvm/jdk1.8.0_221
[root@vm1 bin]# echo $JAVA_HOME
/usr/lib/jvm/jdk1.8.0_221

下载安装包

官网获取下载地址

wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/stable/apache-zookeeper-3.5.6-bin.tar.gz

注意不要下载非bin版本
解压

tar xf apache-zookeeper-3.5.6-bin.tar.gz -C /opt/

配置

拷贝sample配置为启动配置

cd /opt/apache-zookeeper-3.5.6-bin/bin
cp -rf ../conf/zoo_sample.cfg ../conf/zoo.cfg

启动

sh zkServer.sh start

如果启动失败可以使用以下命令来查看错误

sh zkServer.sh start-foreground

测试

sh zkCli.sh

集群安装(Without Docker)

准备

启动三台虚拟机,vm1、vm2、vm3在一个子网当中。三台机器按照单实例模式进行安装。

配置

在三台机器上执行以下命令添加集群配置

cat >> /opt/apache-zookeeper-3.5.6-bin/conf/zoo.cfg <<EOF
server.1=vm1:2888:3888
server.2=vm2:2888:3888
server.3=vm3:2888:3888
EOF

各台机器上分别设置zookeeper id

#vm1
mkdir -p /tmp/zookeeper
echo "1" > /tmp/zookeeper/myid
#vm2
mkdir -p /tmp/zookeeper
echo "2" > /tmp/zookeeper/myid
#vm3
mkdir -p /tmp/zookeeper
echo "3" > /tmp/zookeeper/myid

启动

在三台机器上分别执行

sh zkServer.sh start

测试

curl http://vm1:8080/commands/monitor
curl http://vm2:8080/commands/monitor
curl http://vm3:8080/commands/monitor

基本单实例(With Docker)

docker run --name zookeeper --hostname zookeeper \
--restart=always -p 2181:2181 -p 8080:8080 -d \
zookeeper:latest

overlay网络集群(With Docker)

准备基础环境

部署三台机器vm1,vm2,vm3。基础环境和单实例一样。

创建swarm overlay网络

创建swarm overlay网络(点击)

启动命令

docker run -d --name=zookeeper-1 --hostname=zookeeper-1 --network=overlay --restart=always -p 2181:2181 -p 8080:8080 -e ZOO_MY_ID=1 -e ZOO_SERVERS="server.1=zookeeper-1:2888:3888;2181 server.2=zookeeper-2:2888:3888;2181 server.3=zookeeper-3:2888:3888;2181" -v /etc/localtime:/etc/localtime zookeeper
docker run -d --name=zookeeper-2 --hostname=zookeeper-2 --network=overlay --restart=always -p 2181:2181 -p 8080:8080 -e ZOO_MY_ID=2 -e ZOO_SERVERS="server.1=zookeeper-1:2888:3888;2181 server.2=zookeeper-2:2888:3888;2181 server.3=zookeeper-3:2888:3888;2181" -v /etc/localtime:/etc/localtime zookeeper
docker run -d --name=zookeeper-3 --hostname=zookeeper-3 --network=overlay --restart=always -p 2181:2181 -p 8080:8080 -e ZOO_MY_ID=3 -e ZOO_SERVERS="server.1=zookeeper-1:2888:3888;2181 server.2=zookeeper-2:2888:3888;2181 server.3=zookeeper-3:2888:3888;2181" -v /etc/localtime:/etc/localtime zookeeper

查看leader

分别对vm1,vm2,vm3执行命令

curl http://vm1:8080/commands/monitor
curl http://vm2:8080/commands/monitor
curl http://vm3:8080/commands/monitor

显示结果

{
  "version" : "3.5.5-390fe37ea45dee01bf87dc1c042b5e3dcce88653, built on 05/03/2019 12:07 GMT",
  "avg_latency" : 0,
  "max_latency" : 0,
  "min_latency" : 0,
  "packets_received" : 0,
  "packets_sent" : 0,
  "num_alive_connections" : 0,
  "outstanding_requests" : 0,
  "server_state" : "leader",
  "znode_count" : 5,
  "watch_count" : 0,
  "ephemerals_count" : 0,
  "approximate_data_size" : 182,
  "open_file_descriptor_count" : 46,
  "max_file_descriptor_count" : 1048576,
  "last_client_response_size" : -1,
  "max_client_response_size" : -1,
  "min_client_response_size" : -1,
  "followers" : 2,
  "synced_followers" : 2,
  "pending_syncs" : 0,
  "last_proposal_size" : -1,
  "max_proposal_size" : -1,
  "min_proposal_size" : -1,
  "command" : "monitor",
  "error" : null
}

server_state显示为leader,否则是follower

使用zkCli.sh客户端访问

docker run -it --rm --network overlay zookeeper zkCli.sh -server zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181

Docker Stack 搭建(With Docker)

创建目录

在vm1,vm2,vm3上执行以下命令创建目录

#vm1
mkdir -p /opt/volumns/zookeeper-1/data
mkdir -p /opt/volumns/zookeeper-1/datalog

#vm2
mkdir -p /opt/volumns/zookeeper-2/data
mkdir -p /opt/volumns/zookeeper-2/datalog

# vm3
mkdir -p /opt/volumns/zookeeper-3/data
mkdir -p /opt/volumns/zookeeper-3/datalog

编写zookeeper.yaml

vim /root/zookeeper.yaml

添加文本

version: "3"
services:
  zookeeper-1:
    image: zookeeper
    hostname: zookeeper-1
    networks:
      - overlay
    ports:
      - 2181:2181
      - 8080:8080
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zookeeper-1:2888:3888;2181 server.2=zookeeper-2:2888:3888;2181 server.3=zookeeper-3:2888:3888;2181
    volumes:
      - /etc/localtime:/etc/localtime
      - /opt/volumns/zookeeper-1/data:/data
      - /opt/volumns/zookeeper-1/datalog:/datalog
    deploy:
      restart_policy:
        condition: on-failure
      replicas: 1
      placement:
        constraints:
          - node.hostname==vm1
  zookeeper-2:
    image: zookeeper
    hostname: zookeeper-2
    networks:
      - overlay
    ports:
      - 2182:2181
      - 8081:8080
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zookeeper-1:2888:3888;2181 server.2=zookeeper-2:2888:3888;2181 server.3=zookeeper-3:2888:3888;2181
    volumes:
      - /etc/localtime:/etc/localtime
      - /opt/volumns/zookeeper-2/data:/data
      - /opt/volumns/zookeeper-2/datalog:/datalog
    deploy:
      restart_policy:
        condition: on-failure
      replicas: 1
      placement:
        constraints:
          - node.hostname==vm2
  zookeeper-3:
    image: zookeeper
    hostname: zookeeper-3
    networks:
      - overlay
    ports:
      - 2183:2181
      - 8082:8080
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zookeeper-1:2888:3888;2181 server.2=zookeeper-2:2888:3888;2181 server.3=zookeeper-3:2888:3888;2181
    volumes:
      - /etc/localtime:/etc/localtime
      - /opt/volumns/zookeeper-3/data:/data
      - /opt/volumns/zookeeper-3/datalog:/datalog
    deploy:
      restart_policy:
        condition: on-failure
      replicas: 1
      placement:
        constraints:
          - node.hostname==vm3

networks:
  overlay:
    driver: overlay

其中,ZOO_SERVERS地址的2181端口号不可省略,否则客户端无法访问

Docker stack启动

docker stack deploy -c zookeeper.yaml zookeeper

查看启动状态

docker stack ps zookeeper --no-trunc

显示

ID                          NAME                      IMAGE                                                                                      NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
r0rawp7cl3vjwrpdbgb4yjyry   zookeeper_zookeeper-3.1   zookeeper:latest@sha256:4879178a575d76d5720602f81107be4d165107ab03de0b26669605a5d39d656d   vm3                 Running             Running 2 minutes ago                       
mfw7c7pgjb13nxwggfbbcm0n8   zookeeper_zookeeper-2.1   zookeeper:latest@sha256:4879178a575d76d5720602f81107be4d165107ab03de0b26669605a5d39d656d   vm2                 Running             Running 2 minutes ago                       
3x7670knbjuh8uhk8f9uwhnmh   zookeeper_zookeeper-1.1   zookeeper:latest@sha256:4879178a575d76d5720602f81107be4d165107ab03de0b26669605a5d39d656d   vm1                 Running             Running 2 minutes ago    

测试

启动容器测试

docker run -it --rm  zookeeper zkCli.sh -server vm1:2181

输入

create /test hello

在另一个实例上检查是否存在

docker run -it --rm  zookeeper zkCli.sh -server vm1:2182

输入

ls /test
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值