openGauss 资源池化开发者入门指南(二)

一、内容简介

openGauss 资源池化是 openGauss 推出的一种新型的集群架构.通过 DMS 和 DSS 组件,实现集群中多个节点的底层存储数据共享和节点间的内存实时共享

达到节省底层存储资源以及集群内部支持一写多读且可以实时一致性读的目的.

本系列的主旨在于帮助对资源池化开发感兴趣的开发者快速入门

以及提供一些对开发有帮助的经验总结

二、预备知识

开发者最好具备以下基础:

Linux 的基础命令,比如 dd 命令,iscis 等

对磁阵有一定的了解

对传统的 openGauss 编译方式十分熟悉

三、开发自验证编译安装指南

资源池化架构参考:

在社区正式发布的版本中, 如果需要搭建资源池化架构, 硬件上需要准备磁阵, 服务器和光交换机.

在社区正式发布的版本中, CM 和 OM 是必选的组件

这里介绍一种可以用于开发者自己学习或开发的编译环境搭建方式, 不需要 cm 和 om, 不需要磁阵, 仅需要一台普通的物理机就可以搭建出资源池化的环境.

需要注意的是, 因为没用到 cm, 这种方式搭建的环境不能用于调试主备倒换或 failover 场景, 只能用于验证集群正常运行时的场景

四、独立编译安装指南

注意:

以下请勿用于生产环境

必须是 debug 版本,不能用 release 版本

因为本博客介绍的安装方式为非 cm 安装,需要对 DSS 组件使用 Dsstest 方式进行编译,因此在编译数据库之前,需要下载 DSS 对应代码并自行采用 dsstest 方式对 DSS 进行编译。方法为 a.下载最新版本 CBB 代码,编译安装替换三方库中的 CBB; b.下载最新版本的 DSS 代码,并根据 src/gausskernel/ddes/ddes_commit_id 内的版本号,回退 DSS 至指定版本; c.编译安装替换三方库中的 DSS 组件,命令如下:

-3rd后面跟三方库对应的绝对路径

sh build.sh -3rd /xxx/.../binarylibs -t cmake -m DebugDsstest

三方库版本可能不是最新,此时需要手动更新 DMS 组件。方法为 a.下载最新版本 CBB 代码,编译安装替换三方库中的 CBB(上条操作已经执行过); b.下载最新版本的 DMS 代码,并根据 src/gausskernel/ddes/ddes_commit_id 内的版本号,回退 DMS 至指定版本; c.编译安装替换三方库中的 DMS 组件

当编译完 DSS、DMS、CBB 之后,会自动更新到三方库,不需要手动拷贝,只需要按正常流程编译数据库就行了

环境预备: 仅需要一台单独的物理机, 剩余磁盘空间最好足够大, 建议大于 2T, 如果没有太大业务量,最小大于等于 100G

环境预备: 假设已经自行使用编译方式编译出了 openGauss 带资源池化代码的 debug 版本的安装包, 可以通过确认生成的 bin 目录下是否有 dssserver, dsscmd, lib 目录下是否有 libdms.so, libdssapi.so , libdssaio.so, 来判断,同时要保证已经编译出的安装包使用的是 Dsstest 方式的 DSS 组件

下面是以 2 个节点为例 3. 配置好环境变量/home/cctest/envfile, 参考示例, 其中 DSS_HOME 是 dn 实例 1 的 dssserver 运行时需要的目录, 需要手动新建

export GAUSSHOME=/home/test/openGauss-server/dest/

export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH

export PATH=$GAUSSHOME/bin:$PATH

export DSS_HOME=/home/test/dss/dss0/dssdba

需要注意的是一台服务器上建多个 dn(数据库)节点, ip 是相同的, 服务使用的端口号不同

新建 dsssever 需要的目录:

cd /home/test

mkdir -p dss/dss0/dssdba/cfg

mkdir -p dss/dss0/dssdba/log

mkdir -p dss/dss1/dssdba/cfg

mkdir -p dss/dss1/dssdba/log

mkdir -p dss/dev

用 dd 命令创建一个模拟的块设备文件(执行时间依赖于磁盘的性能), 下面的命令是建 2T 的命令

请不要直接拷贝, 请务必根据自己需要的大小自己调整下 bs 和 count 的值, 否则磁盘会爆

dd if=/dev/zero of=/home/test/dss/dev/dss-dba bs=2M count=1024000 >/dev/null 2>&1

创建 2 个 dn 节点需要的 dss 实例 1 和 dss 实例 0 的配置:

实例 1 配置:

vim /home/test/dss/dss0/dssdba/cfg/dss_inst.ini

dss 实例 1 的内容如下:

INST_ID=0

_LOG_LEVEL=255

DSS_NODES_LIST=0:...:17102,1:...:18102

DISK_LOCK_FILE_PATH=/home/test/dss/dss0

LSNR_PATH=/home/test/dss/dss0

_LOG_MAX_FILE_SIZE=20M

