德歌:阿里云RDS PG最佳实践

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
对象存储 OSS,20GB 3个月
简介: 5月27日云栖社区《云数据库RDS for PostgreSQL最佳实践》的直播分享顺利结束,来自阿里云的高级技术专家德歌与大家分享阿里云云数据库PostgreSQL的最佳技术实战,包括上云实战、数据迁移与同步、阿里云RDS相关周边组件用法、插件使用等内容。

直播视频:

0f920f9e9f9260f0cd3776966ec22aa45cc557ce

(点击图片查看视频)

幻灯片下载地址:https://oss-cn-hangzhou.aliyuncs.com/yqfiles/1138a8a3aff5f63b426162e265d98375.pdf


5月27日云栖社区《云数据库RDS for PostgreSQL最佳实践》的直播分享顺利结束,来自阿里云的高级技术专家德歌与大家分享阿里云云数据库PostgreSQL的最佳技术实战,包括上云实战、数据迁移与同步、阿里云RDS相关周边组件用法、插件使用等内容。直播中德歌还就部分操作在线进行了演示。本次视频直播的整理文章、视频、幻灯片整理完毕,如下内容。


上云实践

在上云之前,首先需要评估RDS的规格,这是因为线下使用的硬件可能与线上的硬件不能一一对应,并且线上的RDS可能还做了一定的优化。在评估RDS规格的时候,需要考虑以下几个方面:

  • 可用区:
    •  尽量与应用服务器在同一可用区;
    •  否则只能通过公网地址访问。
  • 数据库版本:根据业务需求选择,建议选择新版本;
  • 网络:与应用服务器在同一VPC,或者都在经典网络,否则只能通过公网地址访问;
  • 容量:根据实际的需求购买,最后留有足够余量(用于存储XLOG,已经运行SQL时可能产生的临时文件)。余量建议不低于1GB、同时不低于实际数据空间的20%;
  • 内存:建议大于活跃数据的实际占用空间;
  • CPU:根据购买的内存规格设定;
  • IOPS:根据购买的内存规格设定。

44a3bb9fb9af64de427b627b66a0fac46f11c1f2

图一 RDS PG性能评测与瓶颈分析

 

对于评测所选的RDS规格是否可以满足业务需求,可采用TPC-BTPC-C以及自定义评测模型对RDS PG进行性能评测与瓶颈分析。其中自定义模型评测中,可以使用Sysbench测试阿里云RDS PostgreSQL性能或者通过并行COPY 或写大对象测试网络吞吐率。

11983d14d10a27350854c8f1a964d9713b4fd111

图二 TPC-B实例诊断

  

在上云实践中,数据的迁移也至关重要,数据的迁移主要分为同构全量迁移、同构增量迁移、异构全量迁移、异构增量迁移四种方式。

同构全量迁移

399954ec4661c964b10bd444b8ed53399a4548ad

图三 同构全量迁移


从用户端PostgreSQL 迁移到阿里云 PostgreSQL主要有两种方法:第一种方法是在云端数据库创建与线下数据库一致的用户、数据库名。采用pg_dump 依次导出线下数据库,然后再采用pg_restore 依次还原线下数据库,整个迁移过程数据是不落地的,是通过管道过去的;另一种方法是借助阿里云提供的数据迁移工具DTS,通过简单的操作即可完成线上线下的数据迁移。

同构增量迁移

如果是用户端PostgreSQL 迁移到 阿里云 PostgreSQL的同构增量迁移,可以使用xDB增量迁移插件,该插件由enterprisedb默认提供。

异构全量迁移

如果线下是一个Oracle或者SQL Server数据库,可以采用DTS将数据迁移到线上的 PostgreSQL。

异构增量迁移

4cf8225c8e8ca0a87e8436b42f104737ea56cd9f


图四 异构增量迁移


异构增量的迁移实现的方法比较多。首先可以使用xDB增量迁移插件,该插件支持从Oracle、SQL Server迁移到EDB和PostgreSQL,反之同样可行。除此之外,Oracle GoldenGate(oracle的商业产品)和Symmetricds(基于触发器实现的开源软件)同样可支持异构增量迁移。

 

RDS PG使用最佳实践

接下来将介绍RDS PG使用最佳实践,主要包括备份与恢复、RT的优化、插件用法、参数最佳实践、安全与审计、规格升降级、数据分片的用法、读写分离、一主多备、异地容灾、诊断实践、事件通知等。

备份与恢复

4cf8225c8e8ca0a87e8436b42f104737ea56cd9f

图五 备份与恢复


RDS的备份与恢复可在PG的管理控制台进行实现,使用者只需将需要备份的时间点等调度信息在管理控制台配置好之后,就可以自动地在后台实现全量以及归档的备份。备份恢复到任意时间点的操作也很简单,只需要在控制管理台中创建一个临时实例,并输入需要恢复到的时间点即可。但有一点值得注意的是,如果将线上的数据库恢复到某个具体的时间点,首先需要创建一个临时实例,然后再从该临时实例中当时数据库中的数据导入到线上数据库中,临时实例是目前无法替换线上的数据库的。

