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

前言

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

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

开发背景

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

0921c00074be0b5fe6a03f642774220c.jpeg

联空网络成立于 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,导致安装过程失败。我查找到解决方法后,加入到部署流程中,自动帮大家把这个坑给填了。

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

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

已实现的功能

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

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

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

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

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

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

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

效率是如何提升的?

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

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

以生成 cluster_config.xml 为例

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

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

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

自动化思路

AFO 主要的工作流如下:

1.对部署环境的信息进行采集。

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

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

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

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

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

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

结果展示

以 3 台VirtualBox虚拟机为例,统一 8U+16GB 配置,都在 1 块物理 SATA 盘上读写。

另外,虚拟机都已经提前安装好相关依赖包,openGauss安装包也已经下载到本地。排除网络下载速度的不确定因素。

单节点,4 分 40 秒(下图右下角)完成部署。

c66b90016d09e13aa0f520065fbd70f7.jpeg

1 主 1 备,7 分 48 秒(下图右下角)完成部署。

040978541754996999c48dca23f51557.jpeg

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

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

64b6ea75afa3c9a8d532ab37197ce152.jpeg

最后生成部署报告

f29c592ca8c18120d797af02118344db.jpeg

项目代码

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

代码地址:https://gitee.com/opengauss/ansible-for-opengauss

参与贡献

1.欢迎对Ansible熟悉的同学,加入我们,改进完善我们的项目。

2.更欢迎大家提交 issue,提出宝贵的意见和建议。

3.也欢迎可以提供测试资源的同学,与我联系。目前我们需要 ARM 平台的测试环境。

TODO

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

2.增加 ARM 平台的适配。

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/189024.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript基础—运算符、表达式和语句、分支语句、循环语句、综合案例-ATM存取款机

版本说明 当前版本号[20231125]。 版本修改说明20231125初版 目录 文章目录 版本说明目录JavaScript 基础 - 第2天运算符算术运算符赋值运算符自增/自减运算符比较运算符逻辑运算符运算符优先级 语句表达式和语句分支语句if 分支语句if双分支语句if 多分支语句三元运算符&am…

人工智能时代的内容写作

内容不再只是王道,正如俗话所说:它是一种流动的货币,推动了巨大的在线信息和影响力经济。 每个品牌都是一个故事,通过其服务和商品讲述自己。尽管如此,大多数客户还是会通过您的在线内容最了解您。 但随着我们进入人…

鸿蒙HarmonyOS 编辑器 下载 安装

好 各位 之前的文章 注册并实名认证华为开发者账号 我们基实名注册了华为的开发者账号 我们可以访问官网 https://developer.harmonyos.com/cn/develop/deveco-studio 在这里 直接就有我们编辑器的下载按钮 我们直接点击立即下载 这里 我们根据自己的系统选择要下载的系统 例…

Linux操作系统之apt常用命令记录

文章目录 apt 命令apt 语法apt 常用命令列出所有可更新的软件清单命令升级软件包列出可更新的软件包及版本信息升级软件包,升级前先删除需要更新软件包安装指定的软件命令:安装多个软件包:更新指定的软件命令显示软件包具体信息,例如&#xf…

MYSQL基础之【创建数据表,删除数据表】

文章目录 前言MySQL 创建数据表通过命令提示符创建表使用PHP脚本创建数据表 MySQL 删除数据表在命令提示窗口中删除数据表使用PHP脚本删除数据表 后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:Mysql 🐱‍👓博主…

搜索 C. Tic-tac-toe

Problem - C - Codeforces 思路:搜索,判断合法性。从起始态用搜索进行模拟,这样可以避免后面判断合法性这一繁琐的步骤。用一个map进行映射当前态及对应的结果。剪枝:如果当前字符串已经被搜索过,则直接跳过去。 代码…

如何在3dMax中根据AutoCAD地形规划文件对地形进行建模?

