帮助与文档

我们为你提供丰富、详尽的使用指南以及产品文档

QingCloud PolonDB用户手册

PolonDB简介

​ PolonDB是基于PostgreSQL和Citus构建的一款HTAP分布式关系型数据库。

​ Citus是PostgreSQL的扩展(not a fork),采用shared nothing架构,节点之间无共享数据,由协调器节点和Work节点构成一个数据库集群。相比单机PostgreSQL,Citus可以使用更多的CPU核心,更多的内存数量,保存更多的数据。通过向集群添加节点,可以轻松的扩展数据库。 ​ Citus支持新版本PostgreSQL的特性,并保持与现有工具的兼容 Citus使用分片技术在多台机器上横向扩展PostgreSQL。它的查询引擎将在这些服务器上执行SQL进行并行化查询,以便在大型数据集上实现实时的响应。

image-PolonDBJieMian

PolonDB快速入门

PolonDB节点介绍

PolonDB在服务器端口信息栏,提供三个节点IP

  • 协调器节点

    可以执行任何SQL操作的节点

  • 高性能节点

    不可以进行创建对象的操作,如: create table/create view等

  • 高性能只读节点

    不可以进行写入的操作

    PolonDB高阶使用,拥有更详细介绍

PolonDB业务编写

所有操作步骤均可以通过协调器节点执行

  • 通过协调器节点创建一个普通表

     create table aa(id int)
    
  • 通过协调器节点将普通表转换成分布式表

     select create_distributed_table('aa', 'id')
    
  • 使用分布式表

    修改操作在协调器节点和高性能节点均可以执行,查询操作可以在高性能只读节点进行

     insert into aa select generate_series(1, 10000);
     select count(*) from aa;
    
  • 使用视图

    在协调器节点执行

     create view view_aa as select * from aa;
     -- 只在协调器节点创建
       
     select run_command_on_workers($cmd$ create view view_aa as select * from aa $cmd$);
     -- 在所有节点创建
    

    可以通过任意节点查询视图

      qingcloud=> select count(*) from view_aa;
      count 
     -------
      10000
     (1 row)
    
  • 使用函数

    在协调器节点执行

     CREATE FUNCTION func_aa(a int) RETURNS VOID LANGUAGE SQL AS $$ insert into aa values(1) $$;
     -- 只在协调器节点创建
       
     select run_command_on_workers($cmd$ CREATE FUNCTION func_aa(a int) RETURNS VOID LANGUAGE SQL AS $$ insert into aa values(1) $$ $cmd$);
     -- 在所有节点创建
    

    在非高性能只读节点执行

     select func_aa();
    

    在任意节点执行

     qingcloud=> select count(*) from aa;
      count 
     -------
      10001
     (1 row)
    

PolonDB详细介绍

PolonDB架构

image-GaoKeYongJiaGou

  • 协调器和Worker节点均通过PostgreSQL流复制做了高可用

  • 高可用管理节点负责高可用的管理和故障转移等功能

  • 协调器将 tab 表进行分片,表的实际数据存储在 tab_x 中, tab 表不存储任何数据

PolonDB各项指标

PolonDB性能指标

TPC-C标准性能

测试环境:qingcloud公有云[北京三区]

测试规格:企业型e2

cpu:32核心

内存:64G

存储类型:企业级存储

测试工具:benchmarkSQL 5.0

TPMC:每分钟事务处理数

仓库数量:5000

磁盘数据量:530G

测试时长:10分钟

模拟环境:模拟实际生产环境的数据可用性(polondb默认设置)

节点数量:1协调器 + 4Worker节点 + 1benchmarkSQL节点

  • TPMC性能数据
连接数 PolonDB PostgreSQL单机
100 8.2万(82374.26) 5.3万(53326.85)
200 9.9万(98180.61) 4.6万(46151.3)
400 9.7万(97623.09) 3.4万(34089.88)
800 8.5万(85497.77) 1.9万(19651.36)
TPC-B标准性能

测试环境:qingcloud公有云[北京三区]

测试规格:企业型e2

cpu:32核心

内存:64G

存储类型:企业级存储

测试工具:pgbench(原始模式,未作任何提升性能的修改)

TPMC:每分钟事务处理数

QPM:每分钟查询数

数据量:30亿条

磁盘数据量:400G

测试时长:10分钟

模拟环境:模拟实际生产环境的数据可用性(polondb默认设置)

节点数量:1协调器 + 8Worker节点 + 1pgbench节点

  • TPMC性能数据
