一、简介
1.1、概念
ZooKeeper 是一个开源的分布式协调服务,主要用于解决分布式系统中的数据一致性问题。它提供了一种可靠的机制来管理和协调分布式系统的各个节点。ZooKeeper 的设计目标是简化分布式应用的开发,提供简单易用的接口和高性能、高稳定性的系统。
通俗的理解:
1、zk其实是一个小型的文件存储系统,可以存放少量的数据,这些数据不是什么正儿八经的数据,都是一些关于服务器的小数据。
2、它可以感知服务器是否上线,是否掉线。
3、我们为什么要学习这个东西?我们可以使用zk搭建集群环境。
比如:hadoop的高可用(HA),namenode 存在单节点故障。我们可以启用两个namenode,一个挂掉了,另一个自动启动。另一个namenode如何知道第一个namenode挂掉了?zk就可以做到。
包括:HBase也会使用到。
Java架构中: zk进行分布式锁等操作。
1.2、特点
-
是一个分布式集群,一个领导者(leader),多个跟随者(follower).
-
集群中只要有半数以上的节点存活,Zookeeper集群就能正常服务。
-
全局数据一致性:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的。
-
更新请求按顺序进行:来自同一个client的更新请求按其发送顺序依次执行
-
数据更新的原子性:一次数据的更新要么成功,要么失败
-
数据的实时性:在一定时间范围内,client能读到最新数据。
二、安装
关闭三台服务器的防火墙
2.1、上传解压重命名
上传:将zookeeper的安装包上传到 /opt/modules 下
解压:
cd /opt/modules
tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/installs/
重命名:
cd /opt/installs
mv zookeeper-3.4.10/ zookeeper
2.2、修改配置文件
进入到/opt/installs/zookeeper/conf文件夹下,重命名zoo_sample.cfg
cd /opt/installs/zookeeper/conf
mv zoo_sample.cfg zoo.cfg
这是我的全部配置,可以参照一下修改自己的配置:
The number of milliseconds of each tick
tickTime=2000
The number of ticks that the initial
synchronization phase can take
initLimit=10
The number of ticks that can pass between
sending a request and getting an acknowledgement
syncLimit=5
the directory where the snapshot is stored.
do not use /tmp for storage, /tmp here is just
example sakes.
dataDir=/opt/installs/zookeeper/zkData
the port at which the clients will connect
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.
http://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.httpPort=7000
#metricsProvider.exportJvmInfo=true
server.1=bigdata01:2888:3888
server.2=bigdata02:2888:3888
server.3=bigdata03:2888:3888
记得在zookeeper中创建zkData文件夹,以及myid文件
cd /opt/installs/zookeeper
mkdir zkData
touch myid
echo "1" > myid
配置环境变量:
export ZOOKEEPER_HOME=/opt/installs/zookeeper
export PATH=PATH:ZOOKEEPER_HOME/bin
刷新环境变量
source /etc/profile
第二台和第三台服务器也是这样配置,不过第二台的 myid 里面是 2 ;第三台是 3 。
三、使用
3.1、启动zookeeper
要在每一台机器上都启动
zkServer.sh start
一个启动脚本,在/usr/local/bin 下面,创建zk.sh
#!/bin/bash
获取参数
COMMAND=$1
if [ ! $COMMAND ]; then
echo "please input your option in [start | stop | status]"
exit -1
fi
if [ $COMMAND != "start" -a $COMMAND != "stop" -a $COMMAND != "status" ]; then
echo "please input your option in [start | stop | status]"
exit -1
fi
所有的服务器
HOSTS=( bigdata01 bigdata02 bigdata03 )
for HOST in ${HOSTS[*]}
do
ssh -T $HOST << TERMINATOR
echo "---------- $HOST ----------"
zkServer.sh $COMMAND 2> /dev/null | grep -ivh SSL
exit
TERMINATOR
done
添加权限chmod u+x zk.sh
zk.sh start #启动集群zk.sh stop #关闭集群
zk.sh status #查看状态
3.2、连接zkServer
zkCli.sh 直接回车,连接的是本机的节点
3.3、create 创建新的节点
create /bigdata
3.4、set 在节点上设置数据
set /bigdata01 "HelloWorld"
3.5、ls 查看某个路径下的子节点
ls / # / 是根目录
ls /zookeeper
3.6、get 查看某个节点上的数据
get /bigdata01
3.7、delete 删除节点
delete /bigdata
如果节点下有子节点,则 delete 是删不掉的,需要使用 deleteall
deleteall /bigdata