從應用程式觀點看的逆向引用RDS for PostgreSQL
本文是2018年 PostgreSQL 博文日历的第五天文章。
撰写该文章的背景
-
- 理由
AWS RDS for PostgreSQLがリリースされてから数年が経ち、PostgreSQLのクラウド運用が増えているため
クラウドは便利で多機能だが、やりたいことの情報にたどり着くのが大変なため
上記のことから(自分含め)逆引き辞典があれば便利かもと思った次第です
前提条件 tí
-
- 本記事の情報は執筆日(2018/12/01)現在のものです
- PostgreSQL以外の汎用的な話もあります
使用反向索引
我希望部署(或搭建)PostgreSQL。
要部署PostgreSQL,需要调用CreateDBInstance API。在此时,请将Engine参数设置为postgres。
另外,您可以轻松地通过AWS控制台进行部署,只需点击几下即可。(以后的API操作也大部分可以在控制台上完成)
想要创建冗长的结构
通过将CreateDBInstance的MultiAZ参数设置为True,可以实现冗余配置。
通过设置为MultiAZ,可以保证区域级别(数据中心级别)的完全冗余性。
此外,在发生故障时,待机系统升级时,端点(CNAME)会自动切换。
因此,通过从应用程序访问CNAME,即使在发生故障时也可以实现自动恢复。
我想从已经存在的PostgreSQL迁移。
有以下几种方式可供选择。
-
- PostgreSQLの機能を使って移行する
pg_dump -> pg_restore
\copy to -> \copy from
AWSの機能を使って移行する
AWS DMS
最近某社が実運用に基づいたスライドを公開していたので興味がある方は調べてみてください
有关详细信息也在AWS的页面上介绍了
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html
在导入 PostgreSQL 数据时,请注意以下几点。
-
- DBインスタンスのバックアップを無効にしてください。
MultiAZをFales(無効)にしてください。
我认为这是为了提高进口速度而不必花费多余的金钱。
进口速度的提升原因是什么。
-
- バックアップを無効=WALの書き出しがなくなるため
MultiAZを止めると書き出し量が1/2になるため
大量数据的快速导入可以参考以下文章:
https://lets.postgresql.jp/documents/technical/bulkload/1
我想要指定版本。
指定CreateDBInstance函数的EngineVersion参数。
目前编写日的最新支持版本是v10.5。(v11也有预览版本,所以应该只是时间问题)
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts
我想要限制访问
可以使用 SecurityGroup 来限制 CIDRIP 或指定 SecurityGroup。尽管 PostgreSQL 使用 pg_hba.conf 文件进行限制,但由于 RDS 无法访问操作系统,因此需要使用 SecurityGroup。
我想要备份。
我们可以说备份是DBMS运营的命运。在PostgreSQL中,采用了以下备份方法。
pg_dump or pg_dumpall
物理バックアップ
pg_rman
http://ossc-db.github.io/pg_rman/index-ja.html
etc…
在RDS上可以使用pg_dump等工具进行备份。
但是,RDS还提供强大的备份支持。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html
我想要自動備份。
请将 CreateDBInstance 的 BackupRetentionPeriod 参数设为大于等于1的值。
这样会自动进行参数指定天数的备份。
自动备份具有以下特点。
-
- 通常5分以内までのバックアップが常に取得されます。
-
- 1日に1度DBインスタンス全体のバックアップを取得します。
MultiAZ構成をとっていないとI/Oの瞬断があるのでPreferredBackupWindowでバックアップの時間を調整できます。
指定した日数を過ぎるとバックアップは順次削除されてしまうことに注意してください。
静止点を残しておきたい場合は手動でバックアップを取得してください。
关于恢复方法,稍后会详细说明。
我想要手动备份。
请使用CreateDBSnapshot、pg_dump或pg_dumpall进行操作。由于无法访问操作系统,无法手动进行物理备份。
我想从备份中恢复数据。
只获取备份是不足以进行操作的。
只有能够进行还原才能说备份成功。
在PostgreSQL中,有以下恢复方法。
-
- pg_restore
-
- 物理バックアップからのリストア
recovery.confを利用したPoint In Time Recovery(PITR)
使用RDS获取的备份可以轻松进行恢复。
请注意,恢复操作会生成一个新的DBInstance。
我想從自動備份中恢復。
你可以使用RestoreDBInstanceToPointInTime函数来进行操作。通过使用SourceDBInstanceIdentifier参数指定自动备份的DBInstance的ID,然后利用RestoreTime参数将其恢复到任意时间点的状态。
想要从手动备份中恢复
使用RestoreDBInstanceFromDBSnapshot来进行操作。
在DBSnapshotIdentifier参数中指定DBSnapshot的ID。
我想要升级版本
在使用过程中,升级PostgreSQL版本是令人困扰的事情。
这不是一件简单的工作,需要进行各种验证,如pg_upgrade等。
RDS支持主/次版本的升级。
详见:https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.PostgreSQL.html
我想要升级到一个更高版本
通过使用API手动升级主要版本。
更改ModifyDBInstance的EngineVersion参数。
如果参数组中存在不兼容的参数,则DBInstance将无法启动,请进行充分验证。
想要进行小版本升级
请将RDS的次要版本进行测试,并可以自动升级。
请将CreateDBInstance的AutoMinorVersionUpgrade设置为True。
想要进行严密监视
由于RDS服务进行了活跃监控,因此无需用户进行监控。
通常可以使用Zabbix或mackerel等监控软件进行监控,也无需执行SELECT 1等操作,节省了这些繁琐的步骤。
我想要进行性能监控。
在对 PostgreSQL 进行性能监控时,有多种方法可供选择。
-
- 監視ソフトウェア
pg_statsinfo
http://pgstatsinfo.sourceforge.net/documents/statsinfo3.2/pg_statsinfo-ja.html
自前スクリプトで取得
etc…
我想获取机器资源信息。
RDS会使用CloudWatch自动收集数据。
您可以轻松从控制台中进行确认。
同时,通过在CloudWatch中设置阈值,可以触发警报。
我想了解慢查询。
与一般的的PostgreSQL操作类似,可以通过参数组设置log_min_duration_statement参数。
可以从控制台日志中查看慢查询。
我想要提升性能。
如果关系型数据库的性能不足,可以通过扩容、调优或优化查询等方式进行处理。
由于RDS是云服务,因此可以轻松选择扩容选项。
想要升级CPU和内存。
修改DBInstance的DBInstanceClass参数。
DBInstance的性能有各种选择。
然而,当前版本中最新的db.m5世代并不支持PostgreSQL。
(个人认为,最初可能会优先支持MySQL、MariaDB和Oracle。)
我希望提高IO性能和增加磁盘容量
磁盘性能与磁盘的大小成正比。
基准性能为100 GiB的卷的IOPS为300,而1 TiB的卷的IOPS为3000。超过3.34 TiB的卷的基准性能为10,000 IOPS。
然而,如果是临时负载的情况,系统具有突发性能保障功能。
即使是小于1TiB的卷大小,也能在长时间内达到3000 IOPS的爆发性能。
如果需要进行更改,则设置ModifyDBInstance命令的AllocatedStorage参数。
如果您想保证更高的性能,请使用PorvisionedIOPS。
如需进行更改,请将ModifyDBInstance的StorageType参数设置为io1,并设置Iops参数。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_Storage.html#USER_PIOPS
我想要调整参数
在PostgreSQL中,可以通过参数组来进行参数调优。DBInstance和ParameterGroup是通过N:M的关系绑定在一起的,所以将创建的参数组通过ModifyDBInstance的DBParameterGroupName进行设置。实际的postgresql.conf的值是通过ModifyDBParameterGroup来设置在参数组中。
我想要使用擴展功能。
在PostgreSQL中有许多扩展功能。
然而,可管理的服务RDS存在一些限制。
而且,由于无法登录操作系统,因此无法由用户进行扩展。
想要使用程序语言
手続き语言支持各种类型。 (URL: https://aws.amazon.com/jp/rds/postgresql/)
PostgreSQL 包含了四种语言扩展,分别是 Perl、pgSQL、Tcl 和 JavaScript(使用 V8 JavaScript 引擎)。
请注意,纯正的PostgreSQL与稍有不同的产品系列。
我想要使用擴展功能。
RDS支持各种扩展功能。
https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts.General.FeaturesExtensions
它支持PostGIS,但并不支持所有的contrib模块。
在使用的DBInstance中执行命令会显示支持的扩展功能列表。
SHOW rds.extensions;
我想实现复制配置(参考分散)。
通过执行CreateDBInstanceReadReplica命令,可以创建用于引用分散的读取副本,与冗余备份不同。
最后
-
- 間違っていたり、もっとよい方法があれば教えて欲しいです?
- 明日は @kaigai さんの担当になります?