IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    使用 Raft 实现 VIP 功能

    Yiran\'s Blog发表于 2020-01-17 22:48:28
    love 0
    背景 链接到标题 在部署应用时想要应用是高可用,通常会在应用前放置一个 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") .


沪ICP备19023445号-2号
友情链接