分布式学习之zookeeper-1

分布式学习之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能为我们做什么

  • 统一命名服务
  • 配置中心
  • 分布式锁

当然还有其他的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值