分布式学习之zookeeper-1
开始学习zookeeper系列
本次学习一些入门操作.
版本: 3.4.x
最新版本:3.6.x
下载与安装
下载地址: https://zookeeper.apache.org/releases.html
放入本地目录进入.../conf
目录,复制zoo_sample.cfg
更名为zoo.cfg
配置文件主要内容:
- tickTime:客户端与服务器或者服务器与服务器之间维持心跳,也就是每个tickTime时间就会发送一次心跳。通过心跳不仅能够用来监听机器的工作状态,还可以通过心跳来控制Flower跟Leader的通信时间,默认情况下FL的会话时常是心跳间隔的两倍. tickTime单位为毫秒.
- initLimit: follower在启动过程中,会从leader同步所有最新数据,然后确定自己对外服务的起始状态.Leader允许follower在initTime时间内完成这个工作.通常清光下,不需要在意这个参数的设置.如果ZK集群数量确实很大.Follower启动的时候,从Leader上同步数据的时间就会变长,这个时候需要调整这个参数.默认为10.
- syncLimit: zk运行期间,Leader检测Follower发来的心跳包,当leader发出心跳包syncLimit之后还没有收到Follower的响应。那么认为这个Follower已经下线。
- dataDir、dataLogDir: 对应的目录是用来存放myid信息跟一些版本,日志,跟服务器唯一的ID信息
- clientPort : 客户端连接服务器的端口
windows
设置好配置文件,运行 /bin/zkServer.cmd
启动server。然后执行/bin/zkCli.cmd
运行客户端
下面命令检查。(当然也可以配置环境变量,直接在cmd/powershell中执行响应命令。)
> create -e /j 1
Created /j
> get /j
1
cZxid = 0x3a
ctime = Sat Dec 12 09:51:57 CST 2020
mZxid = 0x3a
mtime = Sat Dec 12 09:51:57 CST 2020
pZxid = 0x3a
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x17654a472b60000
dataLength = 1
numChildren = 0
linux安装和配置
下载好文件用rz
或者工具上传至自己想要存放的目录
或者使用wget
直接下载。剩余操作和windows类似
# 我这里linux下载的是3.6.2版本
# 重命名
> mv apache-zookeeper-3.6.2-bin/ apache-zookeeper-3.6.2/
# 进入 conf目录
> cd apache-zookeeper-3.6.2/conf
# 复制
> cp zoo_sample.cfg zoo.cfg
# 编辑 dataDir、dataLogDir
> vim zoo.cfg
# 启动zk
> ./zkServer.sh start
Starting zookeeper ... STARTED
# 查看zookeeper是否已经启动成功
> ./zkServer.sh status
> ps -ef | grep zookeeper
# 停止zk
> ./zkServer.sh stop
zk集群搭建
widows
这里使用单机进行模拟(伪集群)。
创建三个文件分别放入zk文件。
三个配置文件如下:
# 1
tickTime=2000
initLimit=10
minSessionTimeout=50000
maxSessionTimeout=500000000
dataDir=../zk/data
dataLogDir=../zk/logs
clientPort=2181
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
#2
tickTime=2000
initLimit=10
minSessionTimeout=50000
maxSessionTimeout=500000000
syncLimit=5
dataDir= ../zk/data
dataLogDir=../zk/logs
clientPort=2182
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
#3
tickTime=2000
initLimit=10
minSessionTimeout=50000
maxSessionTimeout=500000000
syncLimit=5
dataDir=../zk/data
dataLogDir=../zk/logs
clientPort=2183
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
注意要创建对应的数据和日志目录。
在配置的 dataDir
路径添加myid文件,内容分别写 1、2、3
分别启动zkServer.cmd。都一个启动的时候会报错,不需要理会直接启动其他即可。
启动的时候可以看到当前节点所处的状态(followering、leading)
linux
同windows类似
# 复制3份
> cp -r /usr/local/apache-zookeeper-3.6.2/ zookeeper-3.6.2-z1
> cp -r /usr/local/apache-zookeeper-3.6.2/ zookeeper-3.6.2-z2
> cp -r /usr/local/apache-zookeeper-3.6.2/ zookeeper-3.6.2-z3
# 编写配置文件
> vim zookeeper-3.6.2-z1/conf/zoo.cfg
> vim zookeeper-3.6.2-z2/conf/zoo.cfg
> vim zookeeper-3.6.2-z3/conf/zoo.cfg
# 创建目录
> mkdir -p zookeeper-3.6.2-z1/zk/data
> mkdir -p zookeeper-3.6.2-z1/zk/logs
> mkdir -p zookeeper-3.6.2-z2/zk/data
> mkdir -p zookeeper-3.6.2-z2/zk/logs
> mkdir -p zookeeper-3.6.2-z3/zk/data
> mkdir -p zookeeper-3.6.2-z3/zk/logs
# 写myid文件
> echo "1" > zookeeper-3.6.2-z1/zk/data/myid
> echo "2" > zookeeper-3.6.2-z2/zk/data/myid
> echo "3" > zookeeper-3.6.2-z3/zk/data/myid
# 启动 zk
> ./zookeeper-3.6.2-z1/bin/zkServer.sh start
> ./zookeeper-3.6.2-z2/bin/zkServer.sh start
> ./zookeeper-3.6.2-z3/bin/zkServer.sh start
docker
关于docker的使用可以看我之前写的 docker学习 docker-compose
# 拉取zookeeper镜像
> docker pull zookeeper
# 查看镜像
> docker image list
# 启动镜像
> docker run --name myzk -d zookeeper:latest
# 查看日志
> docker logs -f my_zookeeper
# 上面的启动命令没有指定宿主机的映射端口如果想访问可以使用下面的命令
> docker run -it --rm --link myzk:zookeeper zookeeper zkCli.sh -server zookeeper
# 也可以用下面的命令指定端口启动镜像
> docker run --name myzk -d -p 2181:2181 zookeeper:latest
# 删除容器
> docker rm -f myzk
## 使用 docker-compose 搭建集群
> vim docker-compose.yml
# 写入以下内容
version: '2.1'
services:
zoo1:
image: zookeeper
restart: always
container_name: 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
container_name: 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
container_name: 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
# compose up -d 表示后台运行
> docker-compose up -d
zk常见命令
- 创建节点
create /path data
-s 顺序节点 -e 临时节点 - 获取节点
get /path
- 给节点设置数据
set /path data
- 列出子节点
ls /path
- 检查状态
stat /path
- 递归移除节点
rmr /path
zk能为我们做什么
- 统一命名服务
- 配置中心
- 分布式锁
当然还有其他的。