openGauss学习笔记-58 openGauss 高级特性-资源池化

news2024/12/24 21:02:56

文章目录

    • openGauss学习笔记-58 openGauss 高级特性-资源池化
      • 58.1 特性简介
      • 58.2 架构介绍
      • 58.3 功能特点
      • 58.4 适用场景与限制
      • 58.5 手动安装示例
      • 58.6 OCK RDMA使用示例
      • 58.7 OCK SCRLock使用示例

openGauss学习笔记-58 openGauss 高级特性-资源池化

58.1 特性简介

资源池化特性主要提供主备机共享一份存储的能力,提供一种新HA部署形态,解决传统HA部署下存储容量较单机翻倍的问题,满足降低存储容量及成本的诉求,同时备机支持实时一致性读。

58.2 架构介绍

资源池化整体架构图如下所示。

图 1 资源池化架构图
image-20230524192352441

  • 磁阵设备并且已经安装ultrapath多路径软件,磁阵设备可用。

  • 分布式存储服务DSS(Distributed Storage Service)

    DSS组件分为DSSAPI和DSSSERVER。DSSSERVER是独立进程,直接管理磁阵裸设备,并对外提供类似分布式文件系统的能力;DSSAPI是动态库,集成在数据库内部。DSS组件通过共享内存和客户端API动态库,为数据库提供创建文件、删除文件、扩展和收缩文件、读写文件的能力。

  • 分布式内存服务DMS(Distributed Memory Service)

    DMS是动态库,集成在数据库内部,通过TCP/RDMA网络传输PAGE内容,将主备内存融合,提供内存池化能力,以此实现备机实时一致性读功能。

  • 主备页面交换通过RDMA加速,依赖CX5网卡,并且依赖OCK RDMA动态库。

58.3 功能特点

  • 主备共享一份数据,显著降低传统HA的存储容量。
  • 主备之间去除了日志复制功能,增加了主备页面交换功能,备机支持实时一致性读。
  • 默认情况下,主备之间是通过TCP网络进行页面实时交换。为了降低页面交换的延迟,可选通过OCK RDMA动态库加速备机实时一致性的性能。

58.4 适用场景与限制

  • 要求存储设备是磁阵,磁阵的LUN需要支持SCSI3的PR协议(包括PR OUT(“PERSISTENT RESERVE OUT”)PR IN(“PERSISTENT RESERVE IN”)和INQUIRY), 用于实现集群IO FENCE;除此之外, 还需要支持SCSI3的CAW协议(COMPARE AND WRITE), 用于实现共享磁盘锁。如Dorado 5000 V3磁阵设备。
  • 最高支持1主7备部署。
  • 由于资源池化依赖类似分布式文件系统的功能来实现备机实时一致性读能力,因此要求文件元数据变更越少越好。基于性能考虑,本特性只支持段页式表。
  • 只支持主备部署在同一磁阵设备上,不支持容灾部署,也不支持主备混合部署(如主和备部署在不同的磁阵设备上)。
  • 主备页面交换可选通过RDMA加速,依赖CX5网卡,并且依赖计算提供的OCK RDMA动态库。
  • 暂不支持备机重建及节点替换、节点修复等能力。
  • 不支持传统模式数据库和资源池化模式数据库相互升级。

58.5 手动安装示例

与传统gs_initdb建库相比,资源池化建库将目录分为三种类型,每实例独占且不共享、每实例独占且共享、所有实例共享。其中需要共享的目录均需存放到磁阵设备上,而不共享的目录存放在本地盘上。另外备机建库只需要建隶属于自己的目录,不需要再次创建所有实例共享的目录结构。资源池化新增了相关GUC参数,以及将系统表存储方式从页式切换到段页式。

