在银河麒麟系统上适配openGauss的具体实践

906b3e93-b7e6-4d78-9cd2-f2a84f52dd92.gif

引入

适配 | 认证- Kylin V10 ARM 国产银河麒麟+openGauss数据库

开篇

1、数据库架构

b6aabeb0-1cf6-48b5-b972-3f5a9d81020d.png

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、版本选取

451bf0a2-afa0-46e0-b683-5ac65d2fc74a.png

2、安装部署

首先,获取 麒麟 相关 环境 信息,

注:麒麟 操作系统及安装,远程终端连接可参考之前提供的FAQ手册,本文不重点阐述。)

接着,通过类似终端 Xshell Xftp 工具连接 主机

b36d677b-4e1d-457f-b568-8159646afd80.png

创建软件包文件夹并授权,

mkdir -p /home/soft

创建当前部署路径并授权,

mkdir /home/opengauss

741323e1-41a3-4ef8-95fb-53b8e39152ab.png

查询当前硬件环境-ARM架构服务器,

lscpu

查询当前操作系统信息,

cat /etc/os-release

a76fa4f4-e1f8-4e58-9879-f25bc59423ac.png

进入软件安装包文件路径,下载openGauss安装包(根据实际需要,选择不同的版本:openGauss 1 || openGauss2 || openGauss3)

cd /home/soft

846354cd-467a-4250-8393-f1ba041b597f.png

b385673e-0653-42e7-99bb-9cbea80f6cc2.png

注:不同 的操作系统及其搭载的硬件环境x86、arm架构需要特别留意一下,比如:在Kylin操作系统x86架构下执行aarch64这类包会报“无非执行二进制文件,可执行文件格式错误”!)

查询当前硬件环境-为x86架构服务器,执行aarch64包…

f5471a16-1bc1-414c-915d-e15c9c5c466b.png

834d566b-5f6a-4546-8e2c-43d0bbb1a313.png

接下来,进入当前部署路径,解压openGauss安装包

cd /home/opengauss

551dbc1a-fcd8-4105-a333-7c3ab51400e0.png

查看python版本,openGauss目录

e57dab98-67c0-478a-874e-6db6ebfa29ad.png

4008c4b5-1124-47d5-b20a-43f346de6760.png

:本文这里是已经在环境装好了的,我们在初始化openGauss安装环境+python环境前,可提前查阅,更多请参考 openGauss官方 文档

其中,配置文件维护,可以通过Xshell或Xftp工具去创建VS修改,

db980039-d41b-441d-b00d-2d4ebe8b1e48.png

a00d1dc3-5e3c-4b80-a8db-84ab585f982f.png

在script文件夹下创建clusterconfig.xml文件,

vi script/clusterconfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<!-- openGauss信息 -->
<CLUSTER>
<PARAM name="clusterName" value="opengauss_cluster" />
<PARAM name="nodeNames" value="opengauss_node1" />
<PARAM name="backIp1s" value="ip"/>
<PARAM name="gaussdbAppPath" value="/home/opengauss/install/app" />
<PARAM name="gaussdbLogPath" value="/var/log/omm" />
<PARAM name="tmpMppdbPath" value="/home/opengauss/tmp" />
<PARAM name="gaussdbToolPath" value="/home/opengauss/install/om" />
<PARAM name="corePath" value="/home/opengauss/corefile" />
<!-- openGauss 类型簇类型。该参数是可选的。single-inst表示一个主节点多个备节点的独立集群。-->
<PARAM name="clusterType" value="single-inst"/>
</CLUSTER>
<DEVICELIST>
<!-- opengauss_node1节点信息 -->
<DEVICE sn="1000001">
<!-- 主机名。-->
<PARAM name="name" value="opengauss_node1"/>
<!-- AZ 名称。该值为字符串,不能包含特殊字符,例如AZ1、AZ2、AZ3。-->
<PARAM name="azName" value="AZ1"/>
<!-- AZ优先。-->
<PARAM name="azPriority" value="1"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP。后端存储网络中主机的内网IP地址,所有的 openGauss 主机都在这个网络上相互通信。-->
<PARAM name="backIp1" value="ip"/>
<!-- SSH可靠通道的外部IP地址。如果没有使用外部网络,您可以将其留空或将其设置为backIp1的值。-->
<PARAM name="sshIp1" value="ip"/>

