扩容概述

对于海量存储的分布式数据库,表数据规模随时间上涨是必定的,由此造成已有集群容量与算力(CPU)不够用也同样不可避免。此时,一个正确高效的集群扩容变得不可或缺。尽管在系统被初始定义时就留出增长的空间是最为明智的,但是通常不太可能过于提前地在资源上投资。 因此,我们建议你定期地规划并执行数据库扩容操作。

在 YMatrix 里,你可以自由选择使用图形化界面扩容或命令行在线扩容,我们建议使用简单易操作的图形化界面。目前 YMatrix 已经支持在线平滑扩容(扩容期间读写业务不受任何影响)、灵活设置表的数据分布等功能等功能。

FAQ

  1. 扩容过程中新旧节点的目录(catalog)是一致的吗

    • catalog 始终是一致的,新节点上即使还没有数据,但是 catalog 也是存在的。
  2. 扩容过程中对于其他查询的影响

    • 因为是在线扩容,期间不会中断正在运行的所有查询,只是在增加新节点的时候因为要锁 catalog,所以在此期间不支持 DDL 的相关操作,加完新节点立即释放 catalog 锁。
    • 数据重分布期间业务读写不受影响,可以正常查询;对该表执行 DDL 需要等重分布完成。
  3. 扩容失败后,DDL 一直报 gpexpand in progress, catalog changes are disallowed 怎么办

    • 说明上一次扩容中断后,仍有会话持有扩容锁。先查出持锁会话:

      SELECT pid, state, wait_event_type, now() - xact_start AS duration, query
      FROM pg_stat_activity
      WHERE query ILIKE '%gp_expand_lock_catalog%' AND pid <> pg_backend_pid();
    • 确认是要清理的会话后取消它,会话事务回滚后锁即释放:

      SELECT pg_cancel_backend(pid)
      FROM pg_stat_activity
      WHERE query ILIKE '%gp_expand_lock_catalog%' AND pid <> pg_backend_pid();
    • 锁释放后重新执行 DDL 即可。从 6.8.5 开始,扩容工具收到终止信号(SIGTERM)时会主动取消该会话,不会再把它留在数据库里。