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

大家好,今天我们为大家推荐一套基于 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# openEuler 20.03 只有 readline 8- name: Create soft linkansible.builtin.file:src: "/lib64/libreadline.so.8"dest: "/lib64/libreadline.so.7"state: link

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

- name: Switchover on a standby nodeansible.builtin.command:gs_ctl switchover -D {{ og_data_path }}/dnchanged_when: falseloop: "{{ dn_nodes | select('search', 'Standby') }}"loop_control:loop_var: nodeextended: truewhen: "ansible_loop.index == 1"delegate_to: "{{ hostvars[node]['node_ip'] }}"
- name: Switchover back to primary nodeansible.builtin.command:gs_ctl switchover -D {{ og_data_path }}/dnchanged_when: falseloop: "{{ dn_nodes | select('search', 'Primary') }}"loop_control:loop_var: nodedelegate_to: "{{ hostvars[node]['node_ip'] }}"
- name: Start any stopped nodesansible.builtin.command:gs_om -t startchanged_when: false

部署过程中,有需要在 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 ***** 
TASK [opengauss : Config MTU in /etc/sysconfig/network-scripts/ifcfg-enp0s8] *****************************************************************************************************************changed: [192.168.56.11]changed: [192.168.56.14]changed: [192.168.56.15]Saturday 18 November 2023 20:54:50 +0800 (0:00:00.517) 0:01:03.807 *****

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

以生成 cluster_config.xml 为例

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

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

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

[opengauss_primary]192.168.56.11
; 备机,可设置若干个或留空。[opengauss_standby]192.168.56.15
; 级联机,可设置若干个或留空。前提是 opengauss_standby 组不为空。[opengauss_cascade]192.168.56.14
; 以上 3 个分组的合并组,勿动。[opengauss:children]opengauss_primaryopengauss_standbyopengauss_cascade
; 备节点分组,总数不可大于 8。[opengauss_replicas:children]opengauss_standbyopengauss_cascade
; 机器的 SSH 信息,请根据你的实际情况修改。[opengauss:vars]; ssh 用户名,如果不是 root 用户,请确保它有 sudo 权限。ansible_ssh_user=vagrant; ssh 密码ansible_ssh_pass=vagrant; ssh 端口ansible_ssh_port=22生成以下配置内容,仅需 1 秒钟。
<?xml version="1.0" encoding="utf-8"?><ROOT><CLUSTER><PARAM name="clusterName" value="openGauss" /><PARAM name="gaussdbAppPath" value="/opt/openGauss/install/app" /><PARAM name="gaussdbLogPath" value="/var/log" /><PARAM name="tmpMppdbPath" value="/opt/openGauss/tmp"/><PARAM name="gaussdbToolPath" value="/opt/openGauss/install/om" /><PARAM name="corePath" value="/opt/openGauss/corefile"/><PARAM name="nodeNames" value="og3232249867,og3232249870,og3232249871"/><PARAM name="backIp1s" value="192.168.56.11,192.168.56.14,192.168.56.15"/></CLUSTER>
<DEVICELIST>
<!-- CLUSTER PRIMARY --><DEVICE sn="og3232249867"><PARAM name="name" value="og3232249867"/><PARAM name="instanceId" value="3232249867"/><PARAM name="azName" value="AZ1"/><PARAM name="azPriority" value="1"/><PARAM name="backIp1" value="192.168.56.11"/><PARAM name="sshIp1" value="192.168.56.11"/>
<!-- Data Node --><PARAM name="dataNum" value="1"/><PARAM name="dataPortBase" value="15400"/><PARAM name="dataNode1" value="/opt/openGauss/data/dn,og3232249870,/opt/openGauss/data/dn,og3232249871,/opt/openGauss/data/dn"/><PARAM name="dataNode1_syncNum" value="0"/>
<!-- CLUSTER MANAGER --><PARAM name="cmsNum" value="1"/><PARAM name="cmServerPortBase" value="15300"/><PARAM name="cmServerlevel" value="1"/><PARAM name="cmDir" value="/opt/openGauss/data/cm"/><PARAM name="cmServerRelation" value="og3232249867,og3232249870,og3232249871"/><PARAM name="cmServerListenIp1" value="192.168.56.11,192.168.56.14,192.168.56.15"/><PARAM name="cmServerHaIp1" value="192.168.56.11,192.168.56.14,192.168.56.15"/></DEVICE><DEVICE sn="og3232249870"><PARAM name="name" value="og3232249870"/><PARAM name="azName" value="AZ1"/><PARAM name="azPriority" value="1"/><PARAM name="backIp1" value="192.168.56.14"/><PARAM name="sshIp1" value="192.168.56.14"/>
<!-- CLUSTER MANAGER --><PARAM name="cmServerPortStandby" value="15800"/><PARAM name="cmDir" value="/opt/openGauss/data/cm"/>
<!-- CASCADE ROLE --><PARAM name="cascadeRole" value="on"/></DEVICE>
<DEVICE sn="og3232249871"><PARAM name="name" value="og3232249871"/><PARAM name="azName" value="AZ1"/><PARAM name="azPriority" value="1"/><PARAM name="backIp1" value="192.168.56.15"/><PARAM name="sshIp1" value="192.168.56.15"/>
<!-- CLUSTER MANAGER --><PARAM name="cmServerPortStandby" value="15800"/><PARAM name="cmDir" value="/opt/openGauss/data/cm"/></DEVICE></DEVICELIST></ROOT>