RT的优化

一个请求的RT大约在2ms左右,因此网络的RT会严重影响系统的性能,比如在几条SQL语句的RT就可以达到十几毫秒,而由这几条SQL语句组成的事物在数据库中执行时间仅需1ms甚至更短的时间。针对这种情况,可以采用UDF进行RT的优化,用户自己将业务逻辑下降到数据库层面处理,充分地利用数据库的计算能力,以减轻网络延迟带来的瓶颈。

插件用法

PostgreSQL可以查询当前RDS PG版本支持的插件名,具体的SQL语句见下图所示。创建插件的过程也很简单,只需要采用create extension+插件名的方式即可创建对应的插件。

 

cca7e8bb6a6bc42c3c81a8226aa505928800b29a

图六 插件用法


具体的插件用法,使用者可以参看插件对应的手册进行操作。这里简单介绍两种插件:

  •    auto_explain 插件用法:用户可以通过此插件查看某些SQL语句在执行过程中是否出现异常;
  •    pg_hint_plan 插件:该插件是一个强制用户使用用户提供的执行计划的插件。

安全与审计

1a0c6aa23b477cb25a3b741a11942a5f278f75a2

图七 安全和审计


用户可以登陆RDS管理控制台来设置安全和设计,其中通白名单为允许连接数据库的来源IP;同时SQL设计也是需要用户主动开启的,开启之后可以看到数据库之间的每条SQL语句。

规格升降级

用户可登陆RDS管理控制器查看基本信息和变更配置,完成规格升降级。

分布式用法

5e064189773fb9834b654decb97fd9fa59113a00

图八 分布式用法


尽管目前RDS PG是多节点配置,但是整体对用户提供访问服务的还是一个节点,这一个节点就有可能成为整个系统的瓶颈。虽然RDS PG现在还不支持分布式,但对于用户而言,实现分布式其实很简单。用户通过在ECS上安装分布式中间件即可实现分布式用法。比如说用户购买了8个RDS,然后在中间件上配置好,然后就可以将数据均衡地打散到8个RDS中。目前支持的中间件包括:plproxy、oneproxy for pgsql、pgpool-II、pg_shard、citusdb、FDW。

读写分离

由于目前RDS尚未开放只读节点,用户在做读写分离时,需要将RDS同步一份到ECS上,然后再通过中间件来实现读写分离。读写分离的插件也相当多,包括Pgpool-II、Oneproxy for pgsql和Pg-jdbc,可以实现用户自定义函数、黑名单、白名单的配置。

一主多备

目前,RDS PG内部一主多备功能正在建设。用户如果自建RDS PG备库有两种方法:

  •    自建RDS PG逻辑备库:用户可以使用RDS PG提供的alidecode插件,在异地创建RDS PG的逻辑备库;
  •    自建RDS PG的物理备库:如果用户需要构建一个和RDS PostgreSQL一模一样的备库,则可以通过流复制或者归档来完成。

异地容灾的操作类似于一主多备,因此此处不再赘述。

诊断实践

5bd00cb896ab4272fbbd02c58a6ee1934b3dfdab

图九 诊断实践


用户可以登录RDS管理控制台,进行设置报警阀值、设置监控间隔和查询慢SQL;同时控制台也提供了查看日志的接口;此外,还可以使用auto explain和debug 分别实现查看当前的执行计划是否异常和打印SQL的parse, rewritten, plan日志,分析计划相关的问题。  

事件通知

通过在管控平台设置好阀值,接收通知,同时当数据库可用性状态变化时也会自行通知。


阿里云RDS相关周边组件用法

7e84a7534a5964c3f6998ae302e7f6fa51980f33

图十 阿里云RDS相关周边组件用法

 

阿里云RDS相关周边组件中最为重要的就是OSS(对象存储),OSS的使用方法较多,其中比较重要的一点就是实现数据的冷热分离。下面一个实例来展示下其实现过程:用户购买RDS PG之后,会连续不断地有数据插进来,并且不断地有数据变成冷数据,新插进来的数据成为热数据。如果将所有的数据都保留在线上的PG里,数据库会越来越大,但是这些冷数据的访问频率并不高。针对该类应用场景,阿里RDS提供了一个名为OSS_fdw的插件,可以将历史数据(冷数据)导入OSS中,然后通过建web表的方式直接读取之前导入的历史数据。经过上述操作可以实现冷热数据分离,热数据放在关系数据库中,冷数据放在OSS中,需要使用冷数据时,可以将其导入一个临时库中,也就是一个预热过程,预热之后和访问本地数据相同。

