opengauss数据库共享存储特性简介(代码片段)

Gauss松鼠会 Gauss松鼠会     2023-03-09     665

关键词:

openGauss 3.1.1是openGauss 5.0.0 release版本的Preview版本,希望广大社区伙伴和开发者基于此版本进行场景化验证,提前发现问题并反馈社区,社区将在LTS版本发布前进行问题修复。当前文档说明范围仅限企业版。

文章目录

版本介绍

3.1.1与之前的版本特性功能保持兼容,主要功能如下:

继承功能:

  • 基础功能:SQL标准语法、数据类型、表(包括临时表、全局临时表、外部表)、视图、物化视图、外键、索引(包括btree索引、Gin索引、hash索引)、序列、函数、触发器、聚合函数median、ROWNUM、UPSERT、、jsonb数据类型、GB18030字符集。
  • 存储过程:存储过程、存储过程内commit/rollback、参数的存储过程/函数调用省略()、存储过程调试。
  • 安全功能:认证、权限管理、网络通信安全、数据库审计、全密态数据库、动态数据脱敏、国密算法、防篡改账本数据库、内置角色和权限管理、透明加密、ANY权限管理等。
  • 高可用:主备双机、级联备机、逻辑复制、极致RTO、备机扩容、基于Paxos分布式一致性协议(DCF)、两地三中心跨Region容灾。
  • SQL引擎增强:范围分区、全局分区索引、LIST分区、HASH分区、基于范围分区的自动扩展分区、行存转向量化、自治事务、并行查询、Global Syscache、IPv6协议、postgis插件。
  • 存储引擎增强:延迟备库、备机支持逻辑复制、并行逻辑解码、灰度升级、滚动升级、Hash索引、列存表主键唯一约束、Ustore存储引擎、段页式存储、发布订阅、行存表压缩、MOT内存表、NUMA-aware高性能优化等。
  • 备份恢复:全量物理备份、逻辑备份、备机备份、增量备份和恢复、恢复到指定时间点(PITR)。
  • AI能力:参数自调优、慢SQL发现、AI查询时间预测、数据库指标采集预测与异常监控、DBMind自治运维平台、智能优化器、智能索引推荐、deepSQL库内AI算法、库内AI算法支持XGBoost、multiclass和PCA。
  • 运维能力:WDR诊断报告新增数据库运行指标、备机慢SQL诊断视图、unique sql自动淘汰。
  • JDBC:支持JDBC客户端负载均衡及读写分离。
  • CM:支持CM集群管理,CM支持自定义资源管控,支持对外状态查询和推送能力。
  • 工具链:开发工具DataStudio、数据迁移工具chameleon。
  • 中间件:shardingSphere、openLookeng。
  • 周边生态:dblink,支持openEuler、CentOS、Ubuntu、FusionOS系统
  • 其他:cmake脚本编译、容器化部署、kubernetes

新增功能:

  • 主备共享存储
  • MySQL兼容性增强
  • CM部署和数据库部署解耦,CM支持增量升级
  • MOT内存表能力增强

其中,主备共享存储特性是3.1.X版本引入的比较重要特性。下面重点介绍一下。

主备共享存储

特性简介

本特性提供主备机共享一份存储的能力,实现基于磁阵设备的主备共享存储HA部署形态,可选通过OCK RDMA提升备机实时一致性读能力_。_主备共享存储架构图如下图所示。

图 1 主备共享架构图

客户价值

解决传统HA部署下存储容量较单机部署翻倍的问题,减少了存储容量,节省磁阵设备。可选通过OCK RDMA提升备机实时一致性读能力。

特性描述

-共享存储依赖两个自研的公共组件实现主备共享存储的能力:

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

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

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

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

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

共享存储通过分布式内存服务DMS组件实现主备页面实时交换,提供备机实时一致性能力。即主机事务提交后,在备机立即能够读到,不存在延迟读现象(事务隔离级别为Read-Committed)。

共享存储通过OCK RDMA降低DMS主备页面交换时延。TCP下的备机一致性读进行时延对比,开启OCK RDMA,备机一致性读时延至少要降低20%。

特性约束

