当前位置: 首页 > news >正文

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

前言

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

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

开发背景

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

51d1f609b8e13d149012672c1c9da60d.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 秒(下图右下角)完成部署。

8f8fa445c45a3b8e57c67454d935d1f1.jpeg

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

17a8124e5cf7863fd8974030829350b9.jpeg

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

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

954b4c12591436b5dac784d77680e252.jpeg

最后生成部署报告

917c5badac08c42d6a1605f198cca344.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.更多的想法,由你们来补充。

相关文章:

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

前言 大家好,今天我们为大家推荐一套基于Ansible开发的,自动化部署及扩容openGauss的脚本工具:Ansible for openGauss(以下简称 AFO)。 通过AFO,我们只需简单修改一些配置文件,即可快速部署多种…...

C#多线程创建及线程的同步

需求:有时为了能分时的调用多个任务运行,因此需要考虑多线程的编程方式 操作步骤如下: 1)创建线程并开启线程 Thread thread0 new Thread(() > DoWork0(0)); thread0.Start(); 2)编写线程函数 static void Do…...

MOM系统功能清单

什么是MOM系统? MOM系统是制造运营管理(Manufacturing Operation Management)的缩写。它是指通过协调管理企业的人员、设备、物料和能源等资源,把原材料或零件转化为产品的活动。MOM系统集成了生产计划、库存管理、生产调度、质量…...

ARM Cortex-M核的内核态,用户态

首先,用户态和内核态是从操作系统层面上来划分的,如果没有操作系统,我可以直接运行在特权模式下,并使用特权指令。在这种情况下,我将负责管理和控制系统资源,执行关键操作,以及确保系统的安全性…...

flex布局实战之自动填充剩余

案例目标 文字部分自适应并且居中 图中是一个弹窗&#xff0c;我现在使用flex的布局来实现&#xff0c;标题和关闭按钮。因为是uni-app,所以标签是view 。你可以自行替换为 代码 <view class"popup-box"><view class"title"><view class&…...

【LeetCode】203. 移除链表元素

203. 移除链表元素 难度&#xff1a;简单 题目 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff…...

IDEA2023版本创建Sping项目只能勾选17和21,却无法使用Java8?(已解决)

方案&#xff1a;替换创建项目的源 我们只知道IDEA页面创建Spring项目&#xff0c;其实是访问spring initializr去创建项目。故我们可以通过阿里云国服去间接创建Spring项目。将https://start.spring.io/或者http://start.springboot.io/替换为 https://start.aliyun.com/...

Vue生命周期详解

以下是 Vue 生命周期钩子函数分别做了什么事情的详细说明 详细说明 beforeCreate&#xff08;创建前&#xff09;&#xff1a;在实例初始化之前调用。此时&#xff0c;实例的数据观测 (data observer)、属性和方法的运算&#xff0c;以及事件配置等内部设置都已完成&#xff0…...

政务大数据与资源平台建设解决方案:PPT全文75页,附下载

关键词&#xff1a;智慧政务解决方案&#xff0c;大数据解决方案&#xff0c;数据中心解决方案&#xff0c;数据治理解决方案 一、政务大数据与资源平台建设背景 1、政务大数据已成为智慧城市建设的必要基础 为响应国家不断加快5G基建、大数据、人工智能等新型基础设施建设布…...

环境监测传感器守护我们的地球

随着人类活动的不断增加&#xff0c;环境问题日益凸显。为了更好地保护我们的地球&#xff0c;环境监测成为了一项非常重要的任务。而在这个领域&#xff0c;传感器技术发挥着至关重要的作用。今天&#xff0c;我们就来聊聊WX-WQX12 环境监测传感器。 环境监测传感器是一种能够…...

PHP 循环控制 学习资料

PHP 循环控制 在 PHP 中&#xff0c;循环控制语句用于控制循环的执行流程&#xff0c;包括跳出循环、跳过当前迭代等操作。以下是 PHP 中常用的循环控制语句的介绍和示例&#xff1a; break 语句 break 语句用于立即跳出当前循环&#xff0c;并继续执行循环之后的代码。 示…...

Unity 关于生命周期函数的一些认识

Unity 生命周期函数主要有以下一些&#xff1a; Awake(): 在脚本被加载时调用。用于初始化对象的状态和引用。 OnEnable(): 在脚本组件被启用时调用。在脚本组件被激活时执行一次&#xff0c;以及在脚本组件被重新激活时执行。 Reset(): 在脚本组件被重置时调用。用于重置脚本…...

大数据学习(26)-spark核心总结

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…...

EC 404 information economics

EC 404 information economics WeChat: zh6-86...

基于单片机的烟雾检测报警装置(论文+源码)

1.系统设计 &#xff08;1&#xff09;利用传感器实现环境中温度、烟雾浓度的实时检测&#xff1b; &#xff08;2&#xff09;系统检测的各项数据信息通过液晶模块进行显示&#xff0c;提高设计可视化&#xff1b; &#xff08;3&#xff09;系统可以根据实际情况利用按键模…...

C语言面试之旅:掌握基础,探索深度(面试实战之c语言关键词中篇)

劝人的话就像清晨的闹钟&#xff0c;只对别人有用&#xff0c;却永远叫不醒自己。 ----小新 一.预处理指令 &#xff08;1&#xff09;#define & typedef #define是C语言中定义的语法&#xff0c;是预处理指令&#xff0c;在预处理时进行简单而机械的字符串替换&…...

项目监控:项目跟踪和控制的工具和步骤

项目管理不仅仅是分配和审查任务&#xff0c;还包括平衡团队成员的工作量、创建预测和避免障碍的工作流程。整个过程涉及许多步骤&#xff0c;因此&#xff0c;项目监控成为了成功业务活动的关键之一&#xff0c;是项目经理确保与团队共同实施的计划顺利进行的方式。 项目监控为…...

GOAT:多模态、终身学习、平台无关的机器人通用导航系统

机器人应用中涉及到的核心技术包括&#xff1a;环境感知与理解、实时定位与建图、路径规划、行为控制等。GOAT通过多模态结合终生学习的方式让你的机器人可以在未知环境中搜索和导航到任何物体。小白也可以零门槛上手。 项目地址&#xff1a;https://theophilegervet.github.i…...

[webpack] webpack 插件大全

clean-webpack-plugin 一个webpack插件&#xff0c;用来删除/清理你的构建文件夹 html-webpack-plugin 该插件将为你生成一个 HTML5 文件&#xff0c; 在 body 中使用 script 标签引入你所有 webpack 生成的 bundle js 文件 zip-webpack-plugin 该插件用来压缩所有文件成一…...

UE4/UE5 雾

雾 UE4/UE5 雾平面雾材质效果图&#xff1a; 3D雾区材质效果图&#xff1a; UE4/UE5 雾 平面雾 做好将材质放在Plane上就行 材质 效果图&#xff1a; 3D雾区 做好将材质放在3D模型上就行 材质 效果图&#xff1a;...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...