_LOG_BACKUP_FILE_COUNT=128

dss 卷配置:

vim /home/test/dss/dss0/dssdba/cfg/dss_vg_conf.ini

dss 实例 1 的内容如下, 里面就是卷名加 dd 模拟出来的设备名字:

data:/home/test/dss/dev/dss-dba

实例 2 配置:

vim /home/test/dss/dss1/dssdba/cfg/dss_inst.ini

dss 实例 2 的内容如下, 注意 DISK_LOCK_FILE_PATH 配置的与 1 一致:

INST_ID=1

_LOG_LEVEL=255

DSS_NODES_LIST=0:...:17102,1:...:18102

DISK_LOCK_FILE_PATH=/home/test/dss/dss0

LSNR_PATH=/home/test/dss/dss1

_LOG_MAX_FILE_SIZE=20M

_LOG_BACKUP_FILE_COUNT=128

dss 卷配置:

vim /home/test/dss/dss1/dssdba/cfg/dss_vg_conf.ini

dss 实例 2 的内容如下, 里面就是卷名加 dd 模拟出来的设备名字:

data:/home/test/dss/dev/dss-dba

建 dssserver 需要的卷, 起 dssserver

这里是步骤3中配好的环境变量

source /home/cctest/envfile

dsscmd cv -g data -v /home/test/dss/dev/dss-dba

dssserver -D /home/test/dss/dss0/dssdba &

上个命令显示DSS SERVER STARTED即为成功

dssserver -D /home/test/dss/dss1/dssdba &

上个命令显示DSS SERVER STARTED即为成功

创建完可以通过如下命令确认是否建卷成功

dsscmd lsvg -U UDS:/home/test/dss/dss0/.dss_unix_d_socket

dsscmd ls -m M -p +data -U UDS:/home/test/dss/dss0/.dss_unix_d_socket

注意: dss 不支持启动后修改卷组配置,如涉及修改请重新执行上述步骤

手动执行多节点的 initdb

mkdir -p /home/test/data

rm -rf node1 node2

gs_intdb -D /home/test/data/node1 --nodename=node1 -U tester -w Pasword --vgname=+data --enable-dss --dms_url="0:...:1613,1:...:1614" -I 0 --socketpath='UDS:/home/test/dss/dss0/.dss_unix_d_socket'

echo "ss_enable_ssl = off

listen_addresses = '*'

port=12210

ss_enable_reform = off

ss_work_thread_count = 32

enable_segment = on

ss_log_level = 255

ss_log_backup_file_count = 100

ss_log_max_file_size = 1GB

" >> /home/test/data/node1/postgresql.conf

sed '91 ahost all all .../0 sha256' -i /home/test/data/node1/pg_hba.conf

gs_intdb -D /home/test/data/node2 --nodename=node2 -U tester -w Pasword --vgname=+data --enable-dss --dms_url="0:...:1613,1:...:1614" -I 1 --socketpath='UDS:/home/test/dss/dss1/.dss_unix_d_socket'

echo "ss_enable_ssl = off

listen_addresses = '*'

port=13210

ss_enable_reform = off

ss_work_thread_count = 32

enable_segment = on

ss_log_level = 255

ss_log_backup_file_count = 100

ss_log_max_file_size = 1GB

" >> /home/test/data/node2/postgresql.conf

sed '91 ahost all all .../0 sha256' -i /home/test/data/node2/pg_hba.conf

依次启动节点 1 和节点 2

gs_ctrl start -D /home/test/data/node1

gs_ctrl start -D /home/test/data/node2

部分补充说明:

ss_log_level 参数用于控制日志中打印 DMS 和 DSS 相关的日志, 日志目录在 pg_log/DMS 里面

17102 和 18102 是 dssserver 要用的端口

1613 和 1614 是 dms 通信要用的端口

12210 和 13210 是 openGauss 数据库提供服务需要用的端口

dssserver 配置中 INST_ID 不能有冲突, 比如多个 dssserver 配置成相同的 ID

该方式搭建出来的环境不支持高可用, 不能测试倒换和 failover

如果启动时报错,提示如“dms library version is not matched”等报错,表示 DMS/DSS 组件版本号错误,请参考第三章步骤 2 重新编译

非 CM 环境下,限制了 0 节点为主节点,因此需要确保 initdb 阶段 0 节点创建成功

如果安装过程出现报错,再次 initdb 时候可能会提示目录不为空。此时需要清理文件系统及 DSS 中的残留文件。文件系统可以通过 rm 命令直接删除 node 文件夹,DSS 中可以对模拟的块设备文件头部写 0(DSS 将元数据信息记录在头部),之后重新从第 8 步开始执行

rm -rf /home/test/data/node1 /home/test/data/node2

dd if=/dev/zero of=/home/test/dss/dev/dss-dba bs=2M count=10 conv=notrunc >/dev/null 2>&1