主备共享存储方案依赖于磁阵设备,磁阵的LUN需要支持SCSI3的PR协议(包括PR OUT(“PERSISTENT RESERVE OUT”)PR IN(“PERSISTENT RESERVE IN”)和INQUIRY), 用于实现集群IO FENCE。除此之外, 还需要支持SCSI3的CAW协议(COMPARE AND WRITE),用于实现共享磁盘锁。如Dorado 5000 V3磁阵设备。
实现的主备共享存储HA部署形态只支持1主1备和1主2备场景,其他场景为体验版未测试过,不承诺。
由于主备共享存储依赖类似分布式文件系统的功能来实现备机实时一致性读能力,因此要求文件元数据变更越少越好。基于性能考虑,只支持段页式表。
只支持主备部署在同一磁阵设备上,不支持容灾部署,也不支持主备混合部署(如主和备部署在不同的磁阵设备上)。
主备页面交换通过RDMA加速,依赖CX5网卡,并且依赖OCK RDMA动态库。
暂不支持备机重建及节点替换、节点修复等能力。
不支持从传统HA部署升级到基于主备共享存储部署。
共享存储模式下gs_xlogdump_xid,gs_xlogdump_lsn,gs_xlogdump_tablepath,gs_xlogdump_parsepage_tablepath、pg_create_logical_replication_slot、gs_verify_and_tryrepair_page、gs_repair_page、gs_repair_file函数功能不支持使用。
共享存储模式下T_CreatePublicationStmt、T_AlterPublicationStmt、T_CreateSubscriptionStmt、T_AlterSubscriptionStmt、T_DropSubscriptionStmt订阅功能不支持使用。
共享存储模式下不支持全局临时表。

安装部分对应的也新增了共享存储场景的支持。cluster_config_template.xml配置文件模板示例:

   ...
    <!-- 共享存储模式开关 -->
    <PARAM name="enable_dss" value="on"/>
    <!-- dss实例目录 -->
    <PARAM name="dss_home" value="/opt/huawei/install/data/dss"/>
    <!-- dss共享卷名 -->
    <PARAM name="ss_dss_vg_name" value="data"/>
    <!-- dss挂载卷组名和卷组信息,包含共享卷 -->
    <PARAM name="dss_vg_info" value="data:/dev/sdb,p0:/dev/sdc,p1:/dev/sdd"/>
    <!-- cm投票卷 -->
    <PARAM name="votingDiskPath" value="/dev/sde"/>
    <!-- cm共享卷 -->
    <PARAM name="shareDiskDir" value="/dev/sdf"/>
    <!-- dss开启ssl认证开关 -->
    <PARAM name="dss_ssl_enable" value="on"/>
    <!-- mes通信协议类型  -->
    <PARAM name="ss_interconnect_type" value="TCP"/>
    <!-- rdma绑定cpu序列  -->
    <PARAM name="ss_rdma_work_config" value="1 7"/>

欢迎有兴趣和条件的同学可以对主备共享存储特性进行场景化验证。

opengauss数据库源码解析系列文章——存储引擎源码解析(代码片段)

...aceUpdate更新模式,中文意思为:原地更新,是openGauss内核新增的一种存储模式。openGauss内核 查看详情

opengauss数据库源码解析系列文章——存储引擎源码解析(代码片段)

...绍。4.2.5行存储索引机制本节以B-Tree索引为例,介绍openGauss中行存储(格式)表的索引机制。索引本质上是对数据的一种物理有序聚簇。有序聚簇参考的排序字段被称 查看详情

猿创征文|使用docker部署opengauss国产数据库(代码片段)

猿创征文|使用Docker部署openGauss国产数据库一、openGauss介绍1.openGauss简介2.openGauss产品定位3.支持的架构和操作系统版本二、检查宿主机环境1.检查系统版本2.检查Docker状态三、下载openGauss镜像1.进入docker官方镜像仓库2.openGauss镜像介... 查看详情

opengauss数据库源码解析系列文章——存储引擎源码解析(代码片段)

上一篇我们讲述了“4.2磁盘引擎”中“4.2.1磁盘引擎整体框架及代码概览”与“4.2.2行存储统一访存接口”。本篇我们将讲述“4.2.3astore”。4.2.3astoreastore整体框架astore整体框架如图4-2所示。如上所述,作为行存储子格式之一&#... 查看详情

数据库迁移系列从oracle迁移到opengauss实战分享(代码片段)

之前的迁移系列中我们介绍了Mysql到openGauss的迁移方法,本篇介绍使用Ora2og工具从Oracle到openGauss数据库的迁移。文章目录简介迁移前准备环境软件安装ora2og工具安装创建迁移项目配置ora2pg.conf测试迁移导出导入Ora2Pg不足FAQ简介... 查看详情

