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

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

直播视频:


(点击图片查看视频)

幻灯片下载地址: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:根据购买的内存规格设定。


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

 

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


图二 TPC-B实例诊断

  

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

同构全量迁移


图三 同构全量迁移


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

同构增量迁移

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

异构全量迁移

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

异构增量迁移



图四 异构增量迁移


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

 

RDS PG使用最佳实践

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

备份与恢复


图五 备份与恢复


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

RT的优化

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

插件用法

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

 


图六 插件用法


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

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

安全与审计


图七 安全和审计


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

规格升降级

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

分布式用法


图八 分布式用法


尽管目前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一模一样的备库,则可以通过流复制或者归档来完成。

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

诊断实践


图九 诊断实践


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

事件通知

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


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


图十 阿里云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功能。


数据同步


图十一 数据同步


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

RDS PG到线下单向同步

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

线下到RDS PG单向同步


图十二 线下到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中国社区发起人、阿里云飞天八部数据库技术组技术专家


相关系列文章

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
存储 关系型数据库 MySQL
MySQL——数据库备份上传到阿里云OSS存储
MySQL——数据库备份上传到阿里云OSS存储
161 0
|
7天前
|
SQL DataWorks 关系型数据库
阿里云 DataWorks 正式支持 SelectDB & Apache Doris 数据源,实现 MySQL 整库实时同步
阿里云数据库 SelectDB 版是阿里云与飞轮科技联合基于 Apache Doris 内核打造的现代化数据仓库,支持大规模实时数据上的极速查询分析。通过实时、统一、弹性、开放的核心能力,能够为企业提供高性价比、简单易用、安全稳定、低成本的实时大数据分析支持。SelectDB 具备世界领先的实时分析能力,能够实现秒级的数据实时导入与同步,在宽表、复杂多表关联、高并发点查等不同场景下,提供超越一众国际知名的同类产品的优秀性能,多次登顶 ClickBench 全球数据库分析性能排行榜。
|
4月前
|
人工智能 关系型数据库 MySQL
基于阿里云的PolarDB MySQL版实现AI增强数据管理
本文将介绍如何利用阿里云的PolarDB MySQL版结合AI技术,实现数据管理的自动化和智能化。
296 0
|
1月前
|
关系型数据库 MySQL 数据库
MySQL数据库:基础概念、应用与最佳实践
一、引言随着互联网技术的快速发展,数据库管理系统在现代信息系统中扮演着核心角色。在众多数据库管理系统中,MySQL以其开源、稳定、可靠以及跨平台的特性受到了广泛的关注和应用。本文将详细介绍MySQL数据库的基本概念、特性、应用领域以及最佳实践,帮助读者更好地理解和应用MySQL数据库。二、MySQL
98 5
|
3月前
|
弹性计算 关系型数据库 MySQL
新一期陪跑班开课啦!阿里云专家手把手带你体验RDS通用云盘核心能力
本次课程将手把手带领用户创建一个云数据库RDS MySQL(通用云盘),并通过云服务器ECS对RDS MySQL实例进行压测,体验IO加速和IO突发带来的性能提升;并通过DMS执行DDL,将数据归档到OSS,再结合云盘缩容,体验数据归档带来的成本优势。
|
3月前
|
关系型数据库 MySQL 网络安全
阿里云安装Mysql
阿里云安装Mysql
221 1
|
3月前
|
关系型数据库 数据库 数据安全/隐私保护
"告别繁琐!Python大神揭秘:如何一键定制阿里云RDS备份策略,让数据安全与效率并肩飞,轻松玩转云端数据库!"
【8月更文挑战第14天】在云计算时代,数据库安全至关重要。阿里云RDS提供自动备份,但标准策略难以适应所有场景。传统手动备份灵活性差、管理成本高且恢复效率低。本文对比手动备份,介绍使用Python自定义阿里云RDS备份策略的方法,实现动态调整备份频率、集中管理和智能决策,提升备份效率与数据安全性。示例代码演示如何创建自动备份任务。通过自动化与智能化备份管理,支持企业数字化转型。
88 2
|
3月前
|
存储 C# 关系型数据库
“云端融合:WPF应用无缝对接Azure与AWS——从Blob存储到RDS数据库,全面解析跨平台云服务集成的最佳实践”
【8月更文挑战第31天】本文探讨了如何将Windows Presentation Foundation(WPF)应用与Microsoft Azure和Amazon Web Services(AWS)两大主流云平台无缝集成。通过具体示例代码展示了如何利用Azure Blob Storage存储非结构化数据、Azure Cosmos DB进行分布式数据库操作;同时介绍了如何借助Amazon S3实现大规模数据存储及通过Amazon RDS简化数据库管理。这不仅提升了WPF应用的可扩展性和可用性,还降低了基础设施成本。
77 0
|
4月前
|
关系型数据库 Serverless 数据库
函数计算产品使用问题之如何访问阿里云的RDS
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
3月前
|
关系型数据库 MySQL 数据库连接
绝对干货!从MySQL5.7平滑升级到MySQL8.0的最佳实践分享
绝对干货!从MySQL5.7平滑升级到MySQL8.0的最佳实践分享
134 0