部署 Zookeeper

一 概述

ZooKeeper 主要服务于分布式系统,可以用 ZooKeeper 来做:统一配置管理、统一命名服务、分布式锁、集群管理。

Notes:
预先下载好 Java Runtime EnvironmentZookeeper 安装介质。

二 具体操作

2.1 安装 Java 运行环境

# 1. 解压
tar xf jdk-19_linux-x64_bin.tar.gz -C /opt/

# 2. 配置环境变量
# 在 ~/.bashrc 文件中加入以下内容
export JAVA_HOME=/opt/jdk-19.0.2
export CLASS_PATH=${JAVA_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

# 3. 检查是否生效
source ~/.bashrc
java --version
# 返回:
# java 19.0.2 2023-01-17
# Java(TM) SE Runtime Environment (build 19.0.2+7-44)
# Java HotSpot(TM) 64-Bit Server VM (build 19.0.2+7-44, mixed mode, sharing)

2.2 初始化系统环境

根据 Zookeeper 官方说明,运行 Zookeeper 的主机应该尽可能避免 Zookeeper 使用到 swap。因为 Zookeeper 的事务日志会频繁的进行同步,如果使用到 swap,则可能会严重影响到 Zookeeper 的性能。当然也可以通过设置一个合理的 JVM Heap Size 也可以避免这种情况发生。而如果 Zookeeper 是独占的一台主机 (2C4G),可以直接把这台主机的系统 swap 进行关闭。

# 1. 临时关闭 Swap
swapoff -a

# 2. 取消自启
sed -i.bak '/swap/s/^/# /g' /etc/fstab

2.3 部署 Zookeeper 单机

# 1. 创建数据目录
mkdir -p /data/zookeeper

# 2. 解压
tar xf apache-zookeeper-3.8.1-bin.tar.gz -C /opt/

# 3. 定义配置文件
cd /opt/apache-zookeeper-3.8.1-bin/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
# 修改 zoo.cfg 内容为如下:
# tickTime=2000
# initLimit=10
# syncLimit=5
# dataDir=/data/zookeeper
# clientPort=2181
# clientPortAddress=0.0.0.0

# 4. 启动 Zookeeper 服务
cd /opt/apache-zookeeper-3.8.1-bin/bin
./zkServer.sh start
# 返回:
# ZooKeeper JMX enabled by default
# Using config: /opt/apache-zookeeper-3.8.1-bin/bin/../conf/zoo.cfg
# Starting zookeeper ... STARTED

# 5. 使用四字命令检查服务是否正常
echo srvr | nc localhost 2181
# 返回:
# Zookeeper version: 3.8.1-74db005175a4ec545697012f9069cb9dcc8cdda7, built on 2023-01-25 16:31 UTC
# Latency min/avg/max: 0/0.0/0
# Received: 1
# Sent: 0
# Connections: 1
# Outstanding: 0
# Zxid: 0x0
# Mode: standalone
# Node count: 5

zoo.cfg 配置文件参数解析:

  • initLimit:表示用于在从节点与主节点之间建立初始化连接的时间上限。
  • syncLimit:表示允许从节点与主节点处于不同步状态的时间上限

以上两个值都是 tickTime 的倍数,所以 initLimit 是 10*2000=20000ms

  • dataDir:数据文件路径。
  • clientPort:Zookeeper 服务端口。
  • clientPortAddress:Zookeeper 服务侦听的 IP 地址。

三 集群部署

Zookeeper 集群被称为群组 。Zookeeper 使用的是一致性协议,所以建议每个群组里应该包含奇数个节点 (比如 3 个、5 个等),因为只有当群组里的大多数节点 (也就是法定人数) 处于可用状态,Zookeeper 才能处理外部的请求。也就是说,如果你有一个包含 3 个节点的群组,那么它允许一个节点失效。如果群组包含 5 个节点,那么它允许 2 个节点失效。

假设有一个包含 5 个节点的群组,如果要对群组做一些包括更换节点在内的配置更改,需要依次重启每一个节点。如果你的群组无法容忍多个节点失效,那么在进行群组维护时就会存在风险。不过,也不建议一个群组包含超过 7 个节点,因为 Zookeeper 使用了一致性协议,节点过多会降低整个群组的性能。

3.1 修改配置文件

部署完多个 Zookeeper 节点之后,只需要在 zoo.cfg 中添加对应的节点信息,然后重启即可。

cd /opt/apache-zookeeper-3.8.1-bin/conf
vim zoo.cfg
# 1. 为每个节点都加入以下内容:
server.1=10.10.0.1:2888:3888
server.2=10.10.0.2:2888:3888
server.3=10.10.0.3:2888:3888

# 2. 添加 myid 文件
echo 1 > /data/zookeeper/myid

# 3. 重启服务
cd /opt/apache-zookeeper-3.8.1-bin/bin
./zkServer.sh restart

zoo.cfg 配置文件参数解析:
Zookeeper 集群的服务器地址遵循 server.X=hostname:peerPort:leaderPort 的格式:

  • X:表示服务器的ID,必须为整数。不要求从0开始,也不要求连续。
  • hostname:Zookeeper 的 IP 地址,或主机名。
  • peerPort:Zookeeper 节点间通讯的 TCP 端口。
  • leaderPort:Zookeeper 节点间用于选举 leader 的 TCP 端口。

注:

  1. 客户端只需要通过 clientPort 即可连接到 Zookeeper 集群,而集群节点之间的通过则需要同时用到 peerPort,leaderPort,clientPort 三个端口。
  2. 除了公共的配置文件外,每个服务器都必须在 dataDir 目录中创建一个叫作 myid 的文件,文件里要包含服务器 ID,这个 ID 要与配置文件里配置的 ID 保持一致。因此会看到步骤中包含 添加 myid 文件 这一步。

3.2 测试集群

# 1. 登录任意一个 zk 节点
/opt/apache-zookeeper-3.8.1-bin/bin/zkCli.sh -server 10.10.0.1:2181

# 2. 创建一个 node
> create /foo bar
# Created /foo

> get /foo
# bar

# 3. 登录另一台 zk 节点
/opt/apache-zookeeper-3.8.1-bin/bin/zkCli.sh -server 10.10.0.2:2181

# 4. 查看同样的 node
> get /foo
# bar
原创不易,转载时请标明作者及出处。
作者:打个小肥鸡
转自:https://www.sretalk.com/?p=32
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