zookeeper伪集群搭建
在zookeeper当中,znode是节点的另一个称呼。使用zookeeper无非就是对znode的增删改查
znode节点的分类:
zookeeper如何实现分布式锁的:
在节点下插入临时有序节点,如果是第一个把数据插入到临时有序节点下的,那就说明它拿到了锁资源,这时候也会有其他客户端在临时有序节点下去插入,但这时候去比序号,序号越小的就是拿到锁资源的。如果一个客户端进来了,没有拿到锁资源,第一种是排队等着,第二种是直接走。当客户端断开之后,zookeeper会自动把临时节点删掉。同理,拿到锁资源的发生死锁了,说明它发生了异常问题,异常肯定要和zookeeper断开连接,它拿到锁资源这个东西也会被自动删除,这样也就不用干超时时间问题了
小知识:redis实现分布式锁是基于key实现的,有超时时间问题,zookeeper实现分布式锁是基于它的么一个节点实现的,没有超时时间问题,zookeeper之所以没有超时时间问题是因为它的临时节点
zookeeper集群中的角色
1、leader:整合zookeeper集群的中心,没他不正常能运行。整个集群必定有leader
只有leader角色才能执行写操作,即使写操作请求给了非leader角色,最终仍然会让leader执行写操作,leader写完数据会将数据广播出去,让所有zookeeper服务同步到本地,只有当leader发现超过半数的zookeeper服务都完成写操作后,leader才会将刚刚的写操作保存起来。注意两个写操作:leader是处理客户端发来的写操作,非leader执行的是leader广播出来的写操作
2、follower
追随leader,follower主要处理客户端的读请求,当没有leader时,follower会变成looking,然后发起投票,重新选举一个leader.
3、observer,追随leader,当没有leader时什么都不干
4、looking ,当整个zookeeper集群中,没有leader时就会让服务从follower转变为looking角色。当zookeeper服务刚刚启动时就是一个looking,如果zookeeper集群有leader,直接追随leader,如果zookeeper集群没有leader,looking发起投票选新的leader
zookeeper所有服务中存的数据是一样
Zookeeper集群搭建:
步骤一:进到local目录下创建一个zookeeper文件夹
cd /usr/local/
mkdir zk-cluster
步骤二:cd ~ 回到用户目录下,将zookeeper压缩包安装到刚创建的zk-cluster目录下
tar -zxvf zookeeper-3.4.14.tar.gz -C /usr/local/zk-cluster/
步骤三:进到刚才解压的目录下,并重命名安装的zookeeper文件
cd /usr/local/ //先到local目录下
cd ./zk-cluster/ //再进入解压的zookeeper所在的文件夹
mv zookeeper-3.4.14/ zk1/ //重命名
步骤四:进入到zk1中,复制一份zoo_sample.cfg的配置文件并重命名,修改该配置文件
cd ./zk1/ //进入zk1文件夹
cd ./conf/ //进入配置文件夹
cp zoo_sample.cfg zoo.cfg //复制一份zoo_sample.cfg并将复制文件重名为zoo.cfg
vi zoo.cfg //修改配置文件
配置文件修改具体细节:
步骤五:退到上一级目录,即conf下,创建data文件夹,并进入data编写myid配置文件
cd ..
mkdir data //创建data文件夹
cd ./data
vi myid
myid配置文件详情图:
步骤六:退回到zk-cluster目录下,根据zk1复制两份zk2和zk3,代替两个zookeeper
cd ..
cd .. //注意在data目录下回退了两次
cp -r zk1/ zk2/ //复制一份zk1并命名为zk2
cp -r zk1/ zk3/ //复制一份zk1并命名为zk3
步骤七:进入到复制的zk2、zk3文件的配置文件中进行修改,修改conf
zk2的相关修改:
修改zk2的zoo.cfg配置文件
修改zk2的myid文件
zk3的相关修改:
cd /usr/local/zk-cluster //到集群文件夹中去
vi ./zk3/conf/zoo.cfg //去修改zk3的zoo.cfg配置文件
zk3的zoo.cfg的修改详情
修改zk3的myid文件:
/usr/local/zk-cluster/zk3/data //到zk3的data文件夹下
vi myid //修改myid
zk3的myid文件修改详情:
=======================================================================、
以上zookeeper的集群就搭建完了
==============================================
启动zk1
cd /usr/local/zk-cluster/zk1/bin
./zkServer.sh start
启动zk2
cd /usr/local/zk-cluster/zk2/bin
./zkServer.sh start
启动zk3
cd /usr/local/zk-cluster/zk3/bin
./zkServer.sh start
三个启动后插叙状态结果:
如果出现Mode:standalone状态的,查看配置文件,或者是不是同样端口已经启动了一个。这个端口占用也不会报错
推荐阅读
-
使用docker快速搭建Spark集群的方法教程
-
SpringCloud用Zookeeper搭建配置中心的方法
-
docker搭建rabbitmq集群环境的方法
-
Linux系统:centos7下搭建ZooKeeper3.4中间件,常用命令总结
-
ZooKeeper 03 - ZooKeeper集群的脑裂问题 (Split Brain问题)
-
Linux(Centos7)下redis5集群搭建和使用说明详解
-
centos7下搭建ZooKeeper3.4中间件常用命令小结
-
Linux下ZooKeeper分布式集群安装教程
-
kafka分布式集群搭建
-
Linux系统 CentOS 7怎么搭建集群? 搭建高可用集群的步骤