Zookeeper集群Docker搭建(伪)
Zookeeper集群Docker搭建(伪)
第一种方式(在Docker中模拟在liunx单机)
第一步
首先找一个目录创建三个文件夹,分别放置三个zk的zoo.cfg配置文件,例如我放在了/home/zookeeper
/home/zookeeper/
|-- zoo1
| `-- zoo.cfg
|-- zoo2
| `-- zoo.cfg
`-- zoo3
`-- zoo.cfg
由于是伪集群端口需要修改
这里的1是myid要和myid文件中的对应
localhost因为是伪集群就都在一台机器
2888是默认的集群通信交换数据的端口
3888是默认的选举端口
server.1=localhost:2888:3888
配置文件内容
# 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=/data
dataLogDir=/data
# the port at which the clients will connect
clientPort=2181 //控制台默认端口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
admin.serverPort=9991 //控制台默认端口8080,所以每个配置文件要不一样否则会占用
server.1=127.0.0.1:2881:8881
server.2=127.0.0.1:2882:8882
server.3=127.0.0.1:2883:8883
第二步
然后myid同理,需要三个文件夹,为了清晰我都是分开放置的,默认是在/tmp/zookeeper下,这里我创建了三个文件夹,在每个文件夹创建一个myid文件分别写入1,2,3
第三步
拉取zookeeper镜像,分别挂载myid和zoo.cfg,默认会去找/conf/zoo.cfg,网络使用的host和主机对应,运行docker命令,启动集群
docker run -itd --network host -v /tmp/zookeeper1:/data -v /home/zookeeper/zoo1:/conf --name zoo1 zookeeper
docker run -itd --network host -v /tmp/zookeeper2:/data -v /home/zookeeper/zoo2:/conf --name zoo2 zookeeper
docker run -itd --network host -v /tmp/zookeeper3:/data -v /home/zookeeper/zoo3:/conf --name zoo3 zookeeper
进入容器进入bin目录运行命令查看集群是否成功部署,然后stop掉leader,另外两台会自动有一台升级为leader,当再一次启动,因为已经有master,所以不会发起投票,自动成为follower
第二种方式
使用docker-compose进行构建,只需要写好docker-compose.yml文件即可,由于这里没有使用host模式所以端口不会互相冲突
version: '3.1'
services:
zk1:
image: zookeeper
restart: always
container_name: zk1
ports:
- 2181:2181
volumes:
- /usr/local/docker/zookeeper/zk1/data:/data
- /usr/local/docker/zookeeper/zk1/datalog:/datalog
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
zk2:
image: zookeeper
restart: always
container_name: zk2
ports:
- 2182:2181
volumes:
- /usr/local/docker/zookeeper/zk2/data:/data
- /usr/local/docker/zookeeper/zk2/datalog:/datalog
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
zk3:
image: zookeeper
restart: always
container_name: zk3
ports:
- 2183:2181
volumes:
- /usr/local/docker/zookeeper/zk3/data:/dada
- /usr/local/docker/zookeeper/zk3/datalog:/datalog
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
在配置文件目录下使用docker-compose up启动即可
第三种方式
参考了第二种方式,我们可以基于容器的隔离性做一些事情,虽然是伪集群缺又看起来像真的集群,我们利用docker自带的bridge网络进行通信,首先ifconfig查看docker0的ip,然后分给三个容器 (同样也可以使用自定义网络只不过启动要指定–network 还有要注意创建的网络的网段是多少,指定ip写配置更容易,默认网络无法指定ip)
和第一种的目录位置一样只是修改了一下配置文件
# 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=/data
dataLogDir=/data
# 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
#admin.serverPort=9991
server.1=172.17.0.2:2881:8881
server.2=172.17.0.3:2881:8881
server.3=172.17.0.4:2881:8881
~
创建容器的时候依次启动1 2 3,ip就会从172.17.0.2开始分配
上一篇: 将List进行分页
下一篇: 传统节日的食物有哪些