暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

AntDB 数据库分布式运维手册-集群节点管理9

tocata 2024-09-04
310

在线扩容

扩容背景

分布式数据库通常面临海量数据场景,持续的增量数据容易提前达到存储瓶颈,此时我们需要为集群增加节点,进行扩容操作,保证数据库集群健康稳定的运行。

扩容准备

扩容过程中会占用较多的网络和 IO 资源,如果在扩容期间不能减少数据库操作,需要适当调整部分参数,确保扩容顺利完成。

一、根据数据库负载适当调大wal保留个数:

SET DATANODE mastere ALL (wal_keep_size = 102400); 

虽然配置了 wal_keep_size,但是很多情况下,由于 master 节点数据量巨大,在扩容期间产生的 wal 数量可能远超 102GB。 从更安全的角度考虑,建议打开归档模式。

SET DATANODE master ALL (archive_mode = "on"); 
SET DATANODE master dm0 (archive_command = "rsync -a %p /data2/antdb/data/arch/dm0/%f"); 

二、wal_sender_timeout 默认值是 60 秒。服务端会中断那些停止活动超过指定毫秒数的复制连接。

若在建立流复制期间,由于某些原因,导致在 60 秒内建链失败,则会影响整个扩容流程。

建议在扩容期间,将该参数调整为 0,一直等待建立连接。

待扩容结束后,再恢复为默认的 60 秒。

SET DATANODE ALL (wal_sender_timeout = 0); 

扩容过程

新增 host

假设目前集群有两台服务器,通过扩容新增一台服务器。

实际扩容场景多为成倍的扩容,如2台服务器扩容到4台,这样数据可以继续保持均衡性。

[local]:6432 antdb@antdb=# list host; 
 name  | user  | port | protocol | agentport |     address     |    adbhome      
-------+-------+------+----------+-----------+-----------------+---------------- 
 adb01 | antdb |   22 | ssh      |      8432 | 192.168.149.131 | /opt/app/antdb 
 adb02 | antdb |   22 | ssh      |      8432 | 192.168.149.132 | /opt/app/antdb 

add host 添加新的服务器。

[local]:6432 antdb@antdb=# add host adb03(port=22,protocol='ssh',adbhome='/opt/app/antdb',address="192.168.149.133",agentport=8432,user='antdb'); 
ADD HOST 

注意: 这里新增的 host 也要按照其它主机一样配置环境变量。

deploy 数据库二进制文件到新服务器。

[local]:6432 antdb@antdb=# deploy adb03; 
 hostname | status | description  
----------+--------+------------- 
 adb03    | t      | success 

启动新服务器的 agent 进程。

[local]:6432 antdb@antdb=# start agent adb03; 
 hostname | status | description  
----------+--------+------------- 
 adb03    | t      | success 

此时新服务器已经加入到集群中。

新增 datanode

在新服务器中创建 datanode master

[local]:6432 antdb@antdb=# ADD DATANODE master dn3_1(host='adb03', port=14332,path = '/home/antdb/data/dn3_1'); 
ADD NODE 

需要根据实际情况修改对应的参数内容。

搬迁数据

将 dn1_1 中的数据扩容到新的 dn3_1 中

EXPAND DATANODE master dn1_1 to dn3_1; 

如果这里有多个节点需要扩容,则这里可以分别多次执行命令,例如:

EXPAND DATANODE master dn1_1 to dn3_1; 
EXPAND DATANODE master dn2_1 to dn4_1; 

激活新增节点

这一步,激活上一步扩容的所有新节点。

EXPAND activate; 

此时,扩容工作已经完成,部分数据已经重分布到新的节点上,新插入的表数据也会按照分片规则分布到新的 datanode。

数据清除

在数据复制和搬迁过程中会产生冗余数据,通过下列命令,将冗余数据标记删除。

EXPAND clean; 

此时扩容已经完成,用户可以通过 monitor all 命令查看集群的状态。

举例:

-- 添加新主机
ADD host adb03(port=22,protocol='ssh',adbhome='/opt/app/antdb',address="192.168.149.133",agentport=8432,user='antdb'); 
ADD host adb04(port=22,protocol='ssh',adbhome='/opt/app/antdb',address="192.168.149.134",agentport=8432,user='antdb'); 
-- deploy
DEPLOY adb03 password '123456'; 
DEPLOY adb04 password '123456'; 
-- add节点
ADD DATANODE MASTER dn3_1(host='adb03', port=14332,path = '/home/antdb/data/dn3_1'); 
ADD DATANODE MASTER dn3_1(host='adb04', port=14332,path = '/home/antdb/data/dn4_1'); 
-- expand
EXPAND DATANODE MASTER dn1_1 to dn3_1; 
EXPAND DATANODE MASTER dn2_1 to dn4_1; 
-- activate
EXPAND activate;
-- clean
EXPAND clean;

扩容异常情况处理

当用户操作不当,导致扩容失败时,可以根据提示执行命令 recover。

expand datanode 异常

  • basebackup 失败

    解决方法:执行"expand recover basebackup fail src to dst" ,若命令失败则手动删除数据目录重新执行 expand datanode 命令

  • 更新 mgr 信息失败

    解决方法:执行"expand recover basebackup success src to dst" 命令

expand activate 异常

  • promote 目标 datanode 失败

    解决方法:删除数据目录,重新执行 expand 命令

  • 重启 datanode 失败

    解决方法:手动启动 datanode

  • 更新 pgxc_node 失败

    解决方法:执行"expand activate recover dopromote success dst"命令


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论