基于 Docker 安装 Zookeeper

2019-12-02  本文已影响0人  isuntong

概述

Zookeeper 部署有三种方式,单机模式、集群模式、伪集群模式,以下采用 Docker 的方式部署

单机部署就是部署一台,集群部署就是部署多台,但是是独立的服务器,伪集群部署是在一台服务器部署多个Zookeeper

注意: 集群为大于等于3个奇数,如 3、5、7,不宜太多,集群机器多了选举和数据同步耗时长,不稳定。

伪集群模式

其实也是集群模式,因为用的是docker,沙箱机制

创建一个docker-compose虚拟机镜像,分配内存4个g,因为一个Zookeeper大概需要1个g

在/usr/local/docker/zookeeper目录下新建docker-compose.yml文件

version: '3.1'
services:
    zoo1:
        image: zookeeper
        restart: always
        hostname: zoo1
        ports:
            - 2181:2181
        environment:
            ZOO_MY_ID: 1
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

    zoo2:
        image: zookeeper
        restart: always
        hostname: zoo2
        ports:
            - 2182:2181
        environment:
            ZOO_MY_ID: 2
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

    zoo3:
        image: zookeeper
        restart: always
        hostname: zoo3
        ports:
            - 2183:2181
        environment:
            ZOO_MY_ID: 3
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

hostname是主机的名字

正常要用ip访问,在局域网除了ip访问,还可以在hostname访问。

忘了docker pull zookeeper拉取镜像了

拉取之后

守护态启动docker-compose项目

此时3个容器出现

一主两从部署完成

以交互模式进去看一下谁是主,谁是从

docker exec -it zookeeper_zoo1_1 /bin/bash

后面的/bin/bash的作用是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这样当你使用docker ps 查看启动的容器时,就会发现你刚刚创建的那个容器并不在已启动的容器队列中。这个/bin/bash就表示启动容器后启动bash。

报错找不到端口,百度说最新的发行版有问题,回到3.4.13版本

重新拉取

docker pull zookeeper:3.4.13

再次运行docker-compose项目

查看容器

注意修改配置文件里image的内容

version: '3.1'
services:
    zoo1:
        image: zookeeper:3.4.13
        restart: always
        hostname: zoo1
        ports:
            - 2181:2181
        environment:
            ZOO_MY_ID: 1
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

    zoo2:
        image: zookeeper:3.4.13
        restart: always
        hostname: zoo2
        ports:
            - 2182:2181
        environment:
            ZOO_MY_ID: 2
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

    zoo3:
        image: zookeeper:3.4.13
        restart: always
        hostname: zoo3
        ports:
            - 2183:2181
        environment:
            ZOO_MY_ID: 3
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

交互方式进去后pwd看所在位置

打开bin目录

./zkServer.sh status查看模式

因为选举时按id,所以猜测最后一个启动的应该是leader,理论上3应该是最后启动的

果然是leader

打开配置文件目录

打开配置文件

Zookeeper配置说明

Zookeeper 的三种工作模式

Zookeeper 的三种端口号

Zookeeper 单机模式配置文件

配置文件路径:/conf/zoo.cfg

clientPort=2181
dataDir=/data
dataLogDir=/datalog
tickTime=2000

Zookeeper 集群模式配置文件

配置文件路径:/conf/zoo.cfg

clientPort=2181
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
server.1=192.168.0.1:2888:3888
server.2=192.168.0.2:2888:3888
server.3=192.168.0.3:2888:3888

注意: server.A 中的 A 是在 dataDir 配置的目录中创建一个名为 myid 的文件里的值(如:1)

Zookeeper 常用命令

zkServer

./zkServer.sh start

./zkServer.sh stop

./zkServer.sh restart

./zkServer.sh status

zkClient

./zkCli.sh -server <ip>:<port>

# 命令参数
ZooKeeper -server host:port cmd args
    stat path [watch]
    set path data [version]
    ls path [watch]
    delquota [-n|-b] path
    ls2 path [watch]
    setAcl path acl
    setquota -n|-b val path
    history 
    redo cmdno
    printwatches on|off
    delete path [version]
    sync path
    listquota path
    rmr path
    get path [watch]
    create [-s] [-e] path data acl
    addauth scheme auth
    quit 
    getAcl path
    close 
    connect host:port

create /test "hello zookeeper"

get /test

# 输出如下
Hello Zookeeper
cZxid = 0x100000004
ctime = Fri Oct 19 05:11:47 GMT 2018
mZxid = 0x100000004
mtime = Fri Oct 19 05:11:47 GMT 2018
pZxid = 0x100000004
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 15
numChildren = 0

delete /test

Eureka和ZooKeeper的区别

参考博客

CAP原理。Zookeeper感觉差了一点意思

上一篇 下一篇

猜你喜欢

热点阅读