Skip to content

Latest commit

 

History

History
105 lines (52 loc) · 4.12 KB

rule-scaling.md

File metadata and controls

105 lines (52 loc) · 4.12 KB

PostgreSQL扩容规范

0x01 背景

为统一数据库扩容申请流程,制定本规范。

太长不看/TL;DR

数据库水位大盘

水位超过50%黄线可以申请扩容

水位超过70%红线由DBA主动扩容

水位可以乘以缓冲因子后参与评估(默认为3倍)

0x02 原则

扩容方式

扩容以集群(Cluster)或分片集群(Shard)为单位,分为以下五种方式:

  1. 集群读扩容:为集群添加一台新从库

    当集群的从库(不包含离线实例与桥接实例) 平均水位过线,需要加从库扩容

  2. 集群垂直扩容:将集群升级至更高级机型(仅虚机实例可用)

    当集群的主库水位过线,且为虚机实例时,可以申请升级为物理机实例,垂直扩容。

  3. 分片集群拆分:将集群拆分两套或多套数据库集群

    当集群的主库水位过线,且为普通集群时,可以选择分拆为两套或更多套相对独立的数据库集群。

  4. 分片集群拆分:将普通集群拆分为分片集群

    当集群的主库水位过线,且为普通集群时,可以选择水平分拆为分片集群

  5. 分片集群分裂:将原有分片集群中集群数目翻倍。

    当分片集群的主库平均水位过线时,将进行分裂操作,将原有分片集群中分片数翻倍。

触发条件

  • 实例水位超过黄线可以扩容
    • 由业务方主动申请扩容,预算内直接扩容,预算外走采购流程后扩容。
  • 实例水位超过红线要求扩容
    • 由DBA主动提出扩容,预算内直接扩容,预算外使用Buffer池预留资源扩容,事后补预算。

0x03 标准

水位:数据库饱和度,数据库所有饱和度相关指标的最大值,为数据库饱和度,或称数据库水位

黄线:数据库饱和度警告阈值,数据库水位超过黄线表明数据库可以进行扩容。

红线:数据库饱和度致命阈值,数据库水位超过红线表明数据库必须进行扩容。

缓冲因子:业务方根据极端场景预留缓冲量,评估给定的一个缓冲系数。

水位

水位定义

水位是一个饱和度(Saturation)指标,所谓饱和度,即服务容量有多”满“,通常是系统中目前最为受限的某种资源的某个具体指标的度量。通常来说,0%的饱和度意味着系统完全空闲,100%的饱和度意味着满载,系统在达到100%利用率前就会出现性能的严重下降,因此设定指标时还需要包括一个利用率目标,或者说水位红线、黄线,当系统瞬时负载超过红线时应当触发告警,进行紧急扩容,长期负载超过黄线时可以进行扩容。

水位计算

因为数据库的瓶颈目前主要集中在数据库本身,以及CPU上。因此计算时主要采用PG Load与CPU Usage两个指标。计算方法为,取这两个指标过去三天历史数据的99分位点,并取两者之中较大者作为当前数据库水位值。

计算公式:

 max by (ins) (quantile_over_time(0.99, pg:ins:load15[3d]))
 max by (ins) (quantile_over_time(0.99, node:ins:cpu_usage[3d]))

水位查看

数据库水位大盘:请参考监控大盘 PG Saturation指标。

缓冲因子

如果存在缓存击穿,突发峰值之类的情况,业务评估并给出一个缓冲系数,例如峰值时突发流量是平时流量的三倍,那么缓冲因子就是3。扩容评估时,使用实际水位乘以缓冲因子进行评估,使用修正后的水位与阈值进行对比。如果业务方没有给出缓冲系数,则DBA会根据业务评级进行自动设定,核心业务按照x3进行估算,标准业务按x2~x3进行估算,统计离线业务按x1估算。

业务方根据极端场景预留缓冲量,评估给定的一个缓冲系数。

红线

目前数据库水位红线为70%

数据库饱和度致命阈值,数据库水位超过红线表明数据库必须进行扩容。

黄线

目前数据库水位黄线为50%

数据库饱和度警告阈值,数据库水位超过黄线表明数据库可以进行扩容。