Zookeeper集群与分布式理论


参考蚂蚁课堂

1.分布式理论之强一致性概念

假如说有一个mysql集群,然后数据库表中有一个字段name。在这里插入图片描述

如图所示name原来的值都是张三,然后这个时候突然name被更改为李四。这个时候你查MySQL1一定会查到name值为李四,你查MySQL2,name值也为李四,这就是数据库强一致性。但是由于在数据同步的过程中网络会发生抖动,等原因,可能你查的name不是李四,还是张三也就是说数据不会那么及时的同步到MySQL2当中。所以强一致性很难实现。如果想达到这个效果我们可以这样做,就是在数据同步时对MySQL2这个数据库的读操作加锁,等数据同步之后再解锁,在分布式领域中强一致性几乎无法实现。

2.分布式理论之最终一致性概念

最终一致性是指我不需要你在修改的时候,实时同步,也就是说你可以出现读取到原来的数据,但是最终无论你通过什么手段都要达到最终一致性。比如假如说网络发生抖动,那么我就可以通过不断的尝试,啥时候网络好了,啥时候同步。这就跟犯罪了似的,不管逃到天涯海角,海枯石烂,早晚有一天会面临正义的审判,正义会迟到,但永远不会缺席!!!!这就跟最终一致性差不多你中间可能有各种原因导致数据库不同步,但是早晚有一天你得同步。

3. Zookeeper集群选举原理策略

首先介绍一下Zookeeper集群的相关概念,Zookeeper集群的节点最好是奇数而不是偶数。宕机之后剩余集群节点总数一定要大于集群节点总数/2这样的话zk才可以运行。集群当中一定会有的就是主节点和从节点,谁是主节点谁是从节点是通过选举机制选出来的,zookeeper选举的机制很简单就是投票。每台zookeeper服务器都会有配置文件配置文件里面会有myID,谁的myID大就会给谁投票。假设说集群当中只有一台zookeeper,那么这时候的选举就是等额选举,投票的时候肯定会投自己。假设这时候有两台zookeeper一台myID是1记为奥奥,另一台myID是2记为拜拜,那么投票的时候拜拜会得到两票一票是他自己的,另一票是奥奥的,因为他myID大,所以别人都认为它很牛逼。所以这时候拜拜会被选举为President,这个时候myID为3的川川想加入这个这个集群想参与这场竞争,但是这个时候川川输了,尽管他认为自己很牛逼。这主要是因为这届President的选举已经结束了,已经有President了,川川这个时候来就无法成为President,那么什么时候川川才能上位呢?只有拜拜死了(宕机)的时候,他才有机会被重新选举成为新的President。

4.构建Zookeeper集群环境

首先我们准备3台zookeeper机器。

在这里插入图片描述

分别是3,7,9这三台机器,然后分别在这3台机器的配置文件/usr/local/zookeeper/conf/zoo.cfg里面添加这3台机器的IP地址和其他底层的一些通信协议。即添加:

server.1=192.168.247.3:2888:3888

server.2=192.168.247.7:2888:3888

server.3=192.168.247.9:2888:3888

在这里插入图片描述

然后在/usr/local/zookeeper/data下面创建文件myid,里面分别写上1,2,3就行。

在这里插入图片描述

3是1,7是2,9是3。

注意myID不能重复,然后由于我们这3台主机之间需要相互通信所以我们必须把3台节点的防火墙关了。

systemctl stop firewalld

当我们有一台zookeeper节点启动的时候整个集群是无法启动的,因为整个集群一共有3台zookeeper,1 < 3/2,没有过半所以集群无法启动。

在这里插入图片描述

这个时候我们把7这台机器启动起来。

在这里插入图片描述

然后查看一下status发现他已经加入到这个集群当中而且mode为follower。之后我们再看一下3这台机器的status

在这里插入图片描述

3这个时候的角色为leader。

5.为什么zookeeper集群节点最好要是奇数

如果zk集群总数为5的话,能够保证zk可用性问题最多只能宕机2台,因为(5-2)=3 > 5/2。

如果zk集群总数为6的话,能够保证zk可用性问题最多只能宕机2台,因为(6-2)=4 > 6/2。

既然5台和6台效果是一样的那么,5台明显比6台要好,它节约了服务器资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温JZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值