关于 Elasticsearch 跨集群复制
GitHub Enterprise Server 使用 Elasticsearch 为问题、拉取请求、仓库、项目和发布页面中的搜索以及整个 Web 界面中显示的计数提供支持。 由于搜索是产品的核心,Elasticsearch 的可靠性直接影响实例的日常管理。
在高可用性(HA)配置中, GitHub Enterprise Server 使用领导者/关注者模型。 主设备接收所有写入操作和流量,副本设备保持同步,并作为只读备用设备待命;如果主设备发生故障,副本设备即可接管。 有关详细信息,请参阅“关于高可用性配置”。
在早期版本中,Elasticsearch 并不直接支持这种主从模型。 若要复制搜索数据,请 GitHub Enterprise Server 运行跨主设备和副本设备的单个 Elasticsearch 群集。 此方法有效,但它引入了一类问题:Elasticsearch 可以将主分片(负责接收和验证写入的分片)移到副本设备上。 如果该副本随后处于脱机状态进行维护,则实例可能会进入锁定状态,因为副本等待 Elasticsearch 变为正常状态,而 Elasticsearch 在副本重新加入之前无法正常运行。
Elasticsearch 跨群集复制 (CCR) 会删除此依赖项。 不是由一个跨所有设备的集群统一运行,而是每台设备都作为独立的单节点 Elasticsearch 集群运行。 然后,CCR 使用本机支持的领导者/追随器模式在这些群集之间复制索引数据。 仅当数据持久保存到基础 Lucene 段后才会复制数据,因此副本始终遵循已安全写入的数据。 因此,关键的主分片将不再会滞留在只读副本上。
Benefits
- 锁定的升级和维护时段更少。 在维护期间删除主设备与副本设备之间的循环依赖项可降低实例停滞的风险。
- 更强大的数据保护。 只有在持久保存数据后才会复制数据,这有助于防止故障转移期间索引损坏。
- 更简单的操作。 这种模式减少了因维护步骤未按顺序执行而导致的手动索引修复需求。
Availability
自 GitHub Enterprise Server 3.19.1 起支持 Elasticsearch CCR。 此功能是可选的。 GitHub 计划在未来两年内将 CCR 设为默认的 HA 搜索架构,因此,在它成为默认架构之前,你有时间对其进行测试并提供反馈。
Requirements
在启用 CCR 之前,请确认以下内容。
- 实例运行 GitHub Enterprise Server 3.19.1 或更高版本。
- 实例配置为使用至少两个设备(一个主设备和一个或多个副本)实现高可用性。
- 你拥有已更新的 GitHub Enterprise Server 许可证,其中包含 CCR 所需的 Elasticsearch 授权。 联系 GitHub 的销售团队 或 GitHub 支持 让企业启用新许可证,然后下载更新的许可证文件。
警告: 启用 CCR 后,升级预检检查需要有效的已启用 CCR 的许可证。 如果启用标志并且许可证检查失败,升级将不会继续。 在启用该功能或升级之前,请确保已安装更新的许可证。 如果不确定许可证是否包含 Elasticsearch 权利,请联系 GitHub 支持。
启用 Elasticsearch 跨集群复制
注意: 迁移可能需要大量的时间,具体取决于实例的大小,因为在复制重启之前,搜索数据会合并到主数据库。 计划在维护时段内启用 CCR,并首先在非生产环境中测试该过程。 有关详细信息,请参阅“升级实例”。
-
联系 GitHub 支持 并请求访问新的 HA 搜索体系结构。 GitHub 将使您的企业能够下载所需的已启用 CCR 的许可证。
-
下载更新的许可证并将其上传到实例。 有关详细信息,请参阅“下载 GitHub Enterprise 许可证”。
-
在主设备上,启用该功能。
ghe-config app.elasticsearch.ccr true -
通过执行一次配置运行,或将实例升级到 3.19.1 或更高版本来应用该配置。
ghe-config-apply -
实例重启时,Elasticsearch 会将安装迁移到新的复制方法。 此次迁移会将搜索数据整合到主节点上,终止此前跨设备的集群,并使用 CCR 重新启动复制。 在迁移过程中, GitHub Enterprise Server 将关注者附加到现有搜索索引,并启用自动跟踪规则,以便自动跟踪将来创建的任何索引。
使用 Elasticsearch 跨群集复制
验证复制
迁移完成后,搜索将继续正常运行,用户搜索方式无需更改。 若要确认复制运行状况,请生成支持捆绑包,其中包括 CCR 状态信息以供审阅。 有关详细信息,请参阅“向GitHub支持提供数据”。
故障转移和灾难恢复
继续使用标准的高可用性复制工具来管理副本并执行故障切换。 有关详细信息,请参阅 发起到副本设备的故障转移 和 恢复高可用性配置。
在启用 CCR 的情况下发生故障转移后,被提升的设备将成为新的搜索主设备,而副本会作为标准恢复过程的一部分重新跟随其索引。 如果您在故障转移期间或之后遇到与搜索复制相关的错误,请联系 GitHub 支持。
禁用 Elasticsearch 跨群集复制
警告: 请勿在生产实例上禁用 CCR,而无需参考 GitHub 支持。 禁用 CCR 并不是一种常规的自助操作。 关闭该功能可以触发删除副本 Elasticsearch 数据,作为返回到上一模式的一部分。
如果需要返回到以前的搜索体系结构,请在进行任何更改之前联系 GitHub 支持 。 GitHub 将帮助你确认你的许可证、复制状态和升级路径都已得到安全处理。
延伸阅读
- 关于高可用性配置
- 命令行实用程序
- 如何在 GitHub Enterprise Server 中重新生成搜索体系结构以实现高可用性the GitHub Blog