另外一个就是管理,管理主要是冷数据和OSS对象存储的URL对应关系,包括时间片。这些对应关系可以存储在RDS PG中,用户只需维护好URL的元数据信息,定时将冷数据导出至OSS,实现冷热数据的分离。应用在访问RDS时,访问的是热数据,如果访问冷数据,需要一个过读元数据,然后将对应的OSS导入到RDS PG中的预热过程。性能上,每天新增的数据插入OSS,对于每个实例,可以实现100MB/s速度。

此外,PostgreSQL也可以和 MongoDB结合使用,将 MongoDB作为一个计算单元,PostgreSQL 作为 一个SQL的接口来实现MongoDB BI功能。


数据同步

723e7c8f384d5bbeaceb072bfc4617c0d96202ab

图十一 数据同步


数据同步又分为RDS PG到线下单向同步、线下到RDS PG单向同步、线上线下双向同步三种。

RDS PG到线下单向同步

从RDS PG到线下单向同步有两种方式,一是通过使用RDS PG提供的alidecode插件,在异地创建RDS PG的逻辑备库。在用户端的数据库可以是和RDS PG不一样的数据库,只同步部分数据;另一种方式是建立完全一致的物理备库。该过程需要申请一定的权限,可以在线下做一个云端数据库的镜像。

线下到RDS PG单向同步

0e303f2f10285be84b2ccb5b96dd293fbb9c91af

图十二 线下到RDS PG单向同步

 

如果线下数据库版本大于等于9.4,就可以使用 Lgical Decode实现;如果版本小于9.4,可以采用增量的数据同步,如xDB、Goldengate、 Smmetricds。

线上线下双向同步

线上线下双向同步用到的技术与之前的提到的技术类似,如xDB和Logical Decode都是支持双向同步的。

 

文章内所提到的所有案例的详细介绍文章链接如下:

 

TPC-C 测试软件

HammerDB:http://www.hammerdb.com/document.html

 

OLTP 性能评测

https://yq.aliyun.com/articles/35517

https://github.com/digoal/sysbench

 

PostgreSQL

网络延迟 瓶颈定量分析:https://yq.aliyun.com/articles/35176

 

同构全量迁移:

方法一:https://help.aliyun.com/document_detail/rds/rds_qs_pg/rds_qs_pg_00007.html

方法二:https://help.aliyun.com/knowledge_list/8314900.html

 

同构增量迁移

xDB:https://dts.console.aliyun.com/

 

异构全量迁移

https://help.aliyun.com/knowledge_list/8314900.html

https://dts.console.aliyun.com/

 

RT的优化

https://yq.aliyun.com/articles/35176

https://yq.aliyun.com/articles/35517

 

插件用法

auto_explain :http://www.postgresql.org/docs/9.5/static/auto-explain.html

pg_hint_plan:https://yq.aliyun.com/articles/7255

 

自建RDS PG的物理备库

https://yq.aliyun.com/articles/7255

 

OpenAPI

https://help.aliyun.com/document_detail/rds/OpenAPI-manual/RDS-OpenAPI-Invoke/rquest-structure.html

 

关于分享者 

德歌 PostgreSQL中国社区发起人、阿里云飞天八部数据库技术组技术专家


相关系列文章

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
SQL 关系型数据库 Serverless
阿里云关系型数据库RDS
阿里云关系型数据库RDS
16 2
|
4天前
|
运维 监控 关系型数据库
Serverless 应用引擎产品使用之在阿里云函数计算(FC)中,要访问另一个账号的rds配置rds的白名单如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
51 0
|
4天前
|
运维 容灾 关系型数据库
阿里云关系型数据库RDS
阿里云关系型数据库RDS概述
252 2
|
4天前
|
关系型数据库 MySQL 数据库
阿里云rds数据库简介和如何使用
该内容是一个关于如何在阿里云上准备和使用MySQL数据库的教程。首先,你需要注册阿里云账号并购买阿里云数据库MySQL服务,选择合适的配置如地域、版本和存储类型。然后,通过DMS(Data Management Service)管理数据库,包括查看数据库实例、登录、切换数据库、创建数据库和数据库导出。此外,还介绍了如何使用MySQL Workbench或命令行工具连接到RDS MySQL实例。教程详细提供了每一步的链接和操作指南。
|
4天前
|
消息中间件 NoSQL Kafka
云原生最佳实践系列 5:基于函数计算 FC 实现阿里云 Kafka 消息内容控制 MongoDB DML 操作
该方案描述了一个大数据ETL流程,其中阿里云Kafka消息根据内容触发函数计算(FC)函数,执行针对MongoDB的增、删、改操作。
|
4天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
24 0
|
4天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(下)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
13 0
|
4天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(上)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
20 0
|
2天前
|
关系型数据库 MySQL API
实时计算 Flink版产品使用合集之可以通过mysql-cdc动态监听MySQL数据库的数据变动吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
16 0
|
4天前
|
前端开发 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
26 0