我们甚至考虑到了在机房里使用小尺寸显示器查看 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 社区的官方代码库,欢迎大家前往下载试用,并向我们多多提出宝贵意见。

代码地址:ansible-for-openGauss: ansible for openGauss

使用前,请仔细阅读:docs/01-ansible-in-docker.md · openGauss/ansible-for-openGauss - Gitee.com 开启自动化部署的旅程。

参与贡献

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

TODO

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

增加 ARM 平台的适配。

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

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

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

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

关于联空网络

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

转自鲲鹏社区

大家好,今天我们为大家推荐一套基于 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# openEuler 20.03 只有 readline 8- name: Create soft linkansible.builtin.file:src: "/lib64/libreadline.so.8"dest: "/lib64/libreadline.so.7"state: link

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

- name: Switchover on a standby nodeansible.builtin.command:gs_ctl switchover -D {{ og_data_path }}/dnchanged_when: falseloop: "{{ dn_nodes | select('search', 'Standby') }}"loop_control:loop_var: nodeextended: truewhen: "ansible_loop.index == 1"delegate_to: "{{ hostvars[node]['node_ip'] }}"
- name: Switchover back to primary nodeansible.builtin.command:gs_ctl switchover -D {{ og_data_path }}/dnchanged_when: falseloop: "{{ dn_nodes | select('search', 'Primary') }}"loop_control:loop_var: nodedelegate_to: "{{ hostvars[node]['node_ip'] }}"
- name: Start any stopped nodesansible.builtin.command:gs_om -t startchanged_when: false

部署过程中,有需要在 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 ***** 
TASK [opengauss : Config MTU in /etc/sysconfig/network-scripts/ifcfg-enp0s8] *****************************************************************************************************************changed: [192.168.56.11]changed: [192.168.56.14]changed: [192.168.56.15]Saturday 18 November 2023 20:54:50 +0800 (0:00:00.517) 0:01:03.807 *****

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

以生成 cluster_config.xml 为例

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

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

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

