搭建 zookeeper 集群,笔者这里使用3台 centos7 服务器,它们 ip 分别是 192.168.0.125;192.168.0.123;192.168.0.117,后面简称 125,123,117
然后为3台服务器配置 java 环境,笔者这里的3台服务器已经成功安装 java 环境,没有安装 java 环境的朋友可以参考:https://blog.csdn.net/wsjzzcbq/article/details/82818826
目录
1、官网下载 zookeeper
2、安装 zookeeper
3、启动集群
4、添加 nginx
5、集群测试
5.1、测试集群间数据同步
5.2、测试集群中 leader 节点挂掉的情况
zookeeper 官网地址:https://zookeeper.apache.org/
下载最新稳定版本3.7.0
点击下载
下载完成后,将安装包上传到3台服务器中的一台,笔者这里上传到 125 服务器
然后将安装包上传到其他2台服务器,或者通过 scp 命令将安装包复制到另外2台服务器
笔者这里使用 scp 命令进行复制
scp /root/apache-zookeeper-3.7.0-bin.tar.gz [email protected]:/root
scp /root/apache-zookeeper-3.7.0-bin.tar.gz [email protected]:/root
3台服务器都有 zookeeper 安装包后,分别创建 zookeeper 安装目录
分别在 3 台服务器的 /usr/local 目录下创建 zookeeper 目录
mkdir -p /usr/local/zookeeper
然后将 zookeeper 安装包解压到新创建的 zookeeper 安装目录
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz -C /usr/local/zookeeper
解压完成后,分别进入 3 台服务器的 zookeeper 安装目录,修改配置文件
进入安装目录
cd /usr/local/zookeeper/apache-zookeeper-3.7.0-bin/
进入conf目录
cd conf
复制修改文件名
分别将 3 台服务器的 zoo_sample.cfg 复制为 zoo.cfg
cp zoo_sample.cfg zoo.cfg
查看配置文件 zoo.cfg
vi zoo.cfg
dataDir 配置 zookeeper 数据存放目录,笔者这里使用默认的 /tmp/zookeeper,此时 /tmp 目录下还没有 /zookeeper 目录
知道默认的数据存放目录后,进入/tmp 目录,创建 zookeeper 目录
cd /tmp
创建 zookeeper 目录
mkdir zookeeper
然后进入创建的 zookeeper 目录
cd zookeeper
创建一个 myid 的文件
这个 myid 的文件是搭建集群用的,需要放在 dataDir 指定的目录下(即默认的 /tmp/zookeeper)
touch myid
创建后,编辑 myid
vi myid
125 的 myid 是1, 123 的 myid 是2, 117 的 myid 是3,这个 myid 相当于是节点在集群中的唯一标识 ,后面会用到
3 台机器的 myid 都配置完成后,分别在3台机器的 zoo.cfg 文件中配置集群信息
cd /usr/local/zookeeper/apache-zookeeper-3.7.0-bin/conf
编辑 zoo.cfg
vi zoo.cfg
配置节点集群信息
server.1=192.168.0.125:2888:3888
server.2=192.168.0.123:2888:3888
server.3=192.168.0.117:2888:3888
server. 后面的 1、2、3 是上面的 myid,这个 myid 要和后面的 ip 地址保持一致
2888 端口和 3888 端口是随意的,也可以使用其他端口号
配置集群信息后
开放防火墙 2181 2888 3888 端口
firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=3888/tcp --permanent
开放后,更新防火墙规则(无需断开连接,动态添加规则)
firewall-cmd --reload
分别进入 3 台服务器的 bin 目录,启动 zookeeper
进入bin目录
cd /usr/local/zookeeper/apache-zookeeper-3.7.0-bin/bin
启动
./zkServer.sh start
启动后查看各个节点状态
./zkServer.sh status
可以看到,117成为了 leader 另外2个是 follower
集群搭建成功
nginx 配置如下,监听 2181 端口
stream {
server {
listen 2181;
proxy_pass zookeepers;
}
upstream zookeepers {
server 192.168.0.125:2181;
server 192.168.0.123:2181;
server 192.168.0.117:2181;
}
}
新增一条数据,测试集群间数据同步
新建 maven 项目,添加依赖
org.apache.curator
curator-framework
5.2.1
新建 Demo 类
package com.learn.zookeeper;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.zookeeper.data.Stat;
/**
* Demo
*
* @author wsjz
* @date 2022/05/10
*/
public class Demo {
public static void main(String[] args) throws Exception {
CuratorFramework curator =
CuratorFrameworkFactory
.builder()
.connectString("localhost:2181")
.retryPolicy(new ExponentialBackoffRetry(1000, 3))
.build();
curator.start();
curator.create().creatingParentsIfNeeded().forPath("/name", "hello world".getBytes());
byte[] bytes = curator.getData().storingStatIn(new Stat()).forPath("/name");
System.out.println(new String(bytes));
}
}
运行 Demo
创建 /name 节点
使用 zkCli zookeeper客户端查看各个节点数据
./zkCli.sh
查看 /name 节点数据
get /name
查看3台服务器的节点数据
3 台服务器的 zookeeper 中都有 /name 数据,说明集群间数据同步没问题
这里将 117 上的 zookeeper 关闭,看其他 2 个节点的情况
./zkServer.sh stop
查看 zookeeper 状态
./zkServer.sh status
可以看到,123 成为了新的 leader
至此完