Zookeeper完全分布式环境部署
ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现分布式应用程序可以基于ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、配置维护,名字服务、分布式同步、分布式锁和分布式队列等功能。
2、使用软件及其版本
环境
虚拟机:VirtualBox 6.0.24 r139119
Linux:CentOS 7
Windows:Windows10
软件
Zookeeper:zookeeper-3.4.5-cdh5.7.0
工具
远程连接工具:XShell6
SFTP工具:FileZilla3.33.0
3、目标
-
zookeeper分布式部署
4、操作步骤
-
集群规划
-
规划集群由3台主机构成
主机名 IP Namenode DataNode Yarn Zookeeper JournalNode master 192.168.137.2 是 是 否 是 是 slave01 192.168.137.3 是 是 是 是 是 slave02 192.168.137.4 否 是 是 是 是
-
-
zookeeper分布式部署
-
上传zookeeper到master节点主机,解压安装文件,使用命令:
tar -zxvf zookeeper-3.4.5-cdh5.7.0.tar.gz -C ~/app/
-
修改配置信息
-
添加配置文件
在zookeeper的conf目录下,添加配置文件
zoo.cfg
,使用命令:cp zoo_sample.cfg zoo.cfg
配置项的含义:
1.tickTime:CS通信心跳时间 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。 tickTime=2000
2.initLimit:LF初始通信时限 集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。 initLimit=5
3.syncLimit:LF同步通信时限 集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。 syncLimit=2
4.dataDir:数据文件目录 Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。 dataDir=/home/michael/opt/zookeeper/data
5.clientPort:客户端连接端口 客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。 clientPort=2181
6.服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口) 这个配置项的书写格式比较特殊,规则如下: server.N=YYY:A:B
-
修改配置信息,使用命令:
sudo vi zoo.cfg
将dataDir=/tmp/zookeeper 改为 dataDir=/home/hadoop/data/zoo/data
然后在最后追加:
server.1=master:2888:3888
server.2=slave01:2888:3888
server.3=slave02:2888:3888 -
创建myid文件
每个节点的配置文件(zoo.cfg)都是一样的,只有 myid 文件不一样。myid 的值必须是 zoo.cfg中server.{数值} 的{数值}部分。
在/home/hadoop/data/zoo/data下创建一个myid文件,使用命令:
touch myid
echo 1 > myid -
复制到其他主机
-
复制zoo/data文件夹到slave01,slave02主机,使用命令:
scp -r zoo hadoop@slave01:~/data/
scp -r zoo hadoop@slave02:~/data/
-
在slave01,slave02主机上修改配置myid值,使用命令:
echo 2 > myid
echo 3 > myid
-
-
-
启动集群
-
在master节点,拷贝配置好的zookeeper安装文件夹到slave01,slave02节点主机中,使用命令:
scp -r zookeeper-3.4.5-cdh5.7.0/ hadoop@slave01:~/app/
scp -r zookeeper-3.4.5-cdh5.7.0/ hadoop@slave02:~/app/
-
在master , slave01 , slave02分别启动zookeeper
进入zookeeper下的bin文件夹,使用命令:
./zkServer.sh start
-
-
查看状态
分别在master,slave01,slave02节点上,使用命令:
./zkServer status
-
同步数据
-
在master节点,上使用命令:
./zkCli.sh
创建一个文件,看看是否同步到其他机器上:
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1] create /test hello
Created /test
[zk: localhost:2181(CONNECTED) 2] get /test
hello
cZxid = 0x100000002
ctime = Sun Sep 19 18:19:38 CST 2021
mZxid = 0x100000002
mtime = Sun Sep 19 18:19:38 CST 2021
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0 -
在slave01,slave02节点,查看
在slave01,slave02,使用命令:
./zkCli.sh
查看:
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper, test]
[zk: localhost:2181(CONNECTED) 1] get /test
hello
cZxid = 0x100000002
ctime = Sun Sep 19 18:19:38 CST 2021
mZxid = 0x100000002
mtime = Sun Sep 19 18:19:38 CST 2021
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0 -
在master节点删除文件夹
[zk: localhost:2181(CONNECTED) 3] delete /test
[zk: localhost:2181(CONNECTED) 4] ls /
[zookeeper]在slave01,slave02节点,检查发现文件夹也已经删除,表示数据同步成功!
-
-
5、总结