云服务器内容精选

  • 准备测试数据 # 创建数据库 create database dump_database; # 登录dump_database数据库 \c dump_database # 创建表1并插入数据 create table dump_table(id int primary key, content char(50)); insert into dump_table values(1,'aa'); insert into dump_table values(2,'bb'); # 创建表2并插入数据 create table dump_table2(id int primary key, content char(50)); insert into dump_table2 values(1,'aaaa'); insert into dump_table2 values(2,'bbbb');
  • 常见问题 如果在使用pg_dump导出时,报错用户权限不足。 解决方法: 检查是否使用的root用户导出,如果不是root用户则会报权限不足;如果使用root用户导出,仍然提示没有权限,请检查数据库版本,root用户执行pg_dump命令需要内核版本为支持root提权的版本,支持root提权版本情况见root用户权限说明。 将备份的文件导入到RDS for PostgreSQL目标数据库时发现control_extension等几个函数报错。 解决方法: 由于目标库中自带这些函数,因此该报错可以忽略。
  • 订阅使用限制 为了确保使用Failover Slot,必须在发布端手工创建逻辑复制槽(Failover Slot),并通过create_slot = false关联已有复制槽,如下: CREATE SUBSCRIPTION sub1 CONNECTION 'host=192.168.0.1 port=5432 user=user1 dbname=db1' PUBLICATION pub_name with (create_slot = false,slot_name = FailoverSlot_name); 逻辑复制不会复制DDL变更,因此发布集中的表必须已经存在于订阅端上。 同一个数据库中,可以创建多个subscription,这些subscription可以来自一个或多个发布者。 订阅者的同一张表,不能接受来自同一个源的多个发布。 在创建subscription或者alter subscription时,可以使用enable来启用该订阅,或者使用disable暂停该订阅。 如果要完全删除订阅,使用DROP SUBSCRIPTION,注意,删除订阅后,本地的表不会被删除,数据也不会清除,仅仅是不在接收该订阅的上游信息。 如果订阅与复制槽相关联,就不能在事务块内部执行DROP SUBSCRIPTION。可以使用ALTER SUBSCRIPTION取消关联复制槽。 删除订阅可参考以下步骤: 在订阅端查询订阅关联的的复制槽。 select subname,subconninfo,subslotname from pg_subscription where subname = 'sub2'; subname为订阅者名称。 subconninfo为连接远程主机信息。 subslotname 为远程主机复制槽名称。 在订阅端执行ALTER SUBSCRIPTION取消关联复制槽并删除。 ALTER SUBSCRIPTION subname SET (slot_name = NONE); DROP SUBSCRIPTION subname; 在发布端删除关联的复制槽。 select pg_drop_replication_slot(' slot_name);
  • 语法参考 发布 CREATE PUBLICATION用于创建发布,DROP PUBLICATION用于移除发布,ALTER PUBLICATION用于修改发布。 发布创建之后,可以通过ALTER PUBLICATION动态地向发布中添加或移除表,这些操作都是事务性的。 订阅 CREATE SUBSCRIPTION用于创建订阅,DROP SUBSCRIPTION用于移除订阅,ALTER SUBSCRIPTION用于修改订阅。 订阅创建之后,可以通过ALTER SUBSCRIPTION随时暂停与恢复订阅。移除并重建订阅会导致同步信息丢失,这意味着相关数据需要重新进行同步。 具体使用说明请参考以下官方文档,以PostgreSQL 13版本为例: 创建发布:https://www.postgresql.org/docs/13/sql-createpublication.html 删除发布:https://www.postgresql.org/docs/13/sql-droppublication.html 修改发布:https://www.postgresql.org/docs/13/sql-alterpublication.html
  • 逻辑定义 发布可以被定义在任何物理复制的主服务器上。定义有发布的节点被称为发布者。发布是从一个表或者一组表生成的改变的集合,也可以被描述为更改集合或者复制集合。每个发布都只存在于一个数据库中。 订阅是逻辑复制的下游端。订阅被定义在其中的节点被称为订阅者。一个订阅会定义到另一个数据库的连接以及它想要订阅的发布集合(一个或者多个)。逻辑订阅者的行为与一个普通的PostgreSQL实例(主库)无异,逻辑订阅者也可以创建自己的发布,拥有自己的订阅者。
  • 发布使用限制 发布目前只能包含表(即:索引,序列号,物化视图这些不会被发布),每个表可以添加到多个发布中。 一个publication允许有多个订阅者。 允许使用all tables发布所有表。 在同一个数据库中,可以创建多个publication,但是不能重名。已创建的publication可以通过查询pg_publication获取。 发布可以筛选所需的变更类型:包括insert、update、delete 和truncate的任意组合,类似触发器事件,默认所有变更都会被发布。 例如:发布表t1的update和delete操作。 CREATE PUBLICATION update_delete_only FOR TABLE t1 WITH (publish = 'update, delete') ; 复制标识:当发布了表的update, delete时,表必须设置复制标识(Replica Identity),如果设置了nothing,则执行update, delete时会报错。 表上的复制标识可以通过查阅pg_class.relreplident获取。 这是一个字符类型的“枚举”,标识用于组装 “复制标识” 的列:d = default ,f = 所有的列,i 使用特定的索引,n 没有复制标识。 表上是否具有可用作复制标识的索引约束,可以通过以下查询获取: SELECT quote_ident(nspname) || '.' || quote_ident(relname) AS name, con.ri AS keys, CASE relreplident WHEN 'd' THEN 'default' WHEN 'n' THEN 'nothing' WHEN 'f' THEN 'full' WHEN 'i' THEN 'index' END AS replica_identity FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid, LATERAL (SELECT array_agg(contype) AS ri FROM pg_constraint WHERE conrelid = c.oid) con WHERE relkind = 'r' AND nspname NOT IN ('pg_catalog', 'information_schema', 'monitor', 'repack', 'pg_toast') ORDER BY 2,3; 复制标识配置 表到复制标识可以通过ALTER TABLE进行修改。 ALTER TABLE table_name REPLICA IDENTITY { DEFAULT | USING INDEX index_name | FULL | NOTHING }; -- 具体有四种形式 ALTER TABLE t_normal REPLICA IDENTITY DEFAULT; -- 使用主键,如果没有主键则为FULL ALTER TABLE t_normal REPLICA IDENTITY FULL; -- 使用整行作为标识 ALTER TABLE t_normal REPLICA IDENTITY USING INDEX t_normal_v_key; -- 使用唯一索引 ALTER TABLE t_normal REPLICA IDENTITY NOTHING; -- 不设置复制标识 复制标识在实际使用中的注意事项 表上有主键,使用默认的default复制标识。 表上没有主键,但是有非空唯一索引,显式配置index复制标识。 表上既没有主键,也没有非空唯一索引,显式配置full复制标识(运行效率非常低,仅能作为兜底方案)。 其他所有情况,都无法正常完成逻辑复制功能。输出的信息不足,可能会报错。 特别需要注意:如果nothing复制标识的表纳入到逻辑复制中,对其进行删改会导致发布端报错。
  • 实现原理 RDS for PostgreSQL跨区域容灾实现原理说明: 在两个数据中心独立部署RDS for PostgreSQL实例,通过RDS接口将生产中心RDS for PostgreSQL库中的数据同步到灾备中心RDS for PostgreSQL库中,实现RDS for PostgreSQL主实例和跨区域灾备实例之间的实时同步。使用该功能前,必须需要确认可以使用云连接服务完成跨区域网络连通。 图1 原理图
  • 约束条件 主实例和灾备实例状态正常,主实例和灾备实例在不同云或不同区域上,且主实例为主备实例,灾备实例为单机实例。 主实例配置容灾能力成功后才能配置灾备实例容灾能力,否则容灾关系会建立失败。 灾备实例的规格要大于等于主实例的规格。 RDS for PostgreSQL 12及以上支持建立跨云或跨区域容灾关系。 不支持跨大版本建立跨云或跨区域容灾关系。 主实例和灾备实例的容灾关系已建立完成,才能进行灾备实例升主和查询容灾复制状态。 实施前确认需要搭建的主实例和灾备实例所在区域,处于云连接/虚拟专有网络服务已上线区域内。 灾备实例不支持PITR恢复和CBR快照备份功能,如需使用此功能,请在主实例上完成。
  • 独享型实例测试列表 表1 CPU:内存=1:2 CPU(Core) 内存(GB) TPS QPS IOPS 2 4 373.53 7470.64 请参见关于IOPS 4 8 748.80 14976.09 8 16 1563.35 31266.94 16 32 1873.68 37473.69 表2 CPU:内存=1:4 CPU(Core) 内存(GB) TPS QPS IOPS 2 8 472.01 9440.15 请参见关于IOPS 4 16 994.46 19889.28 8 32 1806.45 36129.18 16 64 2551.62 51032.43 表3 CPU:内存=1:8 CPU(Core) 内存(GB) TPS QPS IOPS 2 16 463.48 9269.67 请参见关于IOPS 4 32 1103.30 22065.92 8 64 1996.53 39930.74 16 128 3778.67 75573.89
  • 独享型实例测试列表 表1 CPU:内存=1:4 CPU(Core) 内存(GB) TPS QPS IOPS 2 8 437.45 8748.99 请参见关于IOPS 4 16 896.84 17936.72 8 32 1819.93 36398.77 16 64 2600.93 52018.73 32 128 5428.06 108572.08 64 256 12102.77 242079.30 表2 CPU:内存=1:8 CPU(Core) 内存(GB) TPS QPS IOPS 2 16 528.85 10577.07 请参见关于IOPS 4 32 1002.06 20041.23 8 64 1904.04 38080.91 16 128 3928.59 78572.08 64 512 7485.78 149732.20
  • 独享型实例测试列表 表1 CPU:内存=1:4 CPU(Core) 内存(GB) TPS QPS IOPS 2 8 446.71 8934.16 请参见关于IOPS 4 16 986.52 19730.43 8 32 1766.29 35325.94 16 64 2352.55 47051.10 32 128 3731.23 74624.84 64 256 10929.30 218608.04 表2 CPU:内存=1:8 CPU(Core) 内存(GB) TPS QPS IOPS 2 16 534.28 10685.51 请参见关于IOPS 4 32 1102.75 22054.95 8 64 1998.56 39971.41 16 128 3821.89 76438.29 64 512 7633.83 152694.09
  • 通用型实例测试列表 表1 CPU:内存=1:2 CPU(Core) 内存(GB) TPS QPS IOPS 1 2 185.21 3704.27 请参见关于IOPS 2 4 371.97 7439.43 4 8 821.00 16420.05 8 16 1517.95 30358.98 表2 CPU:内存=1:4 CPU(Core) 内存(GB) TPS QPS IOPS 2 8 431.72 8634.30 请参见关于IOPS 4 16 926.94 18538.85 8 32 1827.36 36547.27
  • 资源规划 表1 资源规划 类别 子类 规划 备注 生产中心VPC VPC名称 vpc-pg-01 自定义,易理解可识别。 所属Region 华东-上海一 选择和自己业务区最近的Region,减少网络时延。 可用区 可用区一 - 子网网段 192.168.10.0/24 子网选择时建议预留足够的网络资源。 子网名称 subnet-2aa1 自定义,易理解可识别。 灾备中心VPC VPC名称 vpc-pg-02 自定义,易理解可识别。 所属Region 华北-北京四 选择和自己业务区最近的Region,减少网络时延。 可用区 可用区一 - 子网网段 192.168.20.0/24 子网选择时建议预留足够的网络资源。 子网名称 subnet-a388 自定义,易理解可识别。 生产中心RDS for PostgreSQL实例 RDS实例名称/ID rds-pg-01 04**in03 自定义,易理解可识别。 所属Region 华东-上海一 选择和自己业务区最近的Region,减少网络时延。 数据库版本 PostgreSQL 12 - 内网IP 192.168.10.117 - 实例类型 主备 生产中心实例为主备。 存储类型 SSD云盘 - 可用区 可用区一、可用区三 - 性能规格 独享型 2 vCPUs | 4GB - 磁盘容量 40 GB - 灾备中心RDS for PostgreSQL实例 RDS实例名称/ID rds-pg-02 5f**in03 自定义,易理解可识别。 所属Region 华北-北京四 选择和自己业务区最近的Region,减少网络时延。 数据库版本 PostgreSQL 12 - 内网IP 192.168.20.69 - 实例类型 单机 灾备中心实例为单机。 存储类型 SSD云盘 - 可用区 可用区一 - 性能规格 独享型 8 vCPUs | 16GB 灾备中心实例的CPU和内存规格要大于或等于主实例的规格。 磁盘容量 100 GB 灾备中心实例的磁盘容量要大于或等于主实例的磁盘容量。 父主题: RDS for PostgreSQL搭建跨区域容灾关系
  • RDS for PostgreSQL内核版本说明 RDS for PostgreSQL支持的社区版本的发布日期和版本更新说明如下表所示。 表1 内核版本发布记录 发布日期 支持的社区版本 版本更新说明 2024-03 16.2 15.6 14.11 13.14 12.18 主要更新以下内容: 引入16版本。 同步社区最新的代码,修复CVE-2024-0985等安全漏洞和功能性问题。 更多版本发布说明: 社区16版本发布说明 社区16.2、15.6、14.11、13.14、12.18版本发布说明 2023-12 15.5 14.10 13.13 12.17 11.22 主要更新以下内容: 同步社区最新的代码,修复CVE-2023-5868、CVE-2023-5869、CVE-2023-5870等安全漏洞和功能性问题。 更多版本发布说明: 社区15.5、14.10、13.13、12.17、11.22版本发布说明 2023-09 15.4 14.9 13.12 12.16 11.21 主要更新以下内容: 引入15版本。 同步社区最新的代码,修复CVE-2023-34917、CVE-2023-39418等安全漏洞和功能性问题。 更多版本发布说明: 社区15.4版本发布说明 社区14.9、13.12、12.16、11.21版本发布说明 2023-08 14.8 13.11 12.15 11.20 主要更新以下内容: 同步社区最新的代码,修复CVE-2023-2454、CVE-2023-2455等安全漏洞和功能性问题。 更多版本发布说明: 社区14.8、13.11、12.15、11.20版本发布说明 2023-04 14.6 13.9 12.13 11.18 10.23 主要更新以下内容: 支持pgl_ddl_deploy插件。 升级zhparser插件版本。 更多插件信息: 不同内核版本支持的插件不同,详见RDS for PostgreSQL引擎支持的插件。 2022-12 14.6 13.9 12.13 11.18 10.23 主要更新以下内容: 同步社区最新的代码,修复安全漏洞和功能性问题。 更多版本发布说明: 社区14.6、13.9、12.13、11.18、10.23版本发布说明 2022-07 14.4 13.7 12.11 11.16 10.21 主要更新以下内容: 引入14版本。 同步社区最新的代码,修复CVE-2022-1552等安全漏洞和功能性问题。 更多版本发布说明: 社区14.4版本发布说明 社区13.7、12.11、11.16、10.21版本发布说明 2022-04 13.6 12.10 11.15 10.20 9.6.24 主要更新以下内容: 同步社区最新的代码,修复安全漏洞和功能性问题。 更多版本发布说明: 社区13.6、12.10、11.15、10.20、9.6.24版本发布说明 2021-04 13.2 12.6 11.11 10.16 9.6.21 9.5.25 主要更新以下内容: 引入13版本。 同步社区最新的代码,修复安全漏洞和功能性问题。 支持Failover Slot,详见逻辑订阅故障转移(Failover Slot)。 更多版本发布说明: 社区13.2、12.6、11.11、10.16、9.6.21、9.5.25版本发布说明 2020-03 12.2 / 2019-12 9.5.19 / 2019-11 11.5 10.10 9.6.15 / 2019-08 11.4 9.6.13 9.5.17 / 2019-07 11.2 10.8 / 2019-06 9.5.15 / 2019-03 10.6 9.6.11 / 2019-01 11.0 / 2018-11 10.3 / 2018-03 9.6.5 / 2018-02 9.6.3 / 2017-10 9.5.5 / 父主题: RDS for PostgreSQL内核
  • 避免绑定EIP直接通过公网访问RDS for PostgreSQL 避免RDS for PostgreSQL部署在公网或者DMZ里,应该将RDS for PostgreSQL部署在华为云内部网络,使用路由器或者防火墙技术把RDS for PostgreSQL保护起来,避免直接绑定EIP方式从公网访问RDS for PostgreSQL。通过这种方式防止未授权的访问及DDos攻击等。建议解绑弹性公网IP外部链接,如果您的业务必须绑定EIP,请务必通过设置安全组规则限制访问数据库的源IP。