1、现象说明
当磁盘空间高于高水位甚至危险水位后,很多操作都会被禁止。此时可以尝试通过以下方式减少磁盘使用率,恢复系统。
常见报错内容如下:
disk xxxxx on backend xxx exceed limit usage
通常做法是删除无效的表和数据库、或者挂载新的磁盘来保障数据库的正常运作。
但生产环境上,无法删库删表切不能尽快的增加磁盘容量。我们该怎么办?本博文将从3个方面介绍应急处理方式。
2、数据垃圾清理
2.1数据垃圾清理用于清理 backend 内的垃圾数据,使用命令如下:
ADMIN CLEAN TRASH [ON ("BackendHost1:BackendHeartBeatPort1", "BackendHost2:BackendHeartBeatPort2", ...)];
说明:以 BackendHost:BackendHeartBeatPort 表示需要清理的 backend ,不添加on限定则清理所有 backend 。
2.2 使用例子
清理所有be节点的垃圾数据
ADMIN CLEAN TRASH;
清理制定节点的垃圾数据
ADMIN CLEAN TRASH ON ("192.168.0.1:9050","192.168.0.2:9050");
2.3 web界面截图
3、数据手动均衡
查看每个be节点数据块占用,发现仅一个达到了阈值95%以上,其它都在70% 左右。此时可以使用手动数据均衡命令。将数据均匀分配到每个节点。来降低单个节点数据压力问题。
3.1 命令说明
ADMIN REBALANCE DISK [ON ("BackendHost1:BackendHeartBeatPort1", "BackendHost2:BackendHeartBeatPort2", ...)];
说明
- 该语句表示让系统尝试优先均衡指定BE的磁盘数据,不受限于集群是否均衡。
- 默认的 timeout 是 24小时。超时意味着系统将不再优先均衡指定的BE磁盘数据。需要重新使用该命令设置。
- 指定BE的磁盘数据均衡后,该BE的优先级将会失效。
3.2 使用例子
尝试优先均衡集群内的所有BE
ADMIN REBALANCE DISK;
尝试优先均衡指定BE
ADMIN REBALANCE DISK ON ("192.168.1.1:1234", "192.168.1.2:1234");
4、临时修改表或分区的副本
可以将表或分区的副本数降低。比如默认 3 副本可以降低为 2 副本。该方法虽然降低了数据的可靠性,但是能够快速的降低磁盘使用率,使集群恢复正常。该方法通常用于紧急恢复系统。请在恢复后,通过扩容或删除数据等方式,降低磁盘使用率后,将副本数恢复为 3。
4.1 命令说明
修改副本操作为瞬间生效,后台会自动异步的删除多余的副本。
ALTER TABLE tbl MODIFY PARTITION p1 SET("replication_num" = "2");
4.2 例子
将表 colin.products_d 表的副本又3降到1
ALTER TABLE colin.products_d SET("replication_num" = "1");
4.3 副本前后变化截图
修改前,副本为3
修改后,副本为1
观察可得,此表数据磁盘占用由原来66G降到了 22G。