栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 其他

用 ZooKeeper 搭建一个集群

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用 ZooKeeper 搭建一个集群

Zookeeper 官网的 Overview 部分有对 Zookeeper 的概述.

下面是一些我学习 zookeeper 的笔记, 内容不在乎全面, 而在乎精简.

Zookeeper 简介

Zookeeper 是一个开源的, 用于 分布式应用 的 分布式协调服务.(A Distributed Coordination Service for Distributed Applications).

Zookeeper 的 数据模型(Data model) 是 层次的命名空间(the hierarchical namespace). 就像文件系统中的结构一样.
ZooKeeper’s Hierarchical Namespace:

Zookeeper 的安装方法和 Maven 类似(都是下载压缩包解压), 可以从这里下载一个压缩包. Zookeeper 使用的命令都在解压后的 /bin 目录下. 把 /bin 添加到 PATH 中, 即可全局使用 Zookeeper 的命令.

Zookeeper 有两种模式: standalone mode(单机模式) 和 replicated mode.

standalone mode 仅用于测试环境, standalone mode 下, Zookeeper 配置文件只需要配置下面 3 项即可完成对 Zookeeper 的配置:

# Zookeeper的基本时间单位. tickTime的值的单位是毫秒
tickTime=2000
# 存放 in-memory database snapshots 的地方
dataDir=/var/lib/zookeeper
# 监听客户端连接的端口
clientPort=2181

启动 Zookeeper:

zkServer.sh start

通过客户端连接的 Zookeeper server:

zkCli.sh -server 127.0.0.1:2181

连接上 Zookeeper 服务后, 可以通过 help 命令查看 Zookeeper 客户端可以执行的命令.

2 搭建一个 Zookeeper 集群(ensemble/cluster)

为方便测试, 把 3 个Zookeeper 服务都部署在同一个主机上(因为我只有一个主机).
生产环境应该给每个 Zookeeper 结点分配一个单独的机器, 这样可靠性更高.

在 /data/soft/zkConfig 下写的 3 个配置文件, 如下所示:

$ cat /data/soft/zkConfig/zoo-quorum-node{1..3}.cfg
####### 配置node1 ######
tickTime=2000
dataDir=/data/soft/zkConfig/node1
clientPort=2281
initLimit=5
syncLimit=2
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445
4lw.commands.whitelist=*

####### 配置node2 ######
tickTime=2000
dataDir=/data/soft/zkConfig/node2
clientPort=2282
initLimit=5
syncLimit=2
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445
4lw.commands.whitelist=*

####### 配置node3 ######
tickTime=2000
dataDir=/data/soft/zkConfig/node3
clientPort=2283
initLimit=5
syncLimit=2
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445
4lw.commands.whitelist=*

以上配置中,
tickTime=2000 表示心跳时间为2秒.
dataDir 指定 Zookeeper 数据存储的目录(结点数据快照, myid等).
clientPort 监听端口(用于客户端连接).
initLimit=5 集群中的 follower服务器 与leader服务器 之间 初始连接 时能容忍的最多心跳数.(initLimit is timeouts ZooKeeper uses to limit the length of time the ZooKeeper servers in quorum have to connect to a leader.)
syncLimit=2 集群中的 follower服务器 与leader服务器 之间 请求和应答 之间能容忍的最多心跳数(syncLimit limits how far out of date a server can be from a leader.)
server.id=host:port1:port2
id 表示集群中server的编号, 只能用 1~255 之间的数字;
host 表示server的地址;
port1 follower 和 leader 通信端口(Quorum port);
port2 leader 选举端口(a dedicated port for ZooKeeper leader election).

4lw.commands.whitelist=* 表示将所有4字命令(Four Letter Words commands) 加入白名单.

接下来在目录 /data/soft/zookeeper下两个脚本.

启动脚本:

$ cat start_zookeeper_quorum.sh
#!/bin/bash
configs=(1 2 3)
for i in ${configs[@]}; do
    zkServer.sh start /data/soft/zkConfig/zoo-quorum-node${i}.cfg
done

停止脚本:

$ cat stop_zookeeper_quorum.sh
#!/bin/bash
configs=(1 2 3)
for i in ${configs[@]}; do
    zkServer.sh stop /data/soft/zkConfig/zoo-quorum-node${i}.cfg
done

在 ~/.zshrc 中配置 3 个别名, 方便启动和关闭 zk 服务:

alias zkconnect='zkCli.sh -server localhost:2281,localhost:2282,localhost:2283'
alias zkquorum_start='sh /data/soft/zookeeper/start_zookeeper_quorum.sh'
alias zkquorum_stop='sh /data/soft/zookeeper/stop_zookeeper_quorum.sh'

现在通过别名 zkquorum_start 启动 zk 集群:

$ zkquorum_start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /data/soft/zkConfig/zoo-quorum-node1.cfg
Starting zookeeper ... STARTED
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /data/soft/zkConfig/zoo-quorum-node2.cfg
Starting zookeeper ... STARTED
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /data/soft/zkConfig/zoo-quorum-node3.cfg
Starting zookeeper ... STARTED

看似成功了, 检查一下:

$ netstat -an | ag "2281|2282|2283"
tcp        0      0 0.0.0.0:2281            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:2282            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:2283            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:2282          127.0.0.1:41546         TIME_WAIT

好, 已经正常监听 2281|2282|2283 这三个端口了. (ag 可以换成 grep -E, 不过 ag 是一个更高效的搜索命令)

通过客户端 连接 zk 集群:

$ zkconnect
...
[zk: localhost:2281,localhost:2282,localhost:2283(CONNECTED) 0]

连接正常.

备注:
如果想要把 Zookeeper server 放在前台运行, 可以使用 zkServer.sh start-foregroup xxx.cfg 来启动一个结点.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/279322.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号