[opengauss_primary]192.168.56.11
; 备机,可设置若干个或留空。[opengauss_standby]192.168.56.15
; 级联机,可设置若干个或留空。前提是 opengauss_standby 组不为空。[opengauss_cascade]192.168.56.14
; 以上 3 个分组的合并组,勿动。[opengauss:children]opengauss_primaryopengauss_standbyopengauss_cascade
; 备节点分组,总数不可大于 8。[opengauss_replicas:children]opengauss_standbyopengauss_cascade
; 机器的 SSH 信息,请根据你的实际情况修改。[opengauss:vars]; ssh 用户名,如果不是 root 用户,请确保它有 sudo 权限。ansible_ssh_user=vagrant; ssh 密码ansible_ssh_pass=vagrant; ssh 端口ansible_ssh_port=22生成以下配置内容,仅需 1 秒钟。
<?xml version="1.0" encoding="utf-8"?><ROOT><CLUSTER><PARAM name="clusterName" value="openGauss" /><PARAM name="gaussdbAppPath" value="/opt/openGauss/install/app" /><PARAM name="gaussdbLogPath" value="/var/log" /><PARAM name="tmpMppdbPath" value="/opt/openGauss/tmp"/><PARAM name="gaussdbToolPath" value="/opt/openGauss/install/om" /><PARAM name="corePath" value="/opt/openGauss/corefile"/><PARAM name="nodeNames" value="og3232249867,og3232249870,og3232249871"/><PARAM name="backIp1s" value="192.168.56.11,192.168.56.14,192.168.56.15"/></CLUSTER>
<DEVICELIST>
<!-- CLUSTER PRIMARY --><DEVICE sn="og3232249867"><PARAM name="name" value="og3232249867"/><PARAM name="instanceId" value="3232249867"/><PARAM name="azName" value="AZ1"/><PARAM name="azPriority" value="1"/><PARAM name="backIp1" value="192.168.56.11"/><PARAM name="sshIp1" value="192.168.56.11"/>
<!-- Data Node --><PARAM name="dataNum" value="1"/><PARAM name="dataPortBase" value="15400"/><PARAM name="dataNode1" value="/opt/openGauss/data/dn,og3232249870,/opt/openGauss/data/dn,og3232249871,/opt/openGauss/data/dn"/><PARAM name="dataNode1_syncNum" value="0"/>
<!-- CLUSTER MANAGER --><PARAM name="cmsNum" value="1"/><PARAM name="cmServerPortBase" value="15300"/><PARAM name="cmServerlevel" value="1"/><PARAM name="cmDir" value="/opt/openGauss/data/cm"/><PARAM name="cmServerRelation" value="og3232249867,og3232249870,og3232249871"/><PARAM name="cmServerListenIp1" value="192.168.56.11,192.168.56.14,192.168.56.15"/><PARAM name="cmServerHaIp1" value="192.168.56.11,192.168.56.14,192.168.56.15"/></DEVICE><DEVICE sn="og3232249870"><PARAM name="name" value="og3232249870"/><PARAM name="azName" value="AZ1"/><PARAM name="azPriority" value="1"/><PARAM name="backIp1" value="192.168.56.14"/><PARAM name="sshIp1" value="192.168.56.14"/>
<!-- CLUSTER MANAGER --><PARAM name="cmServerPortStandby" value="15800"/><PARAM name="cmDir" value="/opt/openGauss/data/cm"/>
<!-- CASCADE ROLE --><PARAM name="cascadeRole" value="on"/></DEVICE>
<DEVICE sn="og3232249871"><PARAM name="name" value="og3232249871"/><PARAM name="azName" value="AZ1"/><PARAM name="azPriority" value="1"/><PARAM name="backIp1" value="192.168.56.15"/><PARAM name="sshIp1" value="192.168.56.15"/>
<!-- CLUSTER MANAGER --><PARAM name="cmServerPortStandby" value="15800"/><PARAM name="cmDir" value="/opt/openGauss/data/cm"/></DEVICE></DEVICELIST></ROOT>

我们甚至考虑到了在机房里使用小尺寸显示器查看 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://gitee.com/opengauss/ansible-for-opengauss

使用前,请仔细阅读:https://gitee.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 等开源技术贡献力量,同时为医疗行业提供更多创新、高效的解决方案,推动互联网医疗的进一步发展。

转自鲲鹏社区

自动化部署 / 扩容openGauss —— Ansible for openGauss-技术干货-鲲鹏社区本文主要向大家介绍一套基于 Ansible 开发的,自动化部署及扩容 openGauss 的脚本工具:Ansible for openGauss(简称 AFO)。icon-default.png?t=N7T8https://www.hikunpeng.com/zh/developer/techArticles/20231124-10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动化运维工具——ansible是一款开源的IT自动化工具,广泛应用于软件部署、配置管理和任务协同等领域。它的最大特点是简单易用、功能强大且跨平台。 首先,ansible具有简单易用的特点。它使用简单的YAML语言作为配置文件,无需编写复杂的脚本。用户只需要简单地定义主机和操作即可完成任务的执行。这使得即便是非开发人员,也能轻松上手使用ansible进行自动化管理。 其次,ansible功能强大。它支持广泛的操作系统、云平台和网络设备,并提供了丰富的模块化功能。通过在任务中使用ansible的模块,我们可以实现系统配置、软件安装、文件传输等各种常见操作。此外,ansible不仅支持并发执行任务,还能够将任务分组执行,并提供了强大的变量和条件控制功能。 再次,ansible跨平台。无论是在Linux、Unix还是Windows系统上,ansible都能够良好地运行。此外,它还支持云平台,如AWS、Azure等,以及网络设备,如Cisco、Juniper等。这使得ansible成为一个非常灵活的自动化运维工具,能够满足各种不同环境和需求的自动化管理。 最后,ansible还具有良好的社区支持。ansible拥有庞大的用户社区和活跃的开发者社区,有大量的文档、示例和插件可供参考和使用。这使得我们在使用ansible时能够获得快速解答和支持,同时也能够从社区中学习到更多的技巧和经验。 总而言之,ansible是一款简单易用、功能强大且跨平台的自动化运维工具。它在软件部署、配置管理和任务协同等方面具有广泛的应用,并且得到了良好的社区支持。无论是企业还是个人,都可以通过ansible来提高工作效率和自动化管理水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值