为统一数据库扩容申请流程,制定本规范。
数据库水位大盘
水位超过50%黄线可以申请扩容
水位超过70%红线由DBA主动扩容
水位可以乘以缓冲因子后参与评估(默认为3倍)
扩容以集群(Cluster)或分片集群(Shard)为单位,分为以下五种方式:
-
集群读扩容:为集群添加一台新从库
当集群的从库(不包含离线实例与桥接实例) 平均水位过线,需要加从库扩容
-
集群垂直扩容:将集群升级至更高级机型(仅虚机实例可用)
当集群的主库水位过线,且为虚机实例时,可以申请升级为物理机实例,垂直扩容。
-
分片集群拆分:将集群拆分两套或多套数据库集群
当集群的主库水位过线,且为普通集群时,可以选择分拆为两套或更多套相对独立的数据库集群。
-
分片集群拆分:将普通集群拆分为分片集群
当集群的主库水位过线,且为普通集群时,可以选择水平分拆为分片集群
-
分片集群分裂:将原有分片集群中集群数目翻倍。
当分片集群的主库平均水位过线时,将进行分裂操作,将原有分片集群中分片数翻倍。
- 实例水位超过黄线可以扩容
- 由业务方主动申请扩容,预算内直接扩容,预算外走采购流程后扩容。
- 实例水位超过红线要求扩容
- 由DBA主动提出扩容,预算内直接扩容,预算外使用Buffer池预留资源扩容,事后补预算。
水位:数据库饱和度,数据库所有饱和度相关指标的最大值,为数据库饱和度,或称数据库水位。
黄线:数据库饱和度警告阈值,数据库水位超过黄线表明数据库可以进行扩容。
红线:数据库饱和度致命阈值,数据库水位超过红线表明数据库必须进行扩容。
缓冲因子:业务方根据极端场景预留缓冲量,评估给定的一个缓冲系数。
水位定义
水位是一个饱和度(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%
数据库饱和度警告阈值,数据库水位超过黄线表明数据库可以进行扩容。