img 说明: 此处的单步手动安装是指工程编译之后,可单步执行相关命令进行资源池化建库。openGauss常规安装请参照《安装指南》。

  • 前置条件

    • 工程已完成代码编译,编译请参见软件安装编译
    • 主机已经挂载磁阵LUN设备,并且已经安装ultrapath多路径软件,磁阵设备可用。
  • 操作步骤

    1. 为磁阵LUN盘符创建软链接,并赋予相应的用户权限(假设磁阵LUN对应的盘符为/dev/sde, /dev/sdf)。

      sudo ln -s /dev/sde /dev/tpcc_data
      sudo ln -s /dev/sdf /dev/tpcc_log
      sudo chmod 777 /dev/tpcc_data
      sudo chmod 777 /dev/tpcc_log
      
    2. 为需要磁阵RAWIO权限的可执行文件赋权。

      sudo -i setcap CAP_SYS_RAWIO+ep 绝对路径/perctrl
      

      perctrl:用于对dss相关工具和进程赋予读写权限的可执行工具。

    3. 创建DSS服务端进程及建资源池化库需要的配置文件。

      测试目录(假设为/data/test)

      └─dss_home/
      ├── cfg
      │   ├── dss_inst.ini
      │   └── dss_vg_conf.ini
      └── log // 启动前需存在log目录
      

      dss_init.ini配置内容如下:

      INST_ID=0
      _LOG_LEVEL=55
      _LOG_BACKUP_FILE_COUNT=128
      _LOG_MAX_FILE_SIZE =20M
      LSNR_PATH=/data/test/dss_home
      STORAGE_MODE=RAID
      _SHM_KEY=12
      

      上述配置中参数说明如下:

      • INST_ID配置实例号,取值范围[0, 63],每个主备下的dssserver进程各不相同。
      • _LOG_LEVEL日志级别。
      • _LOG_BACKUP_FILE_COUNT日志文件最多保留的个数。
      • _LOG_MAX_FILE_SIZE为单个日志文件最大大小。
      • LSNR_PATH为DSS客户端与服务端之间通信使用的domain socket保存的目录,一般设为DSS服务端进程的家目录。
      • STORAGE_MODE为DSS对应的存储设备类型,磁阵的话配置为RAID。
      • _SHM_KEY共享内存KEY,需要保证每个DSS各不相同。

      dss_vg_conf.ini配置内容如下,

       data:/dev/tpcc_data
       log: /dev/tpcc_log
      

      表示+data目录的内容存放在/dev/tpcc_data设备上,+log目录内容存放在/dev/tpcc_log设备上。这里要注意下,约定通过根目录名是否有+字符区分是文件系统中的文件,还是DSS中的文件。用户可以把DSS当做类似分布式文件系统来看待。

    4. 使用DSS客户端工具(dsscmd)在磁阵设备上初始化VG(类似于在裸盘上初始化文件系统的操作)。

      # 清空磁阵LUN开头数据
      dd if=/dev/zero bs=2048 count=100000 of=/dev/tpcc_data
      dd if=/dev/zero bs=2048 count=100000 of=/dev/tpcc_log
      # 创建VG
      dsscmd cv -g data -v /dev/tpcc_data -s 2048 -D /data/ss_test/dss_home
      dsscmd cv -g log  -v /dev/tpcc_log -s 65536 -D /data/ss_test/dss_home
      # 拉起dssserver
      dssserver -D /data/ss_test/dss_home &
      
    5. 通过gs_initdb建立资源池化库。

      gs_initdb -D /data/ss_test/dn_primary --nodename=single_node -w Gauss_234 --vgname="+data,+log" --enable-dss --dms_url="0:127.0.0.1:1611,1:127.0.0.1:1711" -I 0 --socketpath="UDS:/data/ss_test/dss_home/.dss_unix_d_socket"
      

      其中新增5个相关参数:

      • –vgname 卷组名,指定资源池化库建在哪个卷组下,这个名字与dss_vg_conf.ini文件中的配置项相关,卷组名需要出现在配置文件中,并且以‘+’字符开头。
      • –enable_dss 表示资源池化库要建到DSS里。
      • –dms_url “0:127.0.0.1:1611,1:127.0.0.1:1711”,格式为instance_id:ip:port。
      • -I 指定当前节点的实例号,取值范围[0,63]。
      • –socketpath 指定DSS客户端(这里指集成到数据库相关可执行文件中的DSS客户端动态库)与服务端通信使用的unix domain socket存放的位置。
    6. 建资源池化库成功,通过gs_ctl start命令拉取数据库进程。

      gs_ctl start -D /data/ss_test/dn_primary
      
    7. 按照上述步骤再重新执行安装备机。

58.6 OCK RDMA使用示例

