Zookeper集群搭建

Dubbo + Zookeeper入门初探 这篇文章中,我们已经搭建了 Zookeeper 单机版,本篇文章将介绍如何搭建 Zookeeper 集群。

一、投票选举机制

Zookeeper 集群在工作时,只有一个节点为 leader(主节点),其余节点均为 follower(从节点)。这是通过内部的投票选举机制来实现的。

我们知道,投票至少要过半数才行,因此集群中节点数最好为单数,因此我们搭建一个最简单的 3 个节点的 Zookeeper 集群。

二、搭建集群

因为我没有弄三台Linux,所以本篇文章采用伪集群,均搭建在一台服务器上,采用端口号进行区分。首先列出相关信息,方便大家理解:

本机IP地址:192.168.30.155

Zookeeper01 :/usr/local/zookeeper-cluster/zookeeper01

名称端口号
客户端端口2181
节点通信端口2881
节点选举端口3881

Zookeeper02:/usr/local/zookeeper-cluster/zookeeper02

名称端口号
客户端端口2182
节点通信端口2882
节点选举端口3882

Zookeeper03:/usr/local/zookeeper-cluster/zookeeper03

名称端口号
客户端端口2183
节点通信端口2883
节点选举端口3883

注:因为我是伪集群,所以只能使用端口号进行区分,如果你是真集群,无需修改端口号,通过IP地址区分即可

2.1 初始化文件夹

zookeeper 版本为 zookeeper-3.5.2-alpha,将压缩包放入 Linux 中,解压缩:

root@ubuntu:~$ tar zxvf zookeeper-3.5.2-alpha.tar.gz 

创建集群文件夹 zookeeper-cluster

root@ubuntu:~$ mkdir /usr/local/zookeeper-cluster

拷贝 zookeeper 三份到 zookeeper-cluster 中:

root@ubuntu:~$ cp -r zookeeper-3.5.2-alpha /usr/local/zookeeper-cluster/zookeeper01
root@ubuntu:~$ cp -r zookeeper-3.5.2-alpha /usr/local/zookeeper-cluster/zookeeper02
root@ubuntu:~$ cp -r zookeeper-3.5.2-alpha /usr/local/zookeeper-cluster/zookeeper03

进入到 zookeeper-cluster 中:

root@ubuntu:/usr/local$ cd zookeeper-cluster/
root@ubuntu:/usr/local/zookeeper-cluster$ ls
zookeeper01  zookeeper02  zookeeper03

2.2 修改配置信息

以 zookeeper01 为例:

(1)进 入zookeeper01 文件夹,创建 data 文件夹,在其中新建一个 myid 文件,内容为 1

注:myid 文件中存放的是该 zookeeper 存在于集群中的 id 号,一直递增即可。

root@ubuntu:/usr/local/zookeeper-cluster$ cd zookeeper01/
root@ubuntu:/usr/local/zookeeper-cluster/zookeeper01$ mkdir data
root@ubuntu:/usr/local/zookeeper-cluster/zookeeper01$ cd data/
root@ubuntu:/usr/local/zookeeper-cluster/zookeeper01/data# echo 1 > myid
root@ubuntu:/usr/local/zookeeper-cluster/zookeeper01/data# cat myid 
1

(2)进入 conf 文件夹,拷贝一份配置文件为 zoo.cfg

root@ubuntu:/usr/local/zookeeper-cluster/zookeeper01/data# cd ../conf/
root@ubuntu:/usr/local/zookeeper-cluster/zookeeper01/conf# cp zoo_sample.cfg zoo.cfg

编辑 zoo.cfg,分别修改 dataDir 路径、clientPort(真集群忽略)、集群节点信息,如图所示:

另外两个的配置和这个相似,我就不再详细列举了(规定下 zookeeper02myid 内容为 2zookeeper03myid 内容为 3)。

2.3 编写批处理

zookeeper-cluster 目录下编写集群的批处理:

#!/bin/bash
#@author: jitwxs
#@description: zookeeper cluster manager script

if [ $# -eq 0 ]
then
    echo "参数错误"
    exit 1
fi

arg=$1
flag=false
params=("start" "stop" "status" "restart")

for i in ${params[*]}
do
    if [ ${i} = ${arg} ]
	then
	    flag=true
	    break
	fi
done

cd zookeeper01/bin/
./zkServer.sh ${arg}
cd ../../
cd zookeeper02/bin/
./zkServer.sh ${arg}
cd ../../
cd zookeeper03/bin/
./zkServer.sh ${arg}
cd ../../

添加执行权限:

root@ubuntu:/usr/local/zookeeper-cluster# ls
manager.sh  zookeeper01  zookeeper02  zookeeper03
root@ubuntu:/usr/local/zookeeper-cluster# chmod u+x manager.sh 

2.4 启动集群

启动集群,查看状态:

root@ubuntu:/usr/local/zookeeper-cluster# ./manager.sh start
root@ubuntu:/usr/local/zookeeper-cluster# ./manager.sh status

分别查看每个集群状态:

可以看见 zookeeper02 为 leader,另外两个为 follower

Java 中 double 类型是一种基本数据类型,用于表示双精度浮点数,能处理较大范围和较高精度的小数运算。ZooKeeper 是用 Java 编写的分布式协调服务,需安装 Java 运行环境,可从官网获取安装包,如 zookeeper - 3.4.11.tar.gz [^1]。 在 Java 与 ZooKeeper 交互时,double 类型可用于存储和处理与 ZooKeeper 节点相关的数值信息。例如,在分布式系统中,若使用 ZooKeeper 管理节点状态,某些状态可能以数值形式呈现,就可以使用 double 类型。像在监控系统里,每个节点的性能指标(如 CPU 使用率、内存使用率等)可能是小数,这些小数可以用 double 类型表示,并存储在 ZooKeeper 的节点中。 在代码实现上,使用 Java 连接 ZooKeeper 并存储 double 类型数据示例如下: ```java import org.apache.zookeeper.*; import java.io.IOException; public class ZooKeeperDoubleExample { private static final String ZOOKEEPER_CONNECTION_STRING = "localhost:2181"; private static final int SESSION_TIMEOUT = 3000; public static void main(String[] args) throws IOException, KeeperException, InterruptedException { ZooKeeper zooKeeper = new ZooKeeper(ZOOKEEPER_CONNECTION_STRING, SESSION_TIMEOUT, null); double cpuUsage = 0.75; byte[] data = Double.toString(cpuUsage).getBytes(); // 创建一个持久节点并存储 double 类型数据 zooKeeper.create("/cpu_usage", data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); zooKeeper.close(); } } ``` 在上述代码中,将一个 double 类型的 CPU 使用率数据转换为字节数组后存储到 ZooKeeper 的节点中。后续可以通过读取该节点的数据并将其转换回 double 类型来获取存储的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值