在3dMax中根据Autocad地形规划文件对地形进行建模的方法 直入主题,要根据包含地形图的DWG (Autocad) 文件进行地形建模,方法步骤如下: 1.运行3dmax软件,点击“文件(File)->导入(Import&…

【RTP】RTPSenderAudio::SendAudio

RTPSenderAudio 可以将一个opus帧封装为rtp包进行发送,以下是其过程:RTPSenderAudio::SendAudio :只需要提供payload部分 创建RtpPacketToSend 并写入各个部分 填充payload部分 sender 本身分配全session唯一的twcc序号 if (!rtp_sender_->

pandas根据列正逆序排序

题目:根据 buy_quantity 列进行排名,相同值分配相同的最低排名。 import pandas as pd# 创建一个示例 DataFrame data {item_id: [1, 2, 3, 4, 5, 6, 7], buy_quantity: [1, 2, 2, 3, 3, 4, 5]} df pd.DataFrame(data)# 使用 rank() 函数为 buy_quant…

NX二次开发UF_CURVE_ask_int_parms 函数介绍

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_int_parms Defined in: uf_curve.h int UF_CURVE_ask_int_parms(tag_t int_curve_object, int * num_objects_set_1, tag_t * * object_set_1, int * num_objects_set_…

2. 寄存器

锁存器,用于存储1位的电路 只有当 可写位(write enable)开启,才会把输入写到输出,同时保存输出 使用锁存器 带时钟的锁存器 带时钟带可写控制的完整版锁存器 下面的时钟使用按钮来代替, 只有按钮为1时,相连的电路才工作时钟的作用在于协同所有电路共同工作,也是一切电路自动化…

android shape绘制半圆

<?xml version"1.0" encoding"utf-8"?><shape xmlns:android"http://schemas.android.com/apk/res/android"android:shape"rectangle"><sizeandroid:width"20dp"android:height"10dp" /><…

代码随想录算法训练营第五十五天|583. 两个字符串的删除操作 72. 编辑距离

文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;代码随想录B站账号 状态&#xff1a;看了视频题解和文章解析后做出来了 583. 两个字符串的删除操作 class Solution:def minDistance(self, word1: str, word2: str) -> int:dp [[0] * (len(word2)1) for _ in range(…

Node.js下载安装及配置镜像源

一、进入官网地址下载安装包 https://nodejs.org/dist 选择对应你系统的Node.js版本 这里我选择的是Windows系统、64位 二、安装程序 &#xff08;1&#xff09;下载完成后&#xff0c;双击安装包&#xff0c;开始安装Node.js (2)直接点【Next】按钮&#xff0c;此处可根据…

数字逻辑电路基础-时序逻辑电路之移位寄存器

文章目录 一、移位寄存器定义二、verilog源码三、仿真结果 一、移位寄存器定义 移位寄存器定义 A shift register is a type of digital circuit using a cascade of flip flops where the output of one flip-flop is connected to the input of the next. 移位寄存器是一种将…

从零开始搭建博客网站-----源代码试部署

拿到了该项目的源码&#xff0c;先尝试是否可以成功部署&#xff0c;详细的部署视频地址 后端项目部署 先把maven配置好&#xff0c;都改成自己下载的maven地址 文件编码改成utf-8&#xff0c;防止配置文件乱码 如果maven是刚下的&#xff0c;要改一下下载包的地址&#xff0…

NoSQL基础知识小结

NoSQL 基础知识 什么是 NoSQL? NoSQL&#xff08;Not Only SQL 的缩写&#xff09;泛指非关系型的数据库&#xff0c;主要针对的是键值、文档以及图形类型数据存储。 NoSQL 数据库天生支持分布式&#xff0c;数据冗余和数据分片等特性&#xff0c;旨在提供可扩展的高可用高…

MidJourney笔记(3)-Prompts

MidJourney的Prompts介绍 MidJourney的Prompts是MidJourney的核心之一,这也是我们后续使用MidJourney过程中最重要的工作内容,根据生成的图片,不断的优化我们的Prompts内容。 那Prompts的中文意思是提示的意思。 Prompts的提示语有很多,最基础的用法就是: /imagine prompt…

基于python+TensorFlow+Django算法模型的车辆车型识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介简介技术栈主要模块1. 数据预处理2. 模型构建3. 模型训练4. 模型集成5. 用户界面 系统工作流程未来改进计划 二、功能三、系统四. 总结 一项目简介 # 车辆车…

⑨【Stream】Redis流是什么?怎么用?: Stream [使用手册]

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ ⑨Redis Stream基本操作命令汇总 一、Redis流 …