欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

zookeeper伪集群搭建

程序员文章站 2022-06-21 17:45:13
...

zookeeper伪集群搭建

在zookeeper当中,znode是节点的另一个称呼。使用zookeeper无非就是对znode的增删改查


znode节点的分类:
zookeeper伪集群搭建


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

zookeeper伪集群搭建

步骤二:cd ~ 回到用户目录下,将zookeeper压缩包安装到刚创建的zk-cluster目录下

tar  -zxvf  zookeeper-3.4.14.tar.gz  -C  /usr/local/zk-cluster/   

zookeeper伪集群搭建

步骤三:进到刚才解压的目录下,并重命名安装的zookeeper文件

cd /usr/local/        //先到local目录下

 cd ./zk-cluster/        //再进入解压的zookeeper所在的文件夹

mv zookeeper-3.4.14/   zk1/           //重命名

zookeeper伪集群搭建

步骤四:进入到zk1中,复制一份zoo_sample.cfg的配置文件并重命名,修改该配置文件

 cd ./zk1/     //进入zk1文件夹

cd ./conf/      //进入配置文件夹

 cp zoo_sample.cfg    zoo.cfg       //复制一份zoo_sample.cfg并将复制文件重名为zoo.cfg 

 vi zoo.cfg      //修改配置文件
 

zookeeper伪集群搭建

配置文件修改具体细节:
zookeeper伪集群搭建

步骤五:退到上一级目录,即conf下,创建data文件夹,并进入data编写myid配置文件

cd ..

 mkdir   data   //创建data文件夹

cd ./data

vi  myid

zookeeper伪集群搭建

myid配置文件详情图:
zookeeper伪集群搭建

步骤六:退回到zk-cluster目录下,根据zk1复制两份zk2和zk3,代替两个zookeeper

cd ..
cd ..     //注意在data目录下回退了两次

cp    -r   zk1/  zk2/        //复制一份zk1并命名为zk2

cp    -r   zk1/  zk3/           //复制一份zk1并命名为zk3

zookeeper伪集群搭建

步骤七:进入到复制的zk2、zk3文件的配置文件中进行修改,修改conf

zk2的相关修改:
zookeeper伪集群搭建

修改zk2的zoo.cfg配置文件
zookeeper伪集群搭建
修改zk2的myid文件

zookeeper伪集群搭建

zk3的相关修改:

cd  /usr/local/zk-cluster        //到集群文件夹中去

 vi ./zk3/conf/zoo.cfg           //去修改zk3的zoo.cfg配置文件

zookeeper伪集群搭建

zk3的zoo.cfg的修改详情
zookeeper伪集群搭建

修改zk3的myid文件:

/usr/local/zk-cluster/zk3/data           //到zk3的data文件夹下

 vi myid               //修改myid

zookeeper伪集群搭建

zk3的myid文件修改详情:
zookeeper伪集群搭建

=======================================================================、

以上zookeeper的集群就搭建完了

==============================================

启动zk1

cd  /usr/local/zk-cluster/zk1/bin

./zkServer.sh start

zookeeper伪集群搭建

启动zk2

cd   /usr/local/zk-cluster/zk2/bin 


./zkServer.sh  start

zookeeper伪集群搭建

启动zk3

cd   /usr/local/zk-cluster/zk3/bin

./zkServer.sh start

zookeeper伪集群搭建

三个启动后插叙状态结果:
zookeeper伪集群搭建
如果出现Mode:standalone状态的,查看配置文件,或者是不是同样端口已经启动了一个。这个端口占用也不会报错