Zookeeper集群环境搭建

参考:从Paxos到Zookeeper分布式一致性原理与实践(倪超)

1. 安装Java环境

我们采用Docker compose构建集群。为了只安装一次Java环境,我们先在宿主OS上安装Java环境,然后映射到Docker容器中。Java安装的具体做法参照《安装OpenJDK1.8》。

2.下载解压Zookeeper

参照http://zookeeper.apache.org/releases.html

$ wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz
$ tar xvf zookeeper-3.4.12.tar.gz

为了避免重复下载安装zookeeper,我们也采用docker映射的方式将已下载并解压的zookeeper映射到容器中。

3. 编写Docker compose脚本

docker-compose.yml文件如下

version: '2'
 
networks:
  thinking:
  
services:
  test_1.thinking.com:
    image: ubuntu
    ports:
      - "3333:3333"
    container_name: test_1.thinking.com
    command: /bin/bash
    tty: true
    networks:
      - thinking
    volumes:
      - /etc/java-8-openjdk:/etc/java-8-openjdk
      - /usr/lib/jvm/java-8-openjdk-amd64:/usr/lib/jvm/java-8-openjdk-amd64
      - /home/yong/Desktop/ZK-test/zookeeper-3.4.12:/home/zookeeper-3.4.12
    environment:
      - JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
      - PATH=${PATH}:/usr/lib/jvm/java-8-openjdk-amd64/bin:/usr/lib/jvm/java-8-openjdk-amd64/jre/bin

 
  test_2.thinking.com:
    image: ubuntu
    ports:
      - "4444:4444"
    container_name: test_2.thinking.com
    command: /bin/bash
    tty: true
    networks:
      - thinking
    volumes:
      - /etc/java-8-openjdk:/etc/java-8-openjdk
      - /usr/lib/jvm/java-8-openjdk-amd64:/usr/lib/jvm/java-8-openjdk-amd64
      - /home/yong/Desktop/ZK-test/zookeeper-3.4.12:/home/zookeeper-3.4.12
    environment:
      - JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
      - PATH=${PATH}:/usr/lib/jvm/java-8-openjdk-amd64/bin:/usr/lib/jvm/java-8-openjdk-amd64/jre/bin

  test_3.thinking.com:
    image: ubuntu
    ports:
      - "5555:5555"
    container_name: test_3.thinking.com
    command: /bin/bash
    tty: true
    networks:
      - thinking
    volumes:
      - /etc/java-8-openjdk:/etc/java-8-openjdk
      - /usr/lib/jvm/java-8-openjdk-amd64:/usr/lib/jvm/java-8-openjdk-amd64
      - /home/yong/Desktop/ZK-test/zookeeper-3.4.12:/home/zookeeper-3.4.12
    environment:
      - JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
      - PATH=${PATH}:/usr/lib/jvm/java-8-openjdk-amd64/bin:/usr/lib/jvm/java-8-openjdk-amd64/jre/bin

4.编写Zookeeper配置

由于zookeeper集群中每台机器都需要感知整个集群是由那些机器组成的,所以每台机器的信息都需要配置在配置文件中,而且所有机器的配置文件都必须是相同的。所以,我们用Docker文件映射的方式来实现。

在docker-compose.yml中添加映射

/home/yong/Desktop/ZK-test/zookeeper-3.4.12:/home/zookeeper-3.4.12

然后编辑zookeeper-3.4.12/conf/zoo.cfg文件如:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

server.1=test_1.thinking.com:2888:3888
server.2=test_2.thinking.com:2888:3888
server.3=test_3.thinking.com:2888:3888

5.启动集群

先启动Docker集群

$ docker-compose -f docker-compose.yml up -d

然后进入各个docker容器,启动zookeeper

$ docker exec -it test_1.thinking.com /bin/bash
# mkdir -p /tmp/zookeeper
# cd /tmp/zookeeper
# echo 1 > myid
# cd /home/zookeeper-3.4.12/bin/
# sh zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/zookeeper-3.4.12/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
# sh zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower

其他两个zookeeper服务器类似。注意,myid里面只需要将zookeeper服务器的id写入。

如果出现错误如:

# sh zkServer.sh start
zkServer.sh: 81: /home/zookeeper-3.4.12/bin/zkEnv.sh: Syntax error: "(" unexpected (expecting "fi")

解决:

# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 May 26 00:44 /bin/sh -> dash
# ln -sf bash /bin/sh
# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Jul 13 06:12 /bin/sh -> bash

验证zookeeper是否成功启动:

# apt-get update
# apt-get install telnetd telnet openbsd-inetd net-tools
# /etc/init.d/openbsd-inetd restart
 * Restarting internet superserver inetd                                 [ OK ] 
# netstat -a | grep telnet
tcp        0      0 0.0.0.0:telnet          0.0.0.0:*               LISTEN  
# telnet 127.0.0.1 2181

telnet连上之后,输入start

据说这个方法是可以的,但是我没有试成功。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值