Working with the bundled Consul service
Working with the bundled Consul service
作为其高可用性堆栈的一部分,GitLab Premium 包含可通过管理的捆绑版本的Consul . Consul 是服务网络解决方案. 对于 ,支持 Consul 利用来配置:
Consul 群集由多个服务器代理以及在其他需要与 Consul 群集通信的节点上运行的客户端代理组成.
首先,请确保在每个节点上 下载/安装 Omnibus GitLab.
选择一种安装方法,然后确保完成以下步骤:
- 安装和配置必要的依赖项.
- 添加 GitLab 软件包存储库并安装软件包.
安装 GitLab 软件包时,请勿提供EXTERNAL_URL
值.
在每个 Consul 节点上执行以下操作:
在执行下一步之前,请确保为收集
CONSUL_SERVER_NODES
,它们是 Consul 服务器节点的 IP 地址或 DNS 记录.编辑
/etc/gitlab/gitlab.rb
替换/etc/gitlab/gitlab.rb
# START user configuration
部分中记录的值:consul_role
在 GitLab 10.3 中引入以使更改生效.
在继续之前,请确保 Consul 配置正确. 运行以下命令以验证所有服务器节点都在通信:
/opt/gitlab/embedded/bin/consul members
输出应类似于:
Node Address Status Type Build Protocol DC
CONSUL_NODE_ONE XXX.XXX.XXX.YYY:8301 alive server 0.9.2 2 gitlab_consul
CONSUL_NODE_TWO XXX.XXX.XXX.YYY:8301 alive server 0.9.2 2 gitlab_consul
Checking cluster membership
要查看哪些节点是集群的一部分,请在集群中的任何成员上运行以下命令
Ideally all nodes will have a Status
of alive
.
注意:本部分仅适用于服务器代理. 在需要时重新启动客户端代理是安全的.
如果有必要重新启动服务器群集,则以受控方式进行此操作很重要,以保持仲裁. 如果仲裁丢失,则需要遵循 Consul 过程来恢复群集.
为了安全起见,建议您一次仅重新启动一个服务器代理,以确保群集保持完整.
对于较大的群集,可以一次重新启动多个代理. 请参阅领事共识文档,以了解可以容忍多少次失败. 这是它可以承受的同时重启的次数.
运行 GitLab 捆绑的 Consul 的节点应为:
- 一次升级一个节点.
注意:从任何 Consul 节点运行curl http://127.0.0.1:8500/v1/health/state/critical
,将识别群集中的现有运行状况问题. 如果群集运行状况良好,该命令将返回一个空数组.
领事群集使用筏协议进行通信. 如果当前领导者下线,则需要进行领导者选举. 必须存在一个领导者节点,以促进整个集群之间的同步. 如果同时有太多节点脱机,则由于 ,群集将失去仲裁且不会选举领导者.
如果群集在升级后无法恢复,请参考故障排除部分 . 可能特别有意义.
注意: GitLab 仅使用 Consul 来存储易于重新生成的瞬态数据. 如果捆绑包的 Consul 除了 GitLab 本身以外没有被其他进程使用,那么从头开始重建集群就可以了.
Consul server agents unable to communicate
默认情况下,服务器代理将尝试绑定到” 0.0.0.0”,但是它们将通告节点上的第一个私有 IP 地址,以供其他代理与其通信. 如果其他节点无法与此地址上的节点通信,则群集将处于故障状态.
2017-09-25_19:53:39.90821 2017/09/25 19:53:39 [WARN] raft: no known peers, aborting election
2017-09-25_19:53:41.74356 2017/09/25 19:53:41 [ERR] agent: failed to sync remote state: No cluster leader
要解决此问题:
- 在每个其他节点都可以到达的节点上选择一个地址.
更新您的
/etc/gitlab/gitlab.rb
consul['configuration'] = {
...
}
Run
gitlab-ctl reconfigure
如果仍然看到错误,则可能必须在受影响的节点上重新初始化 .
如果一个节点具有多个专用 IP,则代理会混淆要播发哪个专用地址,然后在启动时立即退出.
如果遇到此问题,您将在gitlab-ctl tail consul
输出中看到类似以下的消息:
要解决此问题:
- 在该节点上选择一个地址,所有其他节点都可以通过该地址到达该节点.
更新您的
/etc/gitlab/gitlab.rb
consul['configuration'] = {
...
bind_addr: 'IP ADDRESS'
}
Run
gitlab-ctl reconfigure
Outage recovery
如果您在群集中丢失了足够的服务器代理以破坏仲裁,则该群集将被视为失败,并且如果没有手动干预,它将无法运行.
Recreate from scratch
默认情况下,GitLab 不会在 Consul 群集中存储任何无法重新创建的内容. 删除 Consul 数据库并重新初始化
gitlab-ctl stop consul
rm -rf /var/opt/gitlab/consul/data
此后,群集应开始备份,并且服务器代理重新加入. 之后不久,客户代理也应重新加入.