集群规划
Zookeeper 是一个开源的分布式协调服务,主要用于管理和协调分布式系统中的各种服务和数据。通俗来说,它就像是一个“管理员”或“调度员”,帮助不同的服务和应用程序之间进行通信和协作。
例子:
想象一下一个大型活动的组织,比如一个音乐节。为了确保活动顺利进行,组织者需要协调很多方面,比如场地、演出人员、票务等。
配置管理:组织者会制定一个详细的计划,包含每个演出者的时间、地点等信息。这个计划就像 Zookeeper 存储的配置信息,确保所有工作人员都能获取到最新的安排。
命名服务:在活动中,每个演出者都有一个独特的名字,观众和工作人员可以通过名字找到他们。Zookeeper 就是为这些服务提供了一个“名字簿”。
同步服务:在音乐节上,所有演出者需要在同一时间开始表演,组织者会确保每个演出者都在正确的时间上线,避免冲突。这类似于 Zookeeper 让不同服务保持同步。
选举机制:如果有多个舞台,组织者可能需要选出一个人来负责整个活动的协调,确保所有舞台的表演都能顺利进行。这就像 Zookeeper 在分布式系统中选出一个“领导者”。
hadoop102 | hadoop103 | hadoop104 |
---|---|---|
zk | zk | zk |
前提工作
集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
我们采用zookeeper3.7版本(apache-zookeeper-3.7.1-bin.tar.gz)
hadoop102下解压缩
代码语言:shell复制cd /opt/module
# 解压
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz
# 重命名
mv apache-zookeeper-3.7.1-bin/ zookeeper
配置环境变量
代码语言:shell复制# 编辑配置文件
vim /etc/profile
# ZOOKEEPER_HOME
export ZOOKEEPER_HOME=/opt/module/zookeeper
export PATH=:$ZOOKEEPER_HOME/bin:$PATH
# 加载环境变量使其生效
source /etc/profile
搭建
代码语言:shell复制# 在/opt/module/zookeeper/目录下创建zkData
cd zookeeper
mkdir zkData
cd zkData
# 设置hadoop102的myid为2
vim myid
2
# 配置zoo.cfg文件
cd /opt/module/zookeeper/conf
mv zoo_sample.cfg zoo.cfg
# 修改设置配置文件
vim zoo.cfg
# 修改数据存储路径配置
dataDir=/opt/module/zookeeper/zkData
# 集群配置
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888
分发zookeeper至hadoop103、hadoop104
代码语言:shell复制# 远程拷贝
scp -r /opt/module/zookeeper hadoop103:/opt/module/
scp -r /opt/module/zookeeper hadoop104:/opt/module/
# 分别登录修改hadoop103、hadoop104上的myid文件中内容为3、4
一键启动脚本
代码语言:shell复制# 创建脚本
vim start-zk.sh
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
ssh $host "source /etc/profile;zkServer.sh start"
echo "$host zookeeper Server 正在启动......"
done
一键关闭脚本
代码语言:shell复制# 创建脚本
vim stop-zk.sh
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
ssh $host "source /etc/profile;/opt/module/zookeeper/bin/zkServer.sh stop"
echo "$host zookeeper Server 正在关闭......"
done
检查结果
启动成功有以下标志
每台机器jps有QuorumPeerMain进程
查看每台机器的zk状态,可以显示 Zookeeper 的当前状态,包括集群信息、节点状态等
zkServer.sh status