创建选举的Session
可配置项:
- WithTTL:设置session的存活时间,默认60s
- WithLease:设置session的key的lease,默认新建一个TTL为session TTL的lease
- WithContext:设置context,默认为etcd client的context
内部实现:
- 获取传入的配置
- 如果没有设置lease,则向etcd server申请一个,TTL使用session的TTL
- 对lease开启协程进行保活,定时向etcd server发送保活消息,间隔为lease TTL / 3,收到回复后更新本地lease的deadline,并更新下一次发送保活的时间,以及本地lease的过期时间
- 对lease开启协程本地检测lease是否过期,间隔一秒进行检测
进行选举
可配置项:
- 设置用于选举key的前缀(key prefix),以及value
内部实现:
- 组装用于选举的key:prefix + session lease id
k := fmt.Sprintf("%s%x", e.keyPrefix, s.Lease())
- 通过该事务来创建etcd选举key
- 如果选举key已经存在,则获取,并更新value及关联新的lease
- 如果不存在则创建,
- 等待符合条件的key(即选举前缀一致,但是其他节点先创建的选举key)都被被删除后,自身变成leader