golang通过zookeeper实现master选举

golang通过zookeeper实现master选举

应用程序中有一个定时任务模块,之前是单机部署的,在实现多实例部署之后就对应用程序有了如下要求:

  • 一个定时任务只能在一个实例上运行
  • 一个应用实例故障后,原本由该实例执行的定时任务需要在其它实例上继续运行

Zookeeper 能够很容易实现这样的集群管理功能,它能够维护当前的集群中机器的服务状态,而且能够选出一个“总管”,让这个总管来管理集群,在这里即是让这个“总管”去执行定时任务。

完整的代码示例见:https://github.com/brotherbin/elec-master-demo

1. go zk client准备

从网上找到 golang 的 zookeeper 客户端 go-zookeeper:https://github.com/samuel/go-zookeeper ,网上反响很不错,而且还有比较详细的文档 zk-GoDoc: https://godoc.org/github.com/samuel/go-zookeeper/zk

2. 选举

实现方式是在 zookeeper 上创建一个 EPHEMERAL 类型的目录节点,当有一个实例创建成功后,该目录节点便已经存在,其它实例再去创建该节点就会提示该节点已存在。这也是我们想要的结果,将在 zookeeper 上创建目录节点成功的实例选举为 master 。

连接到zookeeper:

conn, connChan, err := zk.Connect(electionManager.ZKConfig.Servers, time.Second)
if err != nil {
    return err
}
// 等待连接成功
for {
    isConnected := false
    select {
    ca
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值