资源池化特性提供备机实时一致性读功能,主备之间页面交换可选择通过RDMA加速。此章节简要描述如何在资源池化中开启RDMA通信功能。

  • 前置条件

    开启RDMA功能依赖CX5网卡,并且依赖OCK RPC动态库。

  • 操作步骤

    1. 获取OCK RPC包。

      从指定openGauss接口人处获取。

    2. 部署OCK RPC包。

      1. 解压OCK RPC包。

        tar -zxf OCK_platform_rpc_22.0.0_EulerOS-aarch64.tar.gz
        cd OCK_platform_rpc_22.0.0_EulerOS-aarch64_release
        tar -zxf OCK_platform_rpc_EulerOS_aarch64.tar.gz
        tar -zxf OCK_platform_rpc_sbin.tar.gz
        cp rpc_sbin/ock_rpc_opengauss.sh ./
        
      2. 修改部署脚本ock_rpc_opengauss.sh参数。

        # Deployment user, which is the same as the opengauss user. 
        # It is a non-root user. Ensure that this user exists on all servers.
        USER_NAME="${USER}"
        
        # Deployment server, which can contain native
        HOST_IP=(30.30.xx.7 30.30.xx.8)
        
        # Deployment package. The package name starts with OCK_platform_rpc.
        PACKAGES="OCK_platform_rpc_aarch64_EulerOS.tar.gz"
        
        # Specifies the path from the SCP package to the server. 
        # If the path does not exist, the path is automatically created.
        PATH_TO_SCP="/home/ock/test"
        
        # Opengauss environment variable
        GAUSSHOME="/home/ock/mppdb_temp_install"
        
        # OCK_RPC environment variable. Do not change
        OCK_RPC_LIB_PATH="${GAUSSHOME}/lib"
        

        脚本中涉及参数如下:

        1. USER_NAME:DN所在机器用户名。
        2. HOST_IP :集群机器ip,包括本机机器。
        3. PACKAGES: 获取到的ock rpc二进制包名(与机器操作系统架构匹配)。
        4. PATH_TO_SCP: 拷贝路径。
        5. GAUSSHOME: 同openGauss配置的环境变量GAUSSHOME一致。
        6. OCK_RPC_LIB_PATH:ock rpc二进制所在路径,资源池化会通过动态加载方式使用,请务必配置正确。
      3. 执行部署脚本ock_rpc_opengauss.sh。

        sh ock_rpc_opengauss.sh
        

        img 说明: 实现功能:

        • 完成集群中OCK RPC二进制包的部署,解压和拷贝。
        • 配置好相关的环境变量$OCK_RPC_LIB_PATH。
        • 配置集群节点UCX环境变量。(UCX为基于RDMA开发的通信组件,OCK RPC是在UCX基础上开发的适配资源池化的通信组件。)
      4. 配置其他参数环境变量。

        export UCX_ZCOPY_THRESH="32768"
        export UCX_USE_MT_MUTEX=n
        export UCX_NET_DEVICES=mlx5_1:1
        

        参数说明:

        1. UCX_ZCOPY_THRESH优化参数,RDMA传输过程中减少内存申请。单位:byte。默认值:32768。(可选参数,建议默认值)。

        2. UCX_USE_MT_MUTEX优化参数,RDMA发送过程中保证数据一致性锁的类型,n:原子锁;y:互斥锁。(可选参数,建议使用原子锁,性能较好)。

        3. UCX_NET_DEVICES,UCX配置参数,用于指定网卡端口,可安装mlnx_ofed驱动,使用ibdev2netdev命令查看当前RDMA活动端口。(建议指定活动端口)。

          img 说明: 环境变量配置完之后,执行 source ~/.bashrc

    3. 执行1~5完成gs_initdb建库。

    4. 修改postgresql.conf配置文件。

      配置ss_interconnect_type=RDMA,添加配置项ss_rdma_work_config与ss_ock_log_path。参数说明及配置请参见资源池化参数

      示例:

      ss_interconnect_type=RDMA
      ss_rdma_work_config ='6 10'     (OCK RDMA使用用户态poll方式,并绑定cpu [6 10],空格分开)
      ss_ock_log_path=/home/ock_test/log”(OCK RDMA 消息通信过程日志记录)
      
    5. 执行gs_ctl start命令拉取数据库进程。

      gs_ctl start -D /data/ss_test/dn_primary
      

58.7 OCK SCRLock使用示例

