1 单机
1.1 JDK 环境检查
[root@lighthouse lighthouse]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
1.2 下载并解压 zookeeper
下载页面:https://zookeeper.apache.org/releases.html
下载地址:https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
[root@lighthouse opt]# wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
[root@lighthouse opt]# tar -zxvf zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
1.3 修改配置文件
将/opt/apache-zookeeper-3.6.2-bin/conf这个路径下的zoo_sample.cfg修改为zoo.cfg;
[root@lighthouse conf]# cp zoo_sample.cfg zoo.cfg
修改配置文件zoo.cfg中的dataDir(数据目录)
dataDir=/opt/apache-zookeeper-3.6.2-bin/zkData
1.4 设置环境变量
# zookeeper 环境变量
export ZOOKEEPER_HOME=/usr/local/src/apache-zookeeper-3.6.2-bin/
export PATH=$ZOOKEEPER_HOME/bin:$PATH
将以上内容加入到/etc/profile文件末尾。
再执行以下命令使设置的环境变量生效:
[root@lighthouse conf]# source /etc/profile
1.5 启动停止zk
- 启动zookeeper服务
/bin/zkServer.sh start - 查询zookeeper状态
/bin/zkServer.sh status - 关闭zookeeper服务
/bin/zkServer.sh stop - 重启zookeeper服务
/bin/zkServer.sh restart - 查看zookeeper进程
ps -ef |grep zookeeper
1.6 启动zk客户端
zkCli.sh -server host:port # 指定连接节点,默认host=localhost,port=2181,如:zkCli.sh -server test2:2181,表示连接test2节点
2 搭建zk集群
此部分只是个人理解
搭建zk集群有多种方式
- 伪分布式
+ [2.1] 单台物理机上使用多个虚拟机,在每个虚拟上启动一个zk
+ [2.2] 单台物理机上使用docker启动多个zk容器
+ [2.3] 单台物理机上配置多个不同的zoo.cf配置文件,一次手动启动- 分布式
+ [2.4] 多台物理机,每台物理机上启动一个zk
+ [2.5] 多台物理机,每台物理机使用docker启动一个或多个zk容器
是否是伪分布式主要看是否只使用了一台物理机。
2.2 单台物理机上使用docker启动多个zk容器
2.2.1 安装好docker和docker-compose
2.2.2 docker-cluster的目录结构
----docker-cluster
----docker-compose.yml
----zoo1
----data
----myid
----datalog
----config
----zoo.cfg
----zoo2
----data
----myid
----datalog
----config
----zoo.cfg
----zoo3
----data
----myid
----datalog
----config
----zoo.cfg
2.2.3 网络配置
server1 | myid | ip |
---|---|---|
zoo1 | 1 | 172.16.238.10 |
zoo2 | 2 | 172.16.238.11 |
zoo3 | 3 | 172.16.238.12 |
2.2.4 配置文件内容
2.2.4.1 docker-compose.yml
(base) [root@yangkang zookeeper-cluster]# cat docker-compose.yml
version: '3.1'
services:
zoo1:
image: zookeeper
# restart: always
hostname: zoo1
ports:
- 2181:2181
networks:
mynet:
ipv4_address: 172.16.238.10
volumes:
- ./zoo1/data:/data
- ./zoo1/datalog:/data/log
- ./zoo1/config:/conf
zoo2:
image: zookeeper
# restart: always
hostname: zoo2
ports:
- 2182:2181
networks:
mynet:
ipv4_address: 172.16.238.11
volumes:
- ./zoo2/data:/data
- ./zoo2/datalog:/data/log
- ./zoo2/config:/conf
zoo3:
image: zookeeper
# restart: always
hostname: zoo3
ports:
- 2183:2181
networks:
mynet:
ipv4_address: 172.16.238.12
volumes:
- ./zoo3/data:/data
- ./zoo3/datalog:/data/log
- ./zoo3/config:/conf
networks:
mynet:
driver: bridge
ipam:
driver: default
config:
-
subnet: 172.16.238.0/24
gateway: 172.16.238.1
2.2.4.2 zoo1/config/zoo.cfg、zoo2/config/zoo.cfg、zoo3/config/zoo.cfg
这三个配置文件内容相同
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
standaloneEnabled=true
admin.enableServer=true
clientPort=2181
server.1=172.16.238.10:2888:3888
server.2=172.16.238.11:2888:3888
server.3=172.16.238.12:2888:3888
4lw.commands.whitelist=*
2.2.4.3 myid
zoo1/data/myid
1
zoo2/data/myid
2
zoo3/data/myid
3
2.2.5 启动
[root@lighthouse zookeeper-cluster]# docker-compose up
2.2.6 测试是否启动成功
2.2.6.1 查看容器是否启动成功
另打开一个终端执行以下命令
[root@lighthouse zookeeper-cluster]# docker-compose ps
2.2.6.2 测试四字命令是否可用
[root@lighthouse zookeeper-cluster]# echo stat | nc localhost 2181
[root@lighthouse zookeeper-cluster]# echo stat | nc localhost 2182
[root@lighthouse zookeeper-cluster]# echo stat | nc localhost 2183
2.2.6.3 测试zk客户端命令
前提在本地也安装了zk,只需启动zkCli.sh即可。本地安装zk即本篇文章1 单机
部分。
在本地启用zkCli.sh,此处打开了三个客户端
[root@lighthouse ~]# zkCli.sh -server localhost:2181
[root@lighthouse ~]# zkCli.sh -server localhost:2182
[root@lighthouse ~]# zkCli.sh -server localhost:2183
测试zk客户端命令
# 该客户端连接2181
[zk: localhost:2181(CONNECTED) 0] ls /
[zk: localhost:2181(CONNECTED) 1] create /a a
[zk: localhost:2181(CONNECTED) 2] get /a
# 该客户端连接2182
[zk: localhost:2182(CONNECTED) 0] ls /
[zk: localhost:2182(CONNECTED) 1] get /a
# 该客户端连接2183
[zk: localhost:2183(CONNECTED) 0] ls /
[zk: localhost:2183(CONNECTED) 1] get /a