zookeeper概念简介:
ZooKeeper集群是由多台机器组成的,每台机器都充当了特定的角色,各种角色在协作过程中履行自己的任务,从而对外提供稳定、可靠的服务。
-
Zookeeper是为别的分布式程序服务
-
Zookeeper(只要有半数以上节点存活,zk就能正常服务)
-
Zookeeper所提供的服务涵盖:主从协调、服务器节点动态 上下线、统一配置管理、分布式共享锁、统一名称服务……
-
虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能:
由上图可知,ZooKeeper集群由多台机器组成,客户端的请求有可能被分配给任何一台机器来处理。考虑下面一个场景:客户端A问机器1,现在几点了,机器1回答下午两点半;与此同时,客户端B问机器2,现在几点了,机器2说,凌晨三点。两个客户端一交流,发现路唇不对马嘴,整个世界就乱了。可见,ZooKeeper集群时刻需要保持内部统一,无论客户端连接哪台机器,给出的响应应该保持一致。
为了保证数据的一致性,ZooKeeper对机器进行了角色划分
在每台机器数据保持一致的情况下,ZooKeeper集群自然可以保证,对于每次查询都返回同样的结果。但是,如果客户端发起增、删、改这类会引起数据变动的请求呢?多台机器自说自话,你让往东,他让往西,你要打狗,他要撵鸡,听谁的?
正所谓,家有千口,主事一人。不管有多少台机器,只能有一台机器充当Leader的角色,只有Leader才有权力发起更改数据的操作,Follower如果接收到了更改数据的请求,需要转交给Leader来处理。
Leader接受到一个更改数据的请求后,会广播消息:
每个Follower请注意!现在颁布001号命令,对某个节点执行某项操作。收到请回答!
Follower按照Leader的要求执行完任务之后会,会发送一条消息:
老大老大,任务执行完毕!
一旦Leader收到了半数以上的Follower的确认消息,就判定该操作已生效,会再发一条广播:
每个Follower请注意!001号命令已生效!
zookeeper安装:
zookeeper安装3步骤:下载,解压,配参数 就这么简单
# tar -zxvf zookeeper-3.4.13.tar.gz -C /usr/mysoftware/
# mv zookeeper-3.4.13 zookeeper
- 删除无用的目录与文件
//在安装根目录下
rm -rf src/ *.xml *.txt *.md
zookeeper配置:
- 配置文件在conf文件夹下
其中的zoo_sample.cfg不能直接使用它只是一个样本文件,需要重命名为zoo.cfg
sample 样品
cp zoo_sample.cfg zoo.cfg
- vi zoo.cfg 配置
# 每个心跳周期的毫秒数
tickTime=2000
# 初始化阶段可以花去的心跳个数 (10个心跳单位)
initLimit=10
# 从返送请求到获得相应最长时间(5个心跳单位)
# 超过时间认为对方挂了
syncLimit=5
# 数据\工作 目录
dataDir=/usr/mysoftware/Workspace/zookeeper
# 客户端请求的端口,~需要开放端口~
clientPort=2181
# 新增
# 配置集群中有几台机器
# 2888 Leader与Follower通信端口
# 3888 投票端口
# 为给集群服务器定义server.1 2 3编号
# ~②需要在数据目录配置myid文件并定义编号1|2|3 ~
server.1=192.168.33.141:2888:3888
server.2=192.168.33.142:2888:3888
server.3=192.168.33.143:2888:3888
- clientPort=2181 为客户端请求的端口,除此之外还有选举投票端口、Leader与Follower通信端口,后期还会有Hadoop、hive、storm等端口都需要防火墙开放 由于集群在内网中工作并不会暴漏给外界,所以直接关闭防火墙,在真实生产中也如此
#停止firewall防火墙
systemctl stop firewalld.service
#禁止firewall开机启动
systemctl disable firewalld.service
- 根据server.1,server.2,server.3对应的服务器在每个数据目录下配置myid文件并给每个服务器编号1 2 3
cd /usr/mysoftware/Workspace/zookeeper
echo 1 > myid
常用命令
-
启动:
bin目录下执行 ./zkServer.sh start
出现Starting zookeeper ... STARTED启动成功 -
查看从、主状态: leader 为主 follower 为从
./zkServer.sh status -
停止:
./zkServer.sh stop
网友评论