【我和 openGauss 的故事】记一次基于在银河麒麟系统上适配 openGauss 进阶之旅
【我和 openGauss 的故事】记一次基于在银河麒麟系统上适配 openGauss 进阶之旅
每天译点晓知识 2023-07-14 18:50 发表于 openGauss 公众号
【我和openGauss的故事】记一次基于在银河麒麟系统上适配openGauss进阶之旅 (qq.com)
开篇
1、数据库架构
百度百科:openGauss 是一款全面友好开放,携手伙伴共同打造的企业级开源关系型数据库。openGauss 采用木兰宽松许可证 v2 发行,提供面向多核架构的极致性能、全链路的业务、数据安全、基于 AI 的调优和高效运维的能力。openGauss 深度融合华为在数据库领域多年的研发经验,结合企业级场景需求,持续构建竞争力特性。同时,openGauss 也是一个开源、免费的数据库平台,鼓励社区贡献、合作。
2、核心特性
高性能
提供了面向多核架构的并发控制技术结合鲲鹏硬件优化,在两路鲲鹏下 TPCC Benchmark 达成性能 150 万 tpmc。
针对当前硬件多核 NUMA 的架构趋势,在内核关键结构上采用了 Numa-Aware 的数据结构。
提供 Sql-bypass 智能快速引擎技术。
针对频繁更新场景,提供 Ustore 存储引擎。
高可用
支持主备同步,异步以及级联备机多种部署模式。
数据页 CRC 校验,损坏数据页通过备机自动修复。
备机并行恢复,10 秒内可升主提供服务。
提供基于 Paxos 分布式一致性协议的日志复制及选主框架。
高安全
支持全密态计算,访问控制、加密认证、数据库审计、动态数据脱敏等安全特性,提供全方位端到端的数据安全保护。
易运维
基于 AI 的智能参数调优和索引推荐,提供 AI 自动参数推荐。
慢 SQL 诊断,多维性能自监控视图,实时掌控系统的性能表现。
提供在线自学习的 SQL 时间预测。
全开放
采用木兰宽松许可证协议,允许对代码自由修改,使用,引用。
提供伙伴认证,培训体系和高校课程。
写在前面的话,每一篇摘文都以实际案例场景出发,抽出空余时间记录每一次 mark 历程,在不一样的业务实际场景下,针对项目阶段所产生的变化,制定不一样的技术方案。不论多么渺小的技术方案,放在其对应的场景下都有着不一样的意义。实践是检验真理的唯一标准,当真正实操过后参与讨论,或许会让你有一点新发现,希望对读者在思考上有点不一样的 IDea,欢迎 Join 谁与说,热衷拥抱新知识,旨在技术交流+心得分享->每天译点晓知识。
资讯
继鸿蒙之后,基于 openEuler 操作系统正式推出,鲲鹏计算生态迅速发展起来,鲲鹏 920 系列服务器 CPU,鲲鹏 920 处理器兼容 ARM 架构,在性能、吞吐方面都有创新突破,支持国产-计算推向新高度,不仅 CPU,操作系统配套欧拉 openEuler,麒麟 Kylin V10,鸿蒙就在我们身边。
这里,我们来记录一次在国产操作系统-银河麒麟上如何部署 openGauss 数据库?
实战
本文,小编主要以信息技术创新认证->数据库 openGauss 为例->常见问答 Q-A 的方式阐述:
1、版本选取
![图片](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='1px' height='1px' viewBox='0 0 1 1' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' fill-opacity='0'%3E%3Cg transform='translate(-249.000000, -126.000000)' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
2、安装部署
首先,获取麒麟相关环境信息,
(注:麒麟操作系统及安装,远程终端连接可参考之前提供的 FAQ 手册,本文不重点阐述。)
接着,通过类似终端 Xshell 或 Xftp 工具连接主机,
![图片](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='1px' height='1px' viewBox='0 0 1 1' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' fill-opacity='0'%3E%3Cg transform='translate(-249.000000, -126.000000)' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
创建软件包文件夹并授权,
创建当前部署路径并授权,
![图片](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='1px' height='1px' viewBox='0 0 1 1' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' fill-opacity='0'%3E%3Cg transform='translate(-249.000000, -126.000000)' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
查询当前硬件环境-ARM 架构服务器,
查询当前操作系统信息,
![图片](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='1px' height='1px' viewBox='0 0 1 1' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' fill-opacity='0'%3E%3Cg transform='translate(-249.000000, -126.000000)' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
进入软件安装包文件路径,下载 openGauss 安装包(根据实际需要,选择不同的版本:opengauss 1 || opengauss2 || opengauss3)
![图片](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='1px' height='1px' viewBox='0 0 1 1' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' fill-opacity='0'%3E%3Cg transform='translate(-249.000000, -126.000000)' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
![图片](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='1px' height='1px' viewBox='0 0 1 1' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' fill-opacity='0'%3E%3Cg transform='translate(-249.000000, -126.000000)' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
(注:不同的操作系统及其搭载的硬件环境 x86、arm 架构需要特别留意一下,比如:在 Kylin 操作系统 x86 架构下执行 aarch64 这类包会报“无非执行二进制文件,可执行文件格式错误”!)
查询当前硬件环境-为 x86 架构服务器,执行 aarch64 包…
![图片](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='1px' height='1px' viewBox='0 0 1 1' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' fill-opacity='0'%3E%3Cg transform='translate(-249.000000, -126.000000)' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
![图片](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='1px' height='1px' viewBox='0 0 1 1' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' fill-opacity='0'%3E%3Cg transform='translate(-249.000000, -126.000000)' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
接下来,进入当前部署路径,解压 openGauss 安装包,
![图片](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='1px' height='1px' viewBox='0 0 1 1' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' fill-opacity='0'%3E%3Cg transform='translate(-249.000000, -126.000000)' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
查看 python 版本,opengauss 目录,
![图片](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='1px' height='1px' viewBox='0 0 1 1' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' fill-opacity='0'%3E%3Cg transform='translate(-249.000000, -126.000000)' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
![图片](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='1px' height='1px' viewBox='0 0 1 1' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' fill-opacity='0'%3E%3Cg transform='translate(-249.000000, -126.000000)' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
(注:本文这里是已经在信创环境装好了的,我们在初始化 openGauss 安装环境+python 环境前,可提前查阅,更多请参考 openGauss 官方文档)
其中,配置文件维护,可以通过 Xshell 或 Xftp 工具去创建 VS 修改,
![图片](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='1px' height='1px' viewBox='0 0 1 1' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' fill-opacity='0'%3E%3Cg transform='translate(-249.000000, -126.000000)' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
![图片](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='1px' height='1px' viewBox='0 0 1 1' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' fill-opacity='0'%3E%3Cg transform='translate(-249.000000, -126.000000)' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
在 script 文件夹下创建 clusterconfig.xml 文件,
接下来,就是初始化安装环境:执行 gs_preinstall,
![图片](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='1px' height='1px' viewBox='0 0 1 1' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' fill-opacity='0'%3E%3Cg transform='translate(-249.000000, -126.000000)' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
检查预安装环境 gs_checkos,执行 gs_install,按提示步骤去执行即可,待安装完成后,查看状态
测试数据库连接是否正常
启动/停止服务
卸载服务
3、适配改造
接下来,那如何在我们项目工程中去替换传统数据库 MySql/SqlServer,实现数据库平滑替代?
![图片](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='1px' height='1px' viewBox='0 0 1 1' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' fill-opacity='0'%3E%3Cg transform='translate(-249.000000, -126.000000)' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
tk.mybatis:mybatis 定制的第一大业务增强库,或 mybatis-plus,可根据实际业务场景择优选取控件。
pagehelper:分页控件,mybatis 定制的第二大业务增强库。
总结
从全面适配工作改造下来,这也确实给了 DBA 以及研发人员对数据库 SQL 方言语句书写的一些约束规范。
若是通过 Mysql 或 SqlServer 迁移导入至 openGauss。在数据迁移的时候,报某些字段超长,则需要查看源数据库中那些字段的类型及长度,这里应该是迁移有些字段,须在目标数据库中增加位宽。
比如:在 MySql 中 varchar 是表示字符,varchar(50)表示可以存放 50 个字符。这就意味着,50 个字节,如果存中文,在 utf-8 的字符集下,只能存最多 16 个。所以,从源数据库到目标数据库中,varchar 类型,需特别留意一下。
在实际项目工程中,研发尽量通用型写法。若是对于有些 BI 业务,其中,SQL 写法较为复杂,不同数据库厂商方言不兼容,则可以基于 Mybatis 插件的思想,根据当前数据库 databaseId,拦截 SQL 语句,加入各自数据库的 SQL 方言函数兼容,无需多套数据库 XML 中 SQL 写法,支持插拔式-需要时开启。
其中,分页的 SQL 拼装原理,对于不同的数据库可加入其对应的转换器,
评论