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

直播视频:

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

(点击图片查看视频)

幻灯片下载地址: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 PG性能评测与瓶颈分析

 

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

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

图二 TPC-B实例诊断

  

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

同构全量迁移

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

图三 同构全量迁移


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

同构增量迁移

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

异构全量迁移

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

异构增量迁移

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


图四 异构增量迁移


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

 

RDS PG使用最佳实践

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

备份与恢复

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

图五 备份与恢复


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

RT的优化

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

插件用法

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

 

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

图六 插件用法


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

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

安全与审计

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

图七 安全和审计


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

规格升降级

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

分布式用法

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

图八 分布式用法


尽管目前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 PG最佳实践

图九 诊断实践


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

事件通知

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


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

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

图十 阿里云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到线下单向同步有两种方式,一是通过使用RDS PG提供的alidecode插件,在异地创建RDS PG的逻辑备库。在用户端的数据库可以是和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中国社区发起人、阿里云飞天八部数据库技术组技术专家


相关系列文章

上一篇:关于html5与jsp页面同样的html代码展示的页面效果不一样的问题


下一篇:分区表学习笔记