暂无图片
暂无图片
57
暂无图片
暂无图片
暂无图片

开源数据库 | 记一次基于鲲鹏欧拉操作系统openGauss实践过程

原创 每天译点晓知识 2021-12-08
13787

引入 | 鲲鹏认证-openEuler欧拉操作系统-openGauss数据库


开篇:写在前面的话,每一篇摘文都以实际案例场景出发,周末抽空余时间记录每一次mark历程,在不一样的业务实际场景下,针对项目阶段所产生的变化,制定不一样的技术方案。不论多么渺小的技术方案,放在其对应的场景下都有着不一样的意义。实践是检验真理的唯一标准,当真正实操过后参与讨论,或许会让你有一点新发现,希望对读者在思考上有点不一样的IDea,欢迎Join谁与说,热衷拥抱新知识,旨在技术交流+心得分享->每天译点晓知识。


资讯:继鸿蒙之后,基于openEuler操作系统正式推出,鲲鹏计算生态迅速发展起来,鲲鹏920系列服务器CPU,鲲鹏920处理器兼容ARM架构,在性能、吞吐方面都有创新突破,支持国产-计算推向新高度,不仅CPU,操作系统配套欧拉openEuler,麒麟Kylin,鸿蒙就在我们身边。


下文,小编主要以鲲鹏认证->数据库openGauss为例->常见问答Q-A的方式阐述:


首先,获取鲲鹏相关环境信息,


继续查阅,FAQ操作手册


注:鲲鹏操作系统及安装,远程终端连接可参考上述FAQ手册,本文不重点阐述。)

接着,通过类似终端XshellXftp工具连接鲲鹏云主机


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

mkdir -p /home/softchmod 755 -R /home/soft
复制

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

mkdir /home/opengausschmod 777 /home/opengauss
复制


查询当前操作系统信息,

cat /etc/os-release
复制


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

lscpu
复制


进入软件安装包文件路径,下载openGauss安装包,

cd /home/softwget https://opengauss.obs.cn-south-1.myhuaweicloud.com/1.0.0/arm/openGauss-1.0.0-openEuler-64bit.tar.gz
复制


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

cd /home/opengausstar -zxvf openGauss-1.0.0-openEuler-64bit.tar.gz
复制


输入命令,yum install辅助安装包,

yum install -y bzip2 libaio-devel flex bison ncurses-devel glibc-devel patch
复制


注:初始化openGauss安装环境+python环境前,可提前查阅,更多请参考openGauss官方摘文,其中performance.sh脚本修改+LD_LIBRARY_PATH环境变量配置也可参考


export LD_LIBRARY_PATH=/home/opengauss/script/gspylib/clib:$LD_LIBRARY_PATHhttps://opengauss.org/en/docs/1.0.0/docs/installation/initializing-the-installation-environment.html#initializing-the-installation-environmenta-nameen-us_topic_0249784559a
复制

系统默认python版本,


其中,python版本匹配,可自行根据当前环境参考修改,

vi gspylib/common/CheckPythonVersion.pyif not pythonVersion == (3, 6)更新为if not pythonVersion >= (3, 6)
复制


在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 -U omm -G dbgrp -X /home/opengauss/script/clusterconfig.xml
复制



// 驱动-连接地址-账号-密码等信息String driverClassName = "org.postgresql.Driver";String url = "jdbc:postgresql://ip:8000/postgres";String username = "yxd179";String password = "yxd179";// 加载驱动Class.forName(driverClassName);// 获取数据库连接对象Connection con = (Connection) DriverManager.getConnection(url,username,password);// 获取数据库操作对象PreparesStatement ps = con.preparesStatement("SELECT COUNT(*) FROM TEST;");// 执行sqlResultSet 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定制的第二大业务增强库。

基于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);
}
复制

注:欢迎童鞋私信留言^_^,由于时间等原因,阐述不一定俱全,对于国产化这块,搜索可用资源较少,希望对各位读者,在适配鲲鹏-麒麟,欧拉操作系统以及国产化数据库过程中能够有所帮助,将不断完善技术手册-共享,涵盖Java微服务+Kafka+Reids+Elastic中间件安装FAQ手册.)


其中,多数据库连接工具,可选Tool->DBeaver,


文末:

在国产数据库适配过程中,引出-思考:

当需要作多数据库兼容适配的时候,若提前预估需要改动代码的一个数量级,这时若需要对数据库层中各个SQL方言编写测试用例,作成功或失败率评估,那么如何拥有一个Java版本,单元测试用例-代码自动生成器,根据类名配置,即可知晓当前类中所有SQL方言的成功或失败率^_^,记一次多SQL方言适配实践过程-多数据库

回顾更多精彩请点击^_^,记一次国产数据库适配思考过程-达梦


「 往期文章 」


数据库在线实训平台-MySQL篇

数仓进阶 | 记一次OLAP分析引擎演进思考过程

鲲鹏认证 | 多数据库切换之Oracle迁移至MySQL篇

MySQL优化案例 | 查看SQL语句执行计划

分表分库 | 水平分割VS垂直分割

Elasticsearch读写数据工作原理 | MySQL的重复数据插入处理

Elasticsearch进阶篇 | 记kibana执行dsl脚本实战过程

Kafka | 记一次修复Kafka分区所在broker宕机故障-引发当前分区不可用的思考过程

开源数据库 | 记一次基于鲲鹏欧拉操作系统openGauss实践过程

序列化 | Google的Gson与Alibaba的FastJson机制

最后修改时间:2021-12-28 11:56:56
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
3人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论