草庐IT

HostMaster

全部标签

Golang基于Mysql分布式锁实现集群主备

背景集群中如果需要主备,可以基于Redis、zk的分布式锁等实现,本文将介绍如何利用Mysql分布式锁进行实现。原理数据库中包含数据字段(此处为Master的主机名)、版本号和上一次更新时间。Master不断上传自己的心跳,即刷新数据库中的"更新时间"。上一次更新时间超过了一定时间,则认为Master已Down,则可以抢Master。抢Master和更新心跳时,版本号+1,要判断版本号是否与上一次读取的数据相同。如果相同,则修改成功。如果不相同,则说明Master已经被其他主机抢走。数据库建表master存放主机名CREATETABLE`host_master`(`id`intNOTNULLA

Golang基于Mysql分布式锁实现集群主备

背景集群中如果需要主备,可以基于Redis、zk的分布式锁等实现,本文将介绍如何利用Mysql分布式锁进行实现。原理数据库中包含数据字段(此处为Master的主机名)、版本号和上一次更新时间。Master不断上传自己的心跳,即刷新数据库中的"更新时间"。上一次更新时间超过了一定时间,则认为Master已Down,则可以抢Master。抢Master和更新心跳时,版本号+1,要判断版本号是否与上一次读取的数据相同。如果相同,则修改成功。如果不相同,则说明Master已经被其他主机抢走。数据库建表master存放主机名CREATETABLE`host_master`(`id`intNOTNULLA