openGauss资源池化开发者入门指南(二)的更多相关文章

  1. 物联网操作系统HelloX开发者入门指南

    HelloX开发者入门指南 HelloX是聚焦于物联网领域的操作系统开发项目,可以通过百度搜索"HelloX",获取详细信息.当前开发团队正在进一步招募中,欢迎您的了解和加入.如果 ...

  2. 关于 HSSF 和 XSSF 功能的开发者入门指南 (Apache POI 操作 Excel)

    关于 HSSF 和 XSSF 功能的开发者入门指南 笔者深夜无眠,特此对本文翻译一部分,未完成部分待后续更新 本文源文地址 意欲使用 HSSF 和 XSSF 功能快熟读写电子表格?那本文就是为你而写的 ...

  3. GC入门指南(二)------GC工作原理

    本系列博客旨在帮助大家理解java垃圾收集器及其工作原理,这是系列的第二篇. java垃圾回收事实上是由一个能够进行自己主动内存管理的进程完毕的,这使得程序猿在写代码的时候不必过多考虑内存释放与回收的 ...

  4. require.js入门指南(二)

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  5. kotlin 语言入门指南(二)--代码风格

    语言风格 这里整理了 kotlin 惯用的代码风格,如果你有喜爱的代码风格,可以在 github 上给 kotlin 提 pull request . 创建DTOs(POJSs/POCOs) 文件: ...

  6. 《转载》编程入门指南 v1.4

    编程入门指南 v1.4 Badger · 8 个月前 作者:@萧井陌, @Badger 自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 CoCode ...

  7. Webstorm10.0.3破解程序及汉化包下载、Webstorm配置入门指南

    核心提示: WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.被广大中国JS开发者誉为“Web前端开发神器”.“最强大的HTML5编辑器”.“最智能的JavaSscri ...

  8. 转 猫都能学会的Unity3D Shader入门指南(二)

    猫都能学会的Unity3D Shader入门指南(二) 关于本系列 这是Unity3D Shader入门指南系列的第二篇,本系列面向的对象是新接触Shader开发的Unity3D使用者,因为我本身自己 ...

  9. Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器

    Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器 MVC概念 MVC的含义是 “模型-视图-控制器”.MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程 ...

  10. 分布式消息系统Jafka入门指南之二

    分布式消息系统Jafka入门指南之二 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 三.Jafka的文件夹结构 1.安装tree命令 $ sudo yu ...

随机推荐

  1. C#实现图片对比

    前言 虽然已经正式转JAVA了,但最近发现一个特别好的开源项目masuit,不仅提供很多简便的功能,还有图像的一些特殊操作功能. 下面就实现一个简单图像对比. 实现对比 代码如下,实现一个可以对比翻转 ...

  2. git的 .gitignore 配置概述

    git的 .gitignore 配置概述 学习背景:自己在使用git时发现有时会上传很多无用的配置文件,或者在项目中已经包含一个本地的git仓库,导致上一级项目上传总是报错,所以学习采用gitigno ...

  3. Openssl命令详解 - 密钥篇

    非对称算法密钥生成和公钥提取 # ecc算法 openssl ecparam -out pri.key -name prime256v1 -genkey #生成ec密钥,国密使用-name SM2 o ...

  4. 为什么要将Jenkins部署在k8s上

    传统Jenkins的Master-Slave方案的缺陷 Master节点发生单点故障时,整个流程都不可用了 每个 Slave节点的配置环境不一样,来完成不同语言的编译打包等操作,但是这些差异化的配置导 ...

  5. 基于python的json和cvs格式转换

    一 概念 1 json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Pr ...

  6. Android 语音播放(文字TTS)

    原文地址:Android 语音播放(文字TTS) | Stars-One的杂货小窝 基于Google内置的TTS引擎,封装了个语音播放的工具类 使用 //初始化 SpeechService.init( ...

  7. js实现回调功能实例

    所谓js回调,本人认为无非就是一个函数的参数是另外一个函数,而作为参数的函数就称之为回调函数 <script type="text/javascript">  //要请 ...

  8. [.NET项目实战] Elsa开源工作流组件应用(一): Elsa工作流简介

    Elsa工作流简介 工作流是什么? 引用维基百科中对工作流的解释: 是对工作流程及其各操作步骤之间业务规则的抽象.概括.描述.工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以 ...

  9. 说JS作用域,就不得不说说自执行函数

    一个兜兜转转,从"北深"回到三线城市的小码农,热爱生活,热爱技术,在这里和大家分享一个技术人员的点点滴滴.欢迎大家关注我的微信公众号:果冻想 前言 不得不吐槽,学个JS,这个概念也 ...

  10. 如何利用云流送(Cloud Streaming)构造一个全三维、沉浸式的数字化虚拟景区

    随着科技的发展,数字化虚拟景区已经离我们越来越近!所谓数字化虚拟景区,即利用现代计算机数字技术,模拟真实景区,实现在计算机和互联网上再现景区的真实场景. 数字化虚拟景区一般包含以下内容: 数字电子沙盘 ...