zk服务预启动过程

1. 锁定(Locking):zk服务预启动过程中的第一步是对数据目录进行锁定,确保只有一个zk实例可以启动。当一个zk实例进入预启动模式时,它会检查是否存在一个锁文件。如果锁文件存在,说明已经有一个zk实例在运行,那么当前实例将等待一段时间后重新尝试获取锁。如果锁文件不存在,则当前实例会创建一个锁文件,并标记为“由当前实例持有”

2. 初始化(Initialization):如果zk实例成功获得锁,则继续进行初始化操作。初始化操作包括:
- 读取和解析配置文件:zk实例会读取并解析配置文件,获取配置参数。
- 启动日志系统:zk实例会启动日志系统,用于记录运行时的日志信息。
- 准备数据目录:zk实例会检查数据目录是否存在,如果不存在则创建,并根据配置参数初始化数据目录。

zk启动选举的过程

1. 选举触发(Election Trigger):当多个zk实例同时启动并进行初始化时,它们会争夺成为leader的权限。在初始状态下,所有zk实例都是follower。当一个实例启动时,它会向其他实例发送请求,通知其自己要参与选举,并准备开始选举过程。

2. 连接和投票(Connection and Vote):当一个zk实例发起选举后,它会尝试连接其他zk实例进行投票。每个zk实例都会对收到的投票请求做出相应的处理:
- 如果一个zk实例接收到一个来自更高优先级的实例的请求,它将放弃自己的选举,并成为该实例的follower。
- 如果一个zk实例接收到一个来自同一优先级的实例的请求,它会比较自己的ZXID(ZooKeeper事务ID),ZXID更大的实例将选择自己作为leader,ZXID较小的实例将变为follower。
- 如果一个zk实例接收到一个来自优先级较低的实例的请求,它会忽略该请求。

3. 选举结果(Election Result):经过投票后,选举结果可能有三种情况:
- 某个zk实例获得了大多数选票,成为新的leader。
- 没有任何实例获得大多数选票,选举失败。
- 选举超时,zk实例重新开始选举过程。


本文由轻山版权所有,禁止未经同意的情况下转发