SCRLock,全称smart cached remote lock,是一个带有本地锁缓存的分布式锁SDK。本章介绍其安装部署方法。

  • 前置条件

    1. 开启RDMA功能依赖CX5网卡。
    2. 安装libunwind软件包,可从OS对应的镜像中获取
  • 操作步骤

    1. 获取OCK scrlock包。

      从指定openGauss接口人处获取。

    2. 部署OCK scrlock包。

      1. 主机解压OCK scrlock包。

        tar -zxf OCK_scrlock_22.0.0_openEuler-aarch64.tar.gz
        cd OCK_scrlock_22.0.0_openEuler-aarch64_release
        tar -zxf OCK_scrlock_openEuler_aarch64.tar.gz
        cd scrlock_sbin
        
      2. 修改部署脚本scrlock.sh参数。

        # user
        USER_NAME="omm"
        
        # ${USER_NAME} group
        USER_GROUP="dbgrp"
        
        # slave server
        HOST_IP=(30.30.xx.59 30.30.xx.58)
        
        # user mode sdk path
        SCP_TO_PATH="/home/${USER_NAME}/scrlock"
        
        # OCK_SCRLOCK environment variable
        OCK_SCRLOCK_LIB_PATH="/home/${USER_NAME}/lib"
        

        脚本中涉及参数如下:

        1. USER_NAME:OS用户名,用户自行配置。
        2. USER_GROUP:OS用户所属组,用户自行配置
        3. HOST_IP :集群备机ip,用户自行配置。
        4. SCP_TO_PATH:用户态软件包放置路径,用户自行配置,需要放在该OS用户有权限访问的路径下。
        5. OCK_SCRLOCK_LIB_PATH:ock scrlock二进制所在路径,DMS会通过动态加载方式使用,请务必配置正确,必须与高斯动态库目录一致,一般是"${GAUSSHOME}/lib"
      3. 执行部署脚本。

        1.执行gs_preinstall(高斯部署脚本)
        2.执行scrlock_preinstall.sh,并根据提示输入root密码
        3.执行gs_install(高斯部署脚本)
        4.以OS用户进入SCP_TO_PATH目录后,执行scrlock_install.sh,执行source ~/.bashrc
        5.重新拉起高斯数据库(cm_ctl stop;cm_ctl start)
        

        img 说明: 实现功能:

        • 完成集群中OCK scrlock二进制包的部署,解压和拷贝。
        • 配置好相关的环境变量$OCK_SCRLOCK_LIB_PATH。
        • gs_preinstall和gs_install为高斯部署脚本,与scrlock安装包无关。需要严格按照上述顺序执行。

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/964315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mybatis-plus使用@TableField(fill = FieldFill.UPDATE)完成自动填充字段如保存更新时自动更新时间

📚目录 填充策略枚举介绍自定义填充策略枚举的数据测试用例插入填充更新填充 结尾 填充策略枚举介绍 使用mybatis-plus完成字段的填充,使用起来也比较方便,当我们往数据库插入一条数据时我们不需要在给指定字段上new Date() ,而是使用mybatis-plus的注解完成TableFi…

VMware 安装 Centos7 超详细过程

CentOS系统,安装教程可参考以下: 哪些模型需要在Linux下运行,需提前预装Linux系统呢,评论区讨论吧 比如Noah-MP 5.0模型 1.软硬件准备 软件:推荐使用 VMware,我用的是 VMware 12 镜像:CentO…

全脑建模:过去、现在和未来

什么是全脑建模? 全脑建模(WBM)是计算神经科学的子领域,涉及近似全脑神经活动的计算和理论模型。该方法的目标是研究神经活动的宏观时空模式如何由解剖连接结构、内在神经动力学和外部扰动(感觉、认知、药理、电磁等)的相互作用产生。这种宏观现象及其模…

在firefox浏览器下破解hackbar

