跳到主要内容

磁盘满锁

KubeBlocks 的磁盘满锁功能确保了数据库的稳定性和可用性。该功能在磁盘使用量达到设定的阈值时触发磁盘锁定,从而暂停写操作,只允许读操作。这样的机制可以防止数据库受到磁盘空间耗尽的影响。

锁定/解锁机制

只要有某些卷的空间水位超过定义的阈值,实例就会被锁定(只读)。同时,系统会发送相关警报,包括每个卷的具体阈值和空间使用信息。 当所有卷的空间水位都低于定义的阈值时,实例将被解锁(读写)。同时,系统也会发送相关警报,包括每个卷的具体阈值和空间使用信息。

备注
  1. 磁盘满锁功能目前支持全局(ClusterDefinition)启用或禁用,暂不支持集群维度的控制。动态启用或禁用此功能可能会影响使用此 ClusterDefinition 的现有集群实例,并导致它们重新启动。请谨慎操作。
  2. 磁盘满锁功能依赖于两个系统资源节点和 nodes/stats 的读取权限(get 和 list)。如果你通过 kbcli 创建实例,请确保为控制器授予 ClusterRoleBinding 的管理权限。
  3. 支持的引擎:ApeCloud MySQL、PostgreSQL、MongoDB。

启用磁盘满锁

  • 对于 MySQL 数据库,当磁盘使用量达到 highwatermark 值时,读写用户无法写入磁盘,而超级用户仍然可以写入。
  • 对于 PostgreSQL 和 MongoDB 数据库,当磁盘使用量达到 highwatermark 时,无论是读写用户还是超级用户都无法写入。
  • 组件级别的高水位的默认阈值为 90,当磁盘使用量达到 90% 时将锁定磁盘。而卷级别的设置为 85,会覆盖组件级别的阈值。
  1. 编辑数据库引擎的 ClusterDefinition Custom Resource(CR)。

    本文档以 mysql 为例,可按需将 mysql 替换为 postgresqlmongodb

    kubectl edit clusterdefinition mysql
  2. volumeProtectionSpec 字段添加至 spec.componentDefs[],启用磁盘满锁功能。可根据需要设置 highWatermark 的值。

    ...
    spec:
    componentDefs:
    ...
    - name: mysql
    volumeProtectionSpec:
    highWatermark: 90
    volumes:
    - highWatermark: 85
    name: data
    ...
    备注

    推荐将 highWatermark 设置为 90。

  3. 保存设置,并退出。

禁用磁盘满锁

从 ClusterDefinition 文件中删除 volumeProtectionSpec 即可禁用磁盘满锁功能。

  1. 编辑数据库引擎的 ClusterDefinition CR。

    本文档以 mysql 为例,可按需将 mysql 替换为 postgresqlmongodb

    kubectl edit clusterdefinition mysql
  2. 删除 volumeProtectionSpec 字段。

  3. 保存设置,并退出。