猿创征文|国产数据库之opengauss的单机主备部署及快速入门(代码片段)

猿创征文|国产数据库之openGauss的单机主备部署及快速入门一、openGauss介绍1.openGauss简介2.openGauss特点3.openGauss的逻辑架构图二、环境检查1.节点规划2.操作系统版本三、安装前环境配置1.检查admin普通用户2.给安装目录授权3.配置/etc/... 查看详情

⭐opengauss数据库源码解析系列文章——ai查询时间预测⭐(代码片段)

上一篇介绍了“8.5指标采集、预测与异常检测”的相关内容,本篇我们介绍“8.6AI查询时间预测”的相关精彩内容介绍。8.6AI查询时间预测在前面介绍过“慢SQL发现”特性,该特性的典型场景是新业务上线前的检查,... 查看详情

hdfs系列--hdfs预研(代码片段)

...dbyElector实现分析3.2.3.ZKFailoverController实现分析3.3.NameNode的共享存储实现3.3.1.NameNode的元数据存储概述3.3.2.基于QJM的共享存储系统的总体架构3.3.3.基于QJM的共享存储系统的数据同步机制分析3.3.4.基于QJM的共享存储系统的数据恢复机... 查看详情

opengauss使能paxos特性实践(代码片段)

前言GaussDB(foropenGauss)推出了基于Paxos协议的DCF高可用组件,该组件使得GaussDB(foropenGauss)在保证数据一致性的同时,在高可用方面可进一步得到增强,包括:(1)通过自仲裁、多数派选主能力摆脱第三方仲裁组件,... 查看详情

opengauss和postgresql的源码目录结构对比(代码片段)

openGauss和PostgreSQL的源码目录结构对比ZTYan专注数据库 11人赞同了该文章前言:openGauss内核虽然源于PostgreSQL,但是华为在多个维度进行了深度的改进。本文从源目录的组织结构入手来研究openGauss,笔者在不断深入的研究中不禁... 查看详情

数据库迁移系列从mysql到opengauss的数据库对象迁移实践(代码片段)

在之前这一篇中我们分享过使用chameleon工具完成MySQL到openGauss的全量数据复制、实时在线复制。9.30新发布的openGauss3.1.0版本,工具的全量迁移和增量迁移的性能不但有了全面提升,而且支持数据库对象视图、触发器、自定... 查看详情

浅谈vastbaseg100-产品介绍(代码片段)

...100数据库是“北京海量数据技术股份有限公司”基于开源opengauss内核开发的企业级关系型数据库。除了具有opengauss的极致性能、同时在原有的基础上增加了大量Oracle兼容特性。遵循了EAL4+安全标准,整合了GIS空间组件等一系列专... 查看详情

四opengauss存储引擎

一、简介openGauss存储引擎是可插拔、自组装的,支持多个存储引擎来满足不同场景的业务诉求,目前支持行存储引擎、列存储引擎和内存引擎。早期计算机程序通过文件系统管理数据,到了20世纪60年代这种方式就开始不能满足... 查看详情

一opengauss概述

一、什么是openGaussopenGauss是一款开源的关系型数据库管理系统,它具有多核高性能、全链路安全性、智能运维等企业级特性。openGauss内核早期源自开源数据库PostgreSQL,融合了华为在数据库领域多年的内核经验,在架构、事务、... 查看详情

opengauss数据库源码解析系列文章——执行器解析(代码片段)

...线式的执行,对底层的存储引擎中的数据进行操作。openGauss数据库将执行的过程抽象成了不同类型的算子,同时结合编 查看详情

docker存储(代码片段)

...机写入数据一、Docker存储简介docker提供数据卷来实现数据共享与持久化,而数据卷的挂载有两种方式:挂载主机目录(Bindmounts)数据卷容器(DataVolumes)数据卷是一个可供容器使用的特殊目录,它绕过... 查看详情

mysqlinnodb--共享临时表空间和临时文件(代码片段)

 在MySQL5.7版本中引入OnlineDDL特性和共享临时表空间特性,临时数据主要存放形式为:1、DML命令执行过程中文件排序(filesore)操作生成的临时文件,存储目录由参数tmpdir控制,以MY开头2、超大事务提交生成binarylog过程中用于数... 查看详情

使用docker存储之卷volume(代码片段)

...存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。特性:  数据卷可以在容器之间共享和重用  对数据卷的修改会立刻... 查看详情