目录 一、介绍: 二、安装教程 1、打开firefox浏览器插件管理扩展 2、在firefox浏览器下安装老版本Hackbar (1)首先删除之前安装的Hackbar插件: (2)采用从文件安装附件添加组: (3…

Xubuntu16.04系统中解决无法识别exFAT格式的U盘

问题描述 将exFAT格式的U盘插入到Xubuntu16.04系统中,发现系统可以识别到此U盘,但是打不开,查询后发现需要安装exfat-utils库才行。 解决方案: 1.设备有网络的情况下 apt-get install exfat-utils直接安装exfat-utils库即可 2.设备…

Python安装指南(Windows版)

安装python环境 官网下载地址: Download Python | Python.org 我选择3.10.4版本,当然你也可以选择其他版本 安装 安装完成,需要验证是否安装成功。 打开CMD窗口,输入python命令,如果进入如下python窗口则安装成功&…

3D点云处理:栅格化点云(附源码)

文章目录 0. 测试效果1. 基本内容2. 代码实现文章目录:3D视觉个人学习目录微信:dhlddxB站: Non-Stop_目标:将点云进行栅格化操作;应用:一般可应用于点云的体积计算等;0. 测试效果 1. 基本内容 点云栅格化是将三维点云数据投影到二维栅格(或像素)网格上的过程。这种操作…

无涯教程-JavaScript - QUARTILE函数

QUARTILE函数取代了Excel 2010中的QUARTILE.INC函数。 描述 该函数返回数据集的四分位数。四分位数通常用于销售和调查数据中,以将人群分为几类。 语法 QUARTILE (array,quart)争论 Argument描述Required/OptionalArrayThe array or cell range of numeric values for whi…

SpringBoot-学习笔记(基础)

文章目录 1. 概念1.1 SpringBoot快速入门1.2 SpringBoot和Spring对比1.3 pom文件坐标介绍1.4 引导类1.5 修改配置1.6 读取配置1.6.1 读取配置信息1.6.2 读取配置信息并创建类进行封装 1.7 整合第三方技术1.7.1 整合JUnit1.7.1 整合Mybatis1.7.1 整合Mybatis-Plus1.7.1 整合Drui…

stm32HAL库 G4 SPI 从机DMA可变长度接受数据乱码问题

使用一个引脚当作SPI CS, 边沿触发; 在电平位0时候接受SPI数据20个字节 如果实际主机只发了小于20字节时候, 下一个帧就会错乱; 去老外找了之后,需要复位SPi RCC时钟才能复位掉SPI 下面的不行 正确的做法

Redis集群操作-----主从互换

一、将节点cluster1的主节点7000端口的redis关掉 [rootredis-cluster1 src]# ps -ef |grep redis 二、查看集群信息:

JavaScript实现系统级别的取色器、EyeDropper、try、catch、finally

文章目录 效果图htmlJavaScript关键代码EyeDroppertry...catch颜色值相减(色差)的传送门 效果图 html <div class"d_f fd_c ai_c"><button id"idBtn" class"cursor_pointer">开始取色</button><div id"idBox" c…

Java-Optional类

概述 Optional是JAVA 8引入的一个类&#xff0c;用于处理可能为null的值。 利用Optional可以减少代码中if-else的判断逻辑&#xff0c;增加代码的可读性。且可以减少空指针异常的发生&#xff0c;增加代码的安全性。 常用的方法 示例 代码 public class OptionalTest {pub…

我能“C“——指针进阶(上)

目录 指针的概念 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 4. 数组参数、指针参数 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二级指针传参 5. 函数指针 阅读两段有趣的代码&…

2023年打脸面试官之TCP--瞬间就懂

1.TCP 三次握手之为什么要三次呢&#xff1f;事不过三&#xff1f; 过程如下图&#xff1a; 先来解释下上述的各个标志的含义 序列号seq&#xff1a;占4个字节&#xff0c;用来标记数据段的顺序&#xff0c;TCP把连接中发送的所有数据字节都编上一个序号&#xff0c;第一个字节…

python3.11教程2:基础数据类型(数字和字符串)、组合数据类型(集合、元组、列表、字典)

文章目录 五、基本数据类型5.1 整数和浮点数5.1.1 整数和浮点数的类型5.1.2 进制和进制转换5.1.3 round函数 5.2 运算符5.2.1 常用运算符、运算符函数和逻辑运算符5.2.2 位运算符5.2.3 运算符的优先级及其进阶使用 5.3 布尔类型5.4 字符串5.3.1 字符串的基本操作5.3.2 字符串函…

揭秘大厂面试成功秘籍:V2.0版面试指南全新上线

我们程序员这一群体&#xff0c;大家都知道最好的涨薪方法是通过跳槽&#xff0c;在你把一个公司的精华都吸收完之后&#xff0c;有追求的肯定会跳去更好的公司发展自己&#xff0c;特别在金三银四&#xff0c;金九银十这样的招聘旺季里 &#xff0c;会有很多需要准备的面试会有…

Nginx配置及优化3

Nginx配置及优化3 一、网页状态页二、nginx第三方模块2.1、echo模块 三、变量3.1、内置变量3.1.1、常用的内置变量3.1.2、举个例子 3.2、自定义变量 四、自定义访问日志优化4.1、自定义访问日志的格式4.2、自定义json格式日志 五、nginx压缩功能六、HTTPS功能6.1、nginx的HTTPS…

【C语言】字符函数,字符串函数,内存函数

大家好&#xff01;今天我们来学习C语言中的字符函数&#xff0c;字符串函数和内存函数。 目录 1. 字符函数 1.1 字符分类函数 1.2 字符转换函数 1.2.1 tolower&#xff08;将大写字母转化为小写字母&#xff09; 1.2.2 toupper&#xff08;将小写字母转化为大写字母&…