<!--dbnode1-->
<!-- 当前主机上要部署的数据库节点数。-->
<PARAM name="dataNum" value="1"/>
<!-- 数据库节点的基本端口号。默认值为40000。-->
<PARAM name="dataPortBase" value="15400"/>
<!-- 当前主机上存储数据库节点数据的目录。它是一个数据存储目录,应该在数据盘上。-->
<PARAM name="dataNode1" value="/home/opengauss/install/data/db1"/>
<!-- 当前集群中同步模式的节点数。该参数是可选的。取值范围为 0 到备用数据库节点数。-->
<PARAM name="dataNode1_syncNum" value="0"/>
</DEVICE>
</DEVICELIST>
</ROOT>

接下来,就是初始化安装环境:执行gs_preinstall,

./gs_preinstall -U omm -G dbgrp -X /home/opengauss/script/clusterconfig.xml

2e435d68-6169-4ed6-a031-9b1bcbc1ae84.png

检查预安装环境gs_checkos,执行gs_install,按提示步骤去执行即可,待安装完成后,查看状态

gs_om -t status --detail

测试数据库连接是否正常

gsql -d postgres -p port

启动/停止服务

gs_om -t stop 

gs_om -t start

卸载服务

执行gs_uninstall 
卸载集群
su - omm
gs_uninstall --delete-data
本地卸载
gs_uninstall --delete-data -L

3、适配改造

接下来,那如何在我们项目工程中去替换传统数据库MySql/SqlServer,实现数据库平滑替代?

51a5cb30-e5a8-4d70-95b0-037646990009.png

// 驱动-连接地址-账号-密码等信息
String driverClassName = "org.postgresql.Driver";
String url = "jdbc:postgresql://ip:port/postgres";
String username = "user";
String password = "pwd";
// 加载驱动
Class.forName(driverClassName);
// 获取数据库连接对象
Connection con = (Connection) DriverManager.getConnection(url,username,password);
// 获取数据库操作对象
PreparesStatement ps = con.preparesStatement("SELECT COUNT(*) FROM TEST;");
// 执行sql
ResultSet rs= ps.executeQuery();
// 这里还可以获取到数据库产品名称
DatabaseMetaData metaData = (DatabaseMetaData) con.getMetaData();
// 这里为国产数据库-适配,在xml指定国产数据库的databaseId奠定基础
System.out.println("数据库产品名称:" + metaData.getDatabaseProductName());
最后需关闭连接close,释放资源->rs-ps-con.

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拼装原理,对于不同的数据库可加入其对应的转换器,

protected BoundSql getPageBoundSql(Object parameterObject) {
String tempSql = sql;
String orderBy = PageHelper.getOrderBy();
if (orderBy != null) {
tempSql = OrderByParser.converToOrderBySql(sql, orderBy);
}
tempSql = localParser.get().getPageSql(tempSql);
return new BoundSql(configuration, tempSql, localParser.get().getPageParameterMapping(configuration, original.getBoundSql(parameterObject)), parameterObject);
}

出现厂商中SQL方言函数也覆盖不全的话,则可以@厂商提供,或者通过通用ORM组件的方式去改造SQL,

多数据库连接工具,可选Tool->DBeaver,可参考openGauss官网。

a28a92a1-890e-4bd6-9c59-506141c5290c.gif

本文分享自微信公众号 - openGauss(openGauss)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“ OSC源创计划 ”,欢迎正在阅读的你也加入,一起分享。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

openGauss社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值