背景 链接到标题 在部署应用时想要应用是高可用,通常会在应用前放置一个 HAProxy,当任何一个 Server 故障,HAProxy 会自动切换,但是 HAProxy 也存在单点故障,因此需要多个 HAProxy 来保证业务不中断,这时候我们需要另一个软件配合:Keepalived。通常我用 Keepalived 仅用来提供 VIP,保证当一个 Keepalived 故障,VIP 自动在其他 Keepalived 节点配置。
Keepalived 有一个问题是 virtual route ID 必须是同一网段内唯一的,当我们想要在一个网段内部署多个集群时,就需要人为的介入去分配 virtual route ID,不方便。这次来使用 Raft 自己实现 VIP 逻辑。
hashicorp/raft 链接到标题 Raft 有很多开源实现,其中 Hashicorp 实现的 Raft 库 已经被 Consul 等软件使用,且接口友善,选择使用它来实现。在 Github 上有很多 Raft 的使用示例,比较简单且完整的是 otoolep/hraftd,我们来看看他是怎么使用的。
otoolep/hraftd 链接到标题 main.go 链接到标题 在 main.go 中主要做了 4 件事情:store.New, store.Open, http.New, http.Start,先来看看程序是如何启动的:
func init() { // 设置命令行参数 flag.BoolVar(&inmem, "inmem", false, "Use in-memory storage for Raft") .