---
title: 自动化部署 / 扩容openGauss —— Ansible for openGauss-官方技术文章-鲲鹏社区
description: 本文主要向大家介绍一套基于 Ansible 开发的，自动化部署及扩容 openGauss 的脚本工具：Ansible for openGauss（简称 AFO）。
keywords: 自动化部署,Gauss,扩容,Ansible,官方技术文章,鲲鹏社区,开发背景,解决部署痛点
url: https://www.hikunpeng.com/developer/techArticles/20231124-10?envFlag=1
section: (其他)
---

# 自动化部署 / 扩容openGauss —— Ansible for openGauss-官方技术文章-鲲鹏社区

URL: https://www.hikunpeng.com/developer/techArticles/20231124-10?envFlag=1
描述: 本文主要向大家介绍一套基于 Ansible 开发的，自动化部署及扩容 openGauss 的脚本工具：Ansible for openGauss（简称 AFO）。
关键词: 自动化部署,Gauss,扩容,Ansible,官方技术文章,鲲鹏社区,开发背景,解决部署痛点

官方技术文章 [了解详情](https://www.hikunpeng.com/zh/developer/techArticles)

自动化部署 / 扩容openGauss —— Ansible for openGauss

自动化部署 / 扩容openGauss —— Ansible for openGauss

自动化部署&扩容

发表于 2023/11/24

0

大家好，今天我们为大家推荐一套基于 Ansible 开发的，自动化部署及扩容 openGauss 的脚本工具：Ansible for openGauss（以下简称 AFO）。

通过AFO，我们只需简单修改一些配置文件，即可快速部署多种架构模式的 openGauss，以及对已有架构进行自动化扩容。下面我们就请这套工具的贡献者，上海联空网络科技有限公司（以下简称“联空网络”）的李海滨，给大家讲解它的设计理念和优点。

## 开发背景

Hi，大家好，我是来自联空网络安全品质中心的运维工程师，李海滨。我是一名 Ansible 爱好者，致力于将运维工作自动化。曾获得 FISCO BCOS 区块链开源社区 2021 年度 MVP 称号。

联空网络成立于 2015 年 8 月，专注于提供医疗+互联网一站式技术和运营解决方案，帮助医疗用户更加轻松的拥抱互联网。目前，公司已经与 800+ 医疗机构用户形成合作关系，其中，百强医院合作 25+，三级医院 300+，上海地区客户覆盖率超 70%，覆盖全国 23 个省市。

当前自主创新、信息技术应用创新等需求日益增长，医疗行业用户十分关注软硬件产品解决方案的自主创新情况，为此联空网络积极响应，投入专业团队，对国内相关软硬件产品适配做可行性研判。

经过对国内数据库的深入了解，我们接触到了海量数据库，并获悉其是基于openGauss开源的商业发行版产品。openGauss 作为一款开源的关系型数据库管理系统，具有高性能、高可用性以及卓越的扩展能力。于是我们开始构想可以为研发团队提供 openGauss 环境，让其可以基于 openGauss 做代码适配。当客户选择使用海量数据库时，我们的软件就可以直接匹配。

为了方便反复部署测试，我拿出了擅长的 Ansible，为 openGauss 写一套自动化部署工具，以简化其安装、配置和管理过程。

完成初版开发后，我与 openGauss 社区取得了联系，表达了希望可以把这套工具贡献给社区，以开源回馈开源的想法。

感谢社区运营梅相如同学的大力支持，很快为我开设了代码仓库。又找来 openGauss 的开发工程师“行尘”同学，解答我在开发过程中遇到的一些问题。在此也很感谢“行尘”同学不厌其烦地回答，你们给予了我很大的帮助！

## 解决部署痛点

如果你有按照官方文档部署一套 openGauss 的经历，你会发现不论是单点还是集群，均需做不少的前期工作。例如要根据 CPU 和操作系统，下载对应版本的安装包。又需要根据不同的 Linux 操作系统，做一些额外配置。手工部署在这里不仅低效，而且容易有错漏。如果是多节点的部署，手工部署的弱势会被进一步放大。

我开发这套 Ansible 脚本的目标，就是尽可能地覆盖部署前、部署中和部署后的场景，并且把手工部署过程中遇到的一些坑，也通过自动化来解决掉。降低 openGauss 的部署门槛，推动 openGauss 的普及。

例如在 openEuler 20.03 系统里部署 openGauss 5.0，你会遇到 readline-devel 这个依赖包的版本是 8，而 openGauss 5.0 需要的是 libreadline.so.7，导致安装过程失败。我查找到解决方法后，加入到部署流程中，自动帮大家把这个坑给填了。代码在 roles\opengauss\tasks\os\openEuler.yml 里：

```
# openGauss 5.0.0 依赖 readline 7
```

在给未部署 CM 的架构做扩容时，需要在主备之间做一次 switchover 后才能安装 CM。这些我们也加入到自动化流程中，免除了大家遇到这些问题还要花时间查找解决方法的麻烦。代码在 roles\opengauss\tasks\deploy\cluster_manager.yml 里：

```
- name: Switchover on a standby node
```

部署过程中，有需要在 root 和 omm 账号之间多次切换的操作，Ansible 里用 become_user 就可以轻松自动切换。这些都是手工部署过程中的痛点。

## 已实现的功能

总结下来，目前我们这个工具能实现以下功能：

a. 提供一个专属的 ansible-docker 子项目，只要控制机可运行 docker，即可运行一个 Ansible 容器，适配 AFO 的执行。对于不熟悉 Ansible 的同学非常友好。

b. 自动适配 CPU 架构（条件受限，目前仅测试了 X86 架构）和操作系统（已支持 CentOS 和 openEuler 20.03），自动下载对应的 openGauss 安装包，自动对操作系统做适配修改。

c. 实现从单节点到多节点的多种架构模式的一次性部署。

d. 使用本工具部署的单点或集群，还能通过添加服务器，再次运行脚本，实现平滑扩容。实测可直接从单主扩容到 1 主 2 备 2 级联。

e. 允许用户自定义一些变量，例如指定部署目录，指定 openGauss 版本（5.0 或以上），指定 sysctl 的参数配置。

f. 免除手工部署中的问答环节，自动生成相关密码，自动填写。最后生成部署报告。

## 效率是如何提升的？

以配置网卡 MTU 为例，3 台服务器的执行时间如下：

```
Saturday 18 November 2023 20:54:50 +0800 (0:00:06.777) 0:01:03.288 ***** 
```

Ansible 在 0.517 秒的时间内，完成了 3 台服务器的网卡 MTU 修改。因为，它是并行操作的。

以生成 cluster_config.xml 为例

3 台服务器的节点，手工写 cluster_config.xml，需要花费多少时间，各位可以自己计时看看。

而我们利用 Ansible 的模板功能，可以在 1 秒内生成该文件，编排非常清晰，一目了然。

假设服务器的分组配置 inventories/opengauss/hosts.ini 内容如下

```
[opengauss_primary]
```

我们甚至考虑到了在机房里使用小尺寸显示器查看 cluster_config.xml 的场景，对 xml 做了换行处理，避免出现单行过长的问题。

## 自动化思路

AFO 主要的工作流如下：錒对部署环境的信息进行采集。

将用户自定义的变量和脚本默认变量合并，优先使用自定义变量。

检查是否已部署 openGauss，如无，进入初次部署流程。

如果已部署 openGauss，则检查用户是否有添加新节点，进入节点扩容流程。

节点扩容流程里又分 2 步，先扩容备机节点，再扩容级联节点。因为级联节点只连接备机。

如果集群节点数量为 3 或以上，且未部署 CM，则进入 CM 部署流程。

最后，检查确认集群已正常运行，生成部署报告。

## 结果展示

以 3 台 VirtualBox 虚拟机为例，统一 8U+16GB 配置，都在 1 块物理 SATA 盘上读写。另外，虚拟机都已经提前安装好相关依赖包，openGauss 安装包也已经下载到本地。排除网络下载速度的不因素。单节点，4 分 40 秒（下图右下角）完成部署。

1 主 1 备，7 分 48 秒（下图右下角）完成部署。

从单点数据库，扩容为 1 主 1 备 1 级联，耗时 23 分（下图右下角）完成部署。

扩容模式需要额外的流程，因此耗时比直接部署 3 节点的要多。

最后生成部署报告

## 项目代码

这套工具已经收录在 openGauss 社区的官方代码库，欢迎大家前往下载试用，并向我们多多提出宝贵意见。

代码地址：https://gitcode.com/opengauss/ansible-for-opengauss [了解详情](https://gitcode.com/opengauss/ansible-for-opengauss)

使用前，请仔细阅读：https://gitcode.com/opengauss/ansible-for-opengauss/blob/master/docs/01-ansible-in-docker.md [了解详情](https://gitcode.com/opengauss/ansible-for-opengauss/blob/master/docs/01-ansible-in-docker.md)开启自动化部署的旅程。

## 参与贡献

欢迎对 Ansible 熟悉的同学，加入我们，改进完善我们的项目。更欢迎大家提交 issue，提出宝贵的意见和建议。也欢迎可以提供测试资源的同学，与我联系。目前我们需要 ARM 平台的测试环境。

## TODO

增加 openGauss 相关生态软件的自动化部署，例如图形化管理，监控管理。

增加 ARM 平台的适配。

增加数据库定时备份的配置流程。

增加对 1 主 1 备架构的主备自动切换配置。

有限度地提供 gs_guc 自动化配置，方便运维人员对数据库参数做修改更新。

更多的想法，由你们来补充。

## 关于联空网络

联空网络核心产品“联空医加”可以快速构建医疗机构专属的新型患者服务和运营系统，一方面帮助医疗机构将实体空间服务完整数字化，实现“云上医院”的整体建设：整合预约、导诊、客服等智慧服务的三大服务主入口，应用数字孪生技术，实现空间智能化管理、空间动线设计优化、监控与调整、协同工作与共享空间的空间效率工具，通过整合线上线下、跨学科以及跨机构的医疗服务，构建新型医疗服务网络的组织效率工具；另一方面，我们与水平顶尖的医疗机构进行合作，探索每一种专科疾病的最优全周期全程诊疗管理方案，用数字化解决疾病全程管理和疗效干预问题。目前，公司已经与 800+ 医疗机构用户形成合作关系，其中，百强医院合作 25+，三级医院 300+，上海地区客户覆盖率超 70%，覆盖全国 23 个省市。未来，我们也将继续投入更多资源，为 openGauss 等开源技术贡献力量，同时为医疗行业提供更多创新、高效的解决方案，推动互联网医疗的进一步发展。

本页内容
