zookeeper的选举机制和CAP法则 | 青训营笔记

145 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第9天

Zookeeper的选举机制和CAP法则 | 青训营笔记

常用命令

ls / get / creatae / delete

CAP法则

一个分布式系统不可能同时满足以下三种:

  • 一致性(C Consistency):数据在多个副本之间能够保持数据一致的特性;
  • 可用性 (A Available):系统提供的服务一直处于可用的状态;
  • 分区容错性(P Partition Tolerance):分布式系统在遇到任何网络分区故障时,仍然需要能够保证对外提供满足一致性和可用性的服务

ZooKeeper保证的CP

  1. 不能保证每次服务请求的可用性(极端情况消费者程序要重新请求)
  2. 进行Leader选举时集群不可用

选举机制

半数机制:2n+1,安装奇数台

10 / 20 / 100台服务器--3 / 5 / 11台安装zookeeper

第一次选举
  1. 服务器启动发起选举
  2. 首先给自己来一票
  3. 如果服务器状态为LOOKING则交换选票,否则保持
  4. myid小的改票为下一台
  5. 如果下一台服务器的票数超过半数,立即当选Leader
  6. 后来服务器发动选举,如果有Leader则服从
非第一次选举

服务器无法与Leader保持连接:

  • 服务器试图选举,被告知存在Leader,需要建立连接并状态同步

集群中不存在Leader:

  • EPOCH(任期代号)>事务id大>服务器id

Follower和Leader状态同步

当Follower或Leader挂掉会进行状态同步,L和F通过心跳监测机制来感知彼此的情况。

同步策略:差异化同步(DIFF)、回滚同步(TRUNC)、全量同步(SNAP)

  • 当Follower挂掉:事务id小于Leader的事务id则差异化,大于则回滚
  • 当Leader挂掉:以新Leader为主,保证让 followers 同步已提交的提议,丢弃未提交的提议

Mysql数据库事务的四大特性(ACID)

事务:把一组密不可分的操作系列集合在一起,这些操作要么全部执行,要么全部不执行。

1.原子性:事务是内定义的操作是一个整体,是不可分割的。

2.一致性:同一个事务,多次读取数据库中的同一个数据,读取的内容应该是一致的,不变的。

3.隔离性:不同事务之间相互独立,互不干扰。

4.持久性:事务提交后,事务内的操作对数据库的修改被永久保存在数据库文件中。

事务的隔离性有四个级别

1 读未提交    read uncommitted     一个事务可以读到别的事务尚未提交的数据,出现的问题是读到的数据为脏数据,称为脏读。

2 读已提交    read committed    一个事务读不到别的事务还没提交的数据,可以读到已经提交的事务。出现的问题是不可重复复,即同一个事务每次读取的数据会不一致。

3 可重复读   repeatable read     事务开启后,同一个事务每次读到的数据是一致的,就算别的事务提交了新的数据也是读取不到的,这就造成了读取的数据有可能跟数据库的数据不相同,这种方式叫做幻读。

4 串行化    seriaziable  一个事务的执行,需要等待上一个事务执行完成。正在执行的事务会把当前表锁住(表级别的锁),别的事务无法访问当前的表。出现的问题,数据库的执行效率低。