连接数 PolonDB PostgreSQL单机
200 52.0万(520440) 12.4万(124680)
400 54.7万(547020) 14.0万(140160)
800 61.4万(614160) 13.8万(138360)
1000 59.7万(597120) 9.2万(92100)
  • QPM性能数据
连接数 PolonDB(只读节点可以充分发挥硬件加倍查询性能) PostgreSQL单机
200 351.7万(3517320) + 只读节点 = 703.4万 15.8万(158940)
400 386.9万(3869700) + 只读节点 = 773.3万 16.2万(162720)
800 355.2万(3552060) + 只读节点 = 710.4万 16.5万(165300)
1000 339.5万(3395460) + 只读节点 = 679.0万 16.3万(163860)
  • 4 个Worker节点数据
测试项 PolonDB
800连接(TPMC) 32.3万(323340)
800连接(QPM) 94.2万(942600)

PolonDB弹性数据

  • 节点数量

    2 - 64个节点区间可供选择

  • 内存数据

    最大支持16T内存

  • CPU数据

    最大支持4096个CPU

  • 存储数据

    最大支持3.2PB存储

  • 数据库连接数

    • 协调器节点

      max_connections 参数值为最大支持的连接数

    • 高性能节点/高性能只读节点

      max_connections × 节点数量 / 2 = 最大支持连接数(估算值)

      连接数的可用性与业务特征有关,例如较为复杂的查询业务,会消耗更多的连接给PolonDB内部使用

      纵向扩容增加内存可以自动提升连接数

PolonDB高可用

  • PolonDB默认采用半同步模式

    当集群正常时,采用同步模式运行。当备机出现异常时,会自动转换成异步模式。当备机恢复正常时,再次自动转换为同步模式。

  • 使用异步模式

    设置参数 synchronous_commit = local 可以变成异步模式。

    异步模式的数据安全性比较低,有数据丢失风险

PolonDB修改参数

image-XiuGaiCanShu

  • 需重启的参数

    需重启生效的参数由 [restart] 进行标识

  • 参数单位

    参数单位由 [unit: MB] 进行标识

  • 自动设置的参数

    自动进行最优设置的参数由 [0 is automatic set.] 进行标识

PolonDB分布式表

  • 本地表

    在协调器节点由 create table 创建的普通表

  • 分布式表

    在协调器节点经 create_distributed_table('table', 'column') 处理过的本地表, table 需要转换成分布式的表, column 根据该列进行hash运算并进行分片

    分布式表的数据通过分布式列的hash进行计算,将数据存储到不同的分片表中

    业务应使用此种表类型

  • 参考表

    在协调器节点经 create_reference_table 处理过的本地表

    参考表在所有Worker上拥有相同的数据

PolonDB扩容缩容

PolonDB纵向扩容缩容

image-ZhiLing

  • 点击 扩容集群 ,并根据提示进行扩容

PolonDB横向扩容缩容

