zooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。zooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。所谓分布式协调主要是来解决分布式系统中多个进程之间的同步限制,防止出现脏读,例如我们常说的分布式锁。
1、了解zookeeper
Zookeeper 分布式服务框架是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
zookeeper中的数据是存储在内存当中的,因此它的效率十分高效。它内部的存储方式十分类似于文件存储结构,采用了分层存储结构。但是它和文件存储结构的区别是,它的各个节点中是允许存储数据的,需要注意的是zk的每个节点存储数据不能超过1M。它的内存数据结果如下图:
我们可以通过不同的路径访问到不同的节点,因为它是分层结构,我们也可以通过某一个父节点,获取到该节点下的所有子节点信息。
Zookeeper可以单机安装,这种应用模式主要用在测试或demo的情况下,在生产环境下一般采用集群模式。
2、zookeeper的下载
可以从Zookeeper的官方网站下载最新的安装包: http://www.apache.org/dist/zookeeper/
我们这里选择最新版本 zookeeper-3.8.0/,点击进入。
点击apache-zookeeper-3.8.0-bin.tar.gz进行下载。
3、单机安装zookeeper
3.1 前提条件
安装zookeeper的服务器必须有jvm环境,最低要求 JDK 必须是7或以上版本。JDK8的安装教程可参考:Linux下JAVA WEB服务器的搭建一(JDK\MYSQL\TOMCAT)。
检查jdk环境:java -version
,如下图所示,表示jdk环境已安装成功。
3.2 zookeeper安装包上传解压
使用xftp工具将下载好的 apache-zookeeper-3.8.0-bin.tar.gz 安装包上传到linux服务器,我是上传到了 /opt/zookeeper 目录,解压。
# 在opt目录下新建/zookeeper目录
cd /opt/
mkdir zookeeper
# 将下载的压缩包上传到/opt/zookeeper目录下
# 解压
tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz
3.3 zookeeper的配置
在 /opt/zookeeper 目录下创建目录 zkData,用来存放 zookeeper 的数据文件。
cd /opt/zookeeper/
mkdir zkData
修改配置文件,进入 /opt/zookeeper/apache-zookeeper-3.8.0-bin/conf 目录,复制 zoo_sample.cfg 文件并重命名为 zoo.cfg。
- zookeeper只能识别 zoo.cfg 配置文件。
cd /opt/zookeeper/apache-zookeeper-3.8.0-bin/conf
cp zoo_sample.cfg zoo.cf
使用 vim zoo.cfg 命令修改 zoo.cfg 的配置,将 dataDir=/opt/zookeeper/zkData 的值改为上面创建的zkData目录(用于存放数据文件),修改完后按esc,输入:wq!保存退出。
3.4 启动zookeeper服务端
进入bin目录下,通过 ./zkServer.sh start 命令启动服务端,然后使用 ./zkServer.sh status 查看启动状态。
从结果可以看到,zookeeper服务启动失败,报错信息为 Error contacting service. It is probably not running.
。
其他操作命令:
zkServer.sh start # 启动ZK服务
zkServer.sh start-foreground # 日志启动方式
zkServer.sh stop # 停止ZK服务
zkServer.sh restart # 重启ZK服务
zkServer.sh status # 查看ZK状态
3.5 错误排查
我们进入logs目录查看一下日志。
root@xnzysq20210118001:/opt/zookeeper/apache-zookeeper-3.8.0-bin/bin# cd ../logs/
root@xnzysq20210118001:/opt/zookeeper/apache-zookeeper-3.8.0-bin/logs# ls
zookeeper-root-server-xnzysq20210118001.out
# 查看日志
root@xnzysq20210118001:/opt/zookeeper/apache-zookeeper-3.8.0-bin/logs# cat zookeeper-root-server-xnzysq20210118001.out
可以发现错误信息为 8080 端口被占用,通过查阅Zookeeper3.5的官方文档,发现这是Zookeeper3.5的新特性:
这是Zookeeper AdminServer,默认使用8080端口,它的配置属性如下:
我们可以修改在zoo.cfg中修改AdminServer的端口,若没有该配置可以新增一行:
admin.serverPort=8088
保存后,再次启动,Zookeeper启动成功。
jps命令查看,474659 QuorumPeerMain 就是 zookeeper 的服务端。
3.6 zookeeper客户端启动
在bin目录下执行 ./zkCli.sh 命令启动zookeeper客户端,若出现以下页面表示启动成功。
如果连接的服务端和客户端不在同一台服务器上,使用 ./zkCli.sh -timeout 0 -r -server ip:port
命令,如 ./zkCli.sh -timeout 5000 -server 192.9.200.242:2181
。
- -r :即使ZooKeeper服务器集群一半以上的服务器宕机,也可以给客户端提供读服务。
通过ls、create、set、get命令进行测试。
使用 quit
命令可以退出客户端。
3.7 zookeeper服务端停用
通过 ./zkServer.sh stop
命令可以停止zookeeper服务。
4、集群安装zookeeper
在单台服务器上安装集群。
[root@VM-4-7-centos opt]# mkdir zookeeper01 zookeeper02 zookeeper03
[root@VM-4-7-centos opt]# ll
total 12904
-rw-r--r-- 1 root root 13185104 Jun 23 14:47 apache-zookeeper-3.8.0-bin.tar.gz
drwxr-xr-x 4 root root 4096 Jun 20 19:03 mellanox
drwxr-xr-x 2 root root 4096 Jun 20 19:54 mysql
drwxr-xr-x. 2 root root 4096 Oct 31 2018 rh
drwxr-xr-x 3 root root 4096 Jun 24 22:30 zookeeper01
drwxr-xr-x 3 root root 4096 Jun 24 22:31 zookeeper02
drwxr-xr-x 3 root root 4096 Jun 24 22:32 zookeeper03
[root@VM-4-7-centos opt]# cd /
[root@VM-4-7-centos /]# vim etc/hosts
配置信息省略......
###最低部加入
127.0.0.1 zookeeper01 zookeeper02 zookeeper03
:wq
[root@VM-4-7-centos /]#
[root@VM-4-7-centos opt]# cp -r apache-zookeeper-3.8.0-bin zookeeper01/
[root@VM-4-7-centos opt]# cp -r apache-zookeeper-3.8.0-bin zookeeper02/
[root@VM-4-7-centos opt]# cp -r apache-zookeeper-3.8.0-bin zookeeper03/
###创建myid(必须)
[root@VM-4-7-centos zkData]# pwd
/opt/zookeeper01/apache-zookeeper-3.8.0-bin/zkData
[root@VM-4-7-centos zkData]# vim myid
## 1代表服务器的id号,zookeeper01 设置 1,zookeeper02 设置 2 zookeeper03 设置 3
1
~
~
[root@VM-4-7-centos conf]# pwd
/opt/zookeeper01/apache-zookeeper-3.8.0-bin/conf
[root@VM-4-7-centos conf]# vim zoo.cfg
#clientPort 为端口号 zookeeper01 设置 2181,zookeeper02 设置 2182 zookeeper03 设置 2183
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpHost=0.0.0.0
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true
#必须
server.1=zookeeper01:2287:3387
server.2=zookeeper02:2288:3388
server.3=zookeeper03:2289:3389
[root@VM-4-7-centos bin]# pwd
/opt/zookeeper01/apache-zookeeper-3.8.0-bin/bin
[root@VM-4-7-centos bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper01/apache-zookeeper-3.8.0-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@VM-4-7-centos bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper01/apache-zookeeper-3.8.0-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Error contacting service. It is probably not running.
[root@VM-4-7-centos bin]#
[root@VM-4-7-centos bin]# pwd
/opt/zookeeper02/apache-zookeeper-3.8.0-bin/bin
[root@VM-4-7-centos bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper02/apache-zookeeper-3.8.0-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@VM-4-7-centos bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper02/apache-zookeeper-3.8.0-bin/bin/../conf/zoo.cfg
Client port found: 2182. Client address: localhost. Client SSL: false.
Mode: leader
[root@VM-4-7-centos bin]# pwd
/opt/zookeeper03/apache-zookeeper-3.8.0-bin/bin
[root@VM-4-7-centos bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper03/apache-zookeeper-3.8.0-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@VM-4-7-centos bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper03/apache-zookeeper-3.8.0-bin/bin/../conf/zoo.cfg
Client port found: 2183. Client address: localhost. Client SSL: false.
Mode: follower
评论区