ZooKeeper是一种集中式服务,用于维护配置信息,命名,提供分布式同步和提供组服务。所有这些类型的服务都以分布式应用程序的某种形式使用。每次实施它们都需要做很多工作来修复不可避免的错误和竞争条件。由于难以实现这些类型的服务,应用程序最初通常会吝啬它们,这使得它们在变化的情况下变得脆弱并且难以管理。即使正确完成,这些服务的不同实现也会在部署应用程序时导致管理复杂性。
目录
- 一、安装环境
- 二、环境准备
- 三、zookeeper分布式搭建步骤
- 四、zookeeper基本使用
- 五、图形界面管理
- 六、参考并致谢
一、安装环境
操作系统: CentOS 7
服务器规划:
- 192.168.111.249 master
- 192.168.111.247 node1
- 192.168.111.248 node2
zookeeper版本: zookeeper 3.4.14
二、环境准备
1、Java环境搭建配置
yum安装java
[root@bogon ~]# yum install java-1.8.0-openjdk* -y
java环境变量配置
which java定位到的是java程序的执行路径,而不是安装路径,经过两次-lrt最后的输出才是安装路径
/etc/profile文件中追加三行
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64
export HADOOP_HOME=/home/hadoop-3.2.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
刷新环境变量
[root@bogon ~]# source /etc/profile
2、修改主机名
依次在/etc/hostname文件中,主节点写入master,从节点写入node1或node2
依次在/etc/hosts文件中,将本机和所有节点的主机名写入
使用ping相互测试,并保证能ping通
3、配置节点之间免密登录
效果就是在master上输入ssh node1即可登陆node1,否则开启集群服务时,master与node无法连接,会报出connection refused
检查openssh-server是否已安装
[root@bogon ~]# rpm -qa | grep ssh
确保安装了openssh-server后,每台机器执行ssh-keygen -t rsa,然后回车(三次回车)
生成的公钥私钥都保存在~/.ssh下,在master上将公钥放入authorized_keys,命令如下
[root@bogon ~]# cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
将master上的authorized_keys放到其它机器上
[root@bogon ~]# scp ~/.ssh/authorized_keys root@node1:~/.ssh/
[root@bogon ~]# scp ~/.ssh/authorized_keys root@node2:~/.ssh
在master端使用 ssh node1测试,node2使用同样的方法测试
三、zookeeper分布式搭建步骤
1、下载zookeeper
zookeeper各个版本下载地址:https://mirror.bit.edu.cn/apache/zookeeper/
[root@master home]# wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
2、解压
[root@master home]# tar zxvf zookeeper-3.4.14.tar.gz
3、配置环境变量
# 进入到配置文件,并在文件末尾追加zookeeper的环境变量
[root@master home]# vim /etc/profle
配置的环境变量如下,可以根据需要作出更改
export ZOOKEEPER_HOME=/home/zookeeper-3.4.14
PATH=$PATH:$ZOOKEEPER_HOME/bin:$PATH
4、进入到解压出来的zookeeper目录,然后创建data目录
[root@master home]# cd zookeeper-3.4.14
[root@master zookeeper-3.4.14]# mkdir data
5、备份默认的配置文件
[root@master zookeeper-3.4.14]# cd conf
[root@master conf]# cp zoo_sample.cfg zoo.cfg
配置文件和所在目录如下:
6、编辑配置文件
修改数据文件存放路径,将其设置为我们刚刚创建的data目录
配置文件末尾追加节点的信息
进入到刚刚创建的data目录,新建一个名为myid的文件,并在文件中写入1
远程复制zookeeper
将整个zookeeper目录远程使用scp命令复制到node1和node2节点上,并对node1和node2节点中的myid文件作出相应的修改(如node1节点是2,node2节点是3,其中1,2,3要对应配置文件中的server.1,server.2,server.3),同时环境变量也要记得改
# 1、复制zookeeper目录到各个节点上
[root@master home]# scp /home/zookeeper-3.4.14 node1:/home/
[root@master home]# scp /home/zookeeper-3.4.14 node2:/home/
以下步骤就不一一将命令写出来了,方法跟刚刚配置的是一样的
# 2、修改节点上的myid文件中的值(记得要跟配置文件中的server.X中的X的值要一样)
# 3、将节点中的zookeeper各自加入到环境变量
7、分别从各个节点启动
启动前需要注意的一点是,zookeeper的日志文件zookeeper.out会随着输入启动命令时的目录不同而不同,例如我是在/home目录下启动zookeeper,那么启动之后它就会在/home目录创建一个zookeeper.out的日志文件,因此可以根据不同的需求去规划日志文件的存放目录
# 以下命令各个节点都要执行(即各个节点都要启动)
# 个人习惯是在data目录上存放日志文件,因此进入到data目录
[root@master home]# cd /home/zookeeper-3.4.14/data
# 启动
[root@master data]# zkServer.sh start
# 查看服务状态(主节点为leader,从节点为follower)
[root@master data]# zkServer.sh status
# 查看进程状态
[root@master data]# jps
jps中显示的进程可能跟你们的不一致,因为我是在之前搭建了Hadoop的机子上直接搭建zookeeper,因此会有Hadoop的进程
至此zookeeper的真·分布式搭建步骤已完毕
四、zookeeper基本使用
# 启动
zkServer.sh start
# 关闭
zkServer.sh stop
# 查看服务状态
zkServer.sh status
# 查看进程
jps
# 进入到zookeeper的交互界面
zkCli.sh
# 以下命令基本都是在交互界面中
# 列出全部命令
help
# 查看目录下的节点列表
ls /
# 创建一个节点/zk_test,并设置值为data1
create /zk_test data1
节点就像目录,可以一级一级建下去
create /zk_test/test2 data2
Created /zk_test/test2
create /zk_test/test3 data3
Created /zk_test/test3
ls /zk_test
[test2, test3]
# 获取节点数据和更新信息 (以hbase节点为例)
get /hbase
输出信息如下:
cZxid = 0x800000002 --创建节点的id
ctime = Thu Mar 12 16:07:37 CST 2020 --节点的创建时间
mZxid = 0x800000002 --修改节点的ID
mtime = Thu Mar 12 16:07:37 CST 2020 --修改节点的时间
pZxid = 0x80000000c --子节点ID
cversion = 8 --子节点的版本
dataVersion = 0 --当前节点的版本
aclVersion = 0 --权限的版本
ephemeralOwner = 0x0 --判断是否为临时节点
dataLength = 0 --数据长度
numChildren = 6 子节点数量
# 设置已存在节点的值
set /zk_test/test2 data22
# 删除节点
delete /zk_test/test2
五、图形界面管理
图形界面这里使用的是zkui
相关的项目地址如下:
某大神编译好的版本地址:https://github.com/zifangsky/zkui/releases
源码地址:https://github.com/DeemOpen/zkui
烂泥大神提供的源码地址:https://gitee.com/ilanni/zkui
1、使用编译好的版本
下载
[root@master home]# wget https://github.com/zifangsky/zkui/releases/download/v2.0/zkui-2.0.zip
安装解压工具
[root@master home]# yum install -y unzip
解压文件
[root@master home]# unzip zkui-2.0.zip
修改配置文件
主要需要修改的地方有三处:
- 修改监听的端口(也可以保持默认)
- 修改zookeeper集群的主机(其中端口号可以从zookeeper的配置文件中查看)
- 修改图形界面的用户登录密码(可以保持默认)
赋予脚本执行的权限并启动
[root@master zkui-2.0]# chmod 777 start.sh
[root@master zkui-2.0]# start.sh --这是linux下的启动命令,Windows下是双击start.bat
网页打开访问地址(zkui部署的服务器ip:监听端口号)
使用账号密码登录即可
2、使用源码版本
安装maven(步骤省略)
安装git(步骤省略)
使用git将项目文件下载
git clone https://github.com/DeemOpen/zkui.git
进入到项目目录,并编译安装
cd zkui/
mvn clean install
修改配置文件
主要需要修改的地方有三处:
- 修改监听的端口(也可以保持默认)
- 修改zookeeper集群的主机(其中端口号可以从zookeeper的配置文件中查看)
- 修改图形界面的用户登录密码(可以保持默认)
赋予脚本执行的权限并启动
[root@master zkui-2.0]# chmod 777 start.sh
[root@master zkui-2.0]# start.sh --这是linux下的启动命令,Windows下是双击start.bat
网页打开访问地址(zkui部署的服务器ip:监听端口号)
使用账号密码登录即可
zkui部署过程中遇到的问题
问题:
登录zkui ,选择导航“Host” 出现错误提示:KeeperErrorCode = NoNode for /appconfig/hosts 如下所示:
原因:
没有/appconfig/hosts这个节点导致
解决方案:
1、进入到leader的zookeeper交互界面
[root@master /home]# zkCli.sh
2、手动创建节点
create /appconfig "my appconfig"
create /appconfig/hosts 123456
3、重新刷新以下web页面
六、参考并致谢
https://mirror.bit.edu.cn/apache/zookeeper/
https://blog.csdn.net/raoxiaoya/article/details/99198348
https://www.cnblogs.com/smail-bao/p/7794636.html
https://www.cnblogs.com/caoshousong/p/10709371.html