前提条件
  • wal_level 需设置为 logical (默认 replica )。
  • logical_replication_polondb 需设置为 true (默认 true
扩容方法

image-addNode

点击 新增节点 ,输入需要新增加的节点数量即可新增Worker节点。

缩容方法

image-removeNode

选择需要删除的节点,点击 删除 即可,主节点与副本节点需同时选中,只能删除Worker节点。

扩容缩容的影响

在扩容缩容运行的期间会对业务造成极其微小的影响,以提供其最大可用性,具体如下:

  • 极其微短的时间会提示表不存在的错误。
  • 可能会提示连接异常断开的错误。
特殊操作说明
配置组

PolonDB会逐表进行处理,因此表的处理都是独立的

  • 当需要将两个业务相关表同时处理,以降低最小影响时。
-- 在协调器节点 postgres库操作

insert into qc_rebalance_params(dbname, group_table) values ('qctest', '1-public.a, 1-public.b, 2-public.c, 2-public.d')
insert into qc_rebalance_params(dbname, group_table) values ('qctest', '3-public.e, 3-public.f, 3-public.g')

-- 我们在qctest库下配置了'1' '2' '3'三个组,‘1’组由public.a和public.b组成,'2'组由public.c和pulic.d组成,‘3’组由public.e和public.f和public.g组成
处理顺序优先级

PolonDB会逐表进行处理,因此表的处理顺序会有先后之分

  • 当需要优先处理重要的表,以降低最小影响时,可以配置优先级
-- 在协调器节点 postgres库操作
insert into qc_rebalance_params(dbname, priority_table) values ('qctest', '1-public.a, 1-public.b, 2-public.c, 3-public.d)

-- 我们在qctest库下配置了‘1‘ ’2‘ ’3‘个优先级(1的优先级最高,以此类推),同样优先级的情况下前表的优先级高于后表(public.a的优先级高于public.b)

PolonDB监控

数据库指标监控

image-DatabaseMonitor

  • 监控 栏选择需要监控的节点,点击中间 服务 按钮即可查看连接数和事务提交数

数据库主机资源监控

image-ComputerMonitor

  • 监控 栏选择需要监控的节点,点击中间 资源 按钮即可查看CPU/内存等计算机资源

PolonDB日常操作

启动

image-ZhiLing

  • 点击 启动 按钮

关闭

image-ZhiLing

  • 点击 关闭 按钮

重启

image-ZhiLing

  • 点击 重启 按钮

切换私有网络

image-ZhiLing

  • 点击 切换私有网络 按钮,根据提示进行

    切换私有网络会重启集群

PolonDB节点角色

image-NodeRole

  • 点击 节点角色 即可查看,通过 node 列可以查看到集群的从属关系,通过 role 列可以查看到角色状态。

  • 角色状态

    • primary :主节点
    • standby :备节点
    • unknown :获取节点状态失败

带有 副本 标识的节点并不代表PolonDB集群的备节点,仅代表节点是一个组

image-NodeRoleNode

PolonDB备份恢复

自动备份集群

  • 在集群创建的时候指定自动备份策略。

  • 在集群创建后,点击 修改自动备份策略 后,选择合适的时间即可。

image-backupRestore

手动备份集群

查看上图,点击 创建备份 ,即可弹出备份窗口

当集群节点变化,或是增量备份链达到30个后,会自动进行全量备份(创建新备份链),增量备份可以节省很多磁盘

PolonDB在备份的时候,可能会对业务的写入产生短暂的阻塞影响,建议在业务低峰期进行

image-manualBackup

恢复集群

选择所需恢复的备份,点击 从备份创建集群 即可

image-manualRestore

PolonDB数据库用户

  • 初始化用户

    创建集群时默认创建 qingcloud 用户(配置参数 user_name 可以配置用户),该用户具有 create user 权限,没有 DBA 权限( 在分布式数据库中 DBA 权限可以修改集群间的关系,导致集群不能自动进行云服务化)。

  • 新建数据库用户

    可以通过初始化用户创建新的用户。

    在协调器创建用户的同时,注意使用run_command_on_workers为Worker创建用户

PolonDB创建数据库

image-ZhiLing

  • 点击 创建数据库 按钮,根据提示输入数据库的所有者和要创建的数据库名即可
    • 数据库所有者必须在所有节点已经存在
    • 所需创建的数据库在任何节点均不存在

PolonDB删除数据库

image-ZhiLing

  • 点击 删除数据库 按钮,输入需要删除的数据库即可

PolonDB数据库日志

PolonDB提供最近7天的数据库日志

  • 连接所要查看节点的 postgres 库,通过查询表的方式即可。
postgres=> \d
                 List of relations
 Schema |      Name      |
--------+----------------+
 public | postgresql_fri
 public | postgresql_mon
 public | postgresql_sat
 public | postgresql_sun
 public | postgresql_thu
 public | postgresql_tue 
 public | postgresql_wed 

PolonDB高阶使用

PolonDB基于Citus构建,因此参阅Citus相关文档可以更快速的了解PolonDB的使用

PolonDB登录节点选择

  • 协调器节点

    协调器节点可以当作运维节点,创建用户/视图/函数的操作。当然也可以作为业务节点使用,但是性能不如高性能节点,适合业务较小的场景。

    • 创建视图示例:
     -- psql -h 协调器节点
     create view v_aa as select * from aa;
     select run_command_on_workers($cmd$ create view v_aa as select * from aa $cmd$);
    
  • 高性能节点

    不可以进行创建对象的操作,拥有超高连接数/超高性能的节点,适合较大并对数据性能要求较高的业务。

    业务较大时,青云建议使用此节点

  • 高性能只读节点

    可以充分发挥PolonDB硬件资源的利用率,可以做查询分析使用

run_command_on_workers

在所有worker节点执行该指令

select run_command_on_workers($cmd$ create view v_aa as select * from aa $cmd$);

例如创建视图的sql不会自动传输到Worker节点,因此需要使用该指令在Woker进行创建

run_command_on_shards

在所有分片上执行

select run_command_on_shards('aa', 'vacuum %s');

aa 表的所有分片上执行vacuum, %s 将会替换成 aa 的分片表