1.Base基础/3.Icon图标/操作/search备份
1.Base基础/3.Icon图标/操作/search备份
EN
文档
关于AntDB
部署与升级
快速入门
使用教程
调优
工具和插件
高级服务
数据安全
参考
  • 文档首页 /
  • 运维 /
  • 分布式运维手册 /
  • 集群节点管理

集群节点管理

更新时间:2024-07-01 14:39:43

管理节点

Node 表用于保存部署 AntDB 集群中每个节点的信息,同时包括从节点与主节点之间的同/异步关系等。管理 node 表的操作命令有:

  • add node(包含 ADD GTMCOORD、ADD COORDINATOR、ADD DATANODE)
  • alter node(包含 ALTER GTMCOORD、ALTER COORDINATOR、ALTER DATANODE)
  • remove node (包含 DROP GTMCOORD、DROP COORDINATOR、DROP DATANODE)
  • drop node(包含 DROP GTMCOORD、DROP COORDINATOR、DROP DATANODE)
  • list node

下面对这五个命令进行介绍。

新增节点

add node

命令功能:

在 node 表中添加节点信息。具体功能可通过帮助命令 \h add gtmcoord\h add coordinator\h add datanode 查看。

注意: gtmcoord 和 datanode 均可存在多个备机,nodetype 为 slave。第一个添加的 slave 节点,默认为同步 slave,后续添加的默认为潜在同步,sync_state 字段值为 potential

指定的节点数据存放路径需要为空目录,否则执行初始化时报错。

命令格式:

ADD COORDINATOR MASTER master_name ( option ) 
ADD DATANODE MASTER master_name ( option ) 
ADD DATANODE SLAVE slave_name FOR master_name ( option ) 
ADD GTMCOORD MASTER master_name ( option ) 
ADD GTMCOORD SLAVE slave_name FOR master_name ( option ) 
where option must be the following: 
 
    HOST = host_name, 
    PORT = port_number, 
    SYNC_STATE = sync_mode, 
		PATH = pg_data 
		ZONE = zone_name 
		READONLY = readonly_type (仅仅在add coordinator时有效) 
参数说明: 
node_name:节点名称,对应node表name列。 
host_name:主机名,与host表中主机名对应。 
port_number:节点监听端口号。 
Sync_mode:备机与主机的同异步关系,”on”、”t”、”true”均表示同步设置,”off”、”f”、”false”均表示异步设置。 
pg_data:节点数据路径,需要保证该目录是空目录。 
zone_name:节点所属的中心名字,默认是local,用在双中心场景。 
readonly_type:该coordinator是否为只读节点 

注意:datanode 和 gtmcoord 类型的节点支持级联,即 slave 节点可以挂在 slave 节点之下,所以 for 后面可以是 slave node 的名字。

命令举例:

-- 添加gtmcoord master节点,主机为localhost1, 端口为6768,数据路径”/home/antdb/data/gc”: 
ADD GTMCOORD MASTER gc (HOST=localhost1, PORT=6768, PATH='/home/antdb/data/gc'); 
-- 添加gtmcoord slave节点,主机为localhost2, 端口为6768,数据路径”/home/antdb/data/gc”: 
ADD GTMCOORD SLAVE gcs for gc (HOST=localhost2, PORT=6768, SYNC=t, PATH='/home/antdb/data/gc'); 
-- 添加coordinator节点coord1信息,主机为localhost1,端口为5532,数据路径”/home/antdb/data/coord1”: 
ADD COORDINATOR MASTER coord1(HOST=localhost1, PORT=5532,PATH='/home/antdb/data/coord1'); 
-- 添加datanode master节点db1,主机为localhost1,端口为15533,数据路径为”/home/antdb/data/db1”: 
ADD DATANODE MASTER db1(HOST=localhost1, PORT=15533,PATH='/home/antdb/data/db1'); 
-- 添加datanode slave节点db1,主机为localhost2,端口为15533,数据路径为”/home/antdb/data/db1”: 
ADD DATANODE SLAVE db1s for db1(HOST=localhost1, PORT=15533, SYNC=t, PATH= '/home/antdb/data/db1'); 
-- 添加datanode slave节点db1s的级联slave db11s 
ADD DATANODE SLAVE db11s for db1s(HOST=localhost1, PORT=15543, SYNC=t, PATH= '/home/antdb/data/db11');  
 

alter node

命令功能:

在 node 表中修改节点信息。具体功能可通过帮助命令“\h alter gtmcoord” 、”\h alter coordinator”、”\h alter datanode”查看。

注意: 在集群初始化前,可以通过 alter node 更新节点信息;在集群初始化后,只允许更新备机 slave 同异步关系 sync_state 列。

命令格式:

ALTER GTMCOORD { MASTER | SLAVE } node_name ( option ) 
ALTER COORDINATOR MASTER node_name ( option ) 
ALTER DATANODE { MASTER | SLAVE } node_name ( option )   
 
where option can be one of: 
 
    HOST =host_name, 
    PORT = port_number, 
    SYNC_STATE = sync_mode, 
		PATH = pg_data 
		ZONE = zone_name 
 
参数说明: 
node_name:节点名称,对应node表name列。 
host_name:主机名,与host表中主机名对应。 
port_number:节点监听端口号。 
Sync_mode:从节点与主节点的同异步关系。仅对从节点有效。值“sync”表示该从节点是同步从节点,“potential”表示该从节点是潜在同步节点,“async”表示该从节点是异步从节点。 
pg_data:节点数据路径,需要保证该目录是空目录。 
zone_name:节点所属的中心名字,默认是local,用在双中心场景。 

命令举例:

-- 集群初始化前,更新gtmcoord master端口号为6666: 
ALTER GTMCOORD MASTER gtmcoord (PORT=6666); 
-- 更新gtmcoord slave与gtmcoord master为同步关系: 
ALTER GTMCOORD SLAVE gcs (SYNC_STATE='sync'); 
-- 更新gtmcoord extra与gtmcoord master为异步关系: 
ALTER GTMCOORD SLAVE gtms (SYNC_STATE='async'); 
-- 集群初始化前,更新coordinator coord1端口为5532,数据路径为”/home/antdb/data/coord1”: 
ALTER COORDINATOR MASTER coord1 (PORT=5532, PATH=’/home/antdb/data/coord1’); 
-- 集群初始化前,更新datanode master db1主机为localhost5,数据路径为”/home/antdb/data/db1”: 
ALTER DATANODE MASTER db1 (HOST=localhost5, PATH=’/home/antdb/data/coord1’); 
-- 更新datanode slave db1与主机datanode master为同步关系: 
ALTER DATANODE SLAVE db1s (SYNC_STATE='sync'); 
-- 更新datanode extra db1与主机datanode master为异步关系: 
ALTER DATANODE SLAVE db1s (SYNC_STATE='async'); 

append node

命令功能:

Append 命令用于向 AntDB 集群中追加集群节点,用于集群扩容。Gtmcoord master 是集群中的核心,append 命令不包括追加gtmcoord master 命令。 执行 append 命令以前需要执行下面操作步骤(假设 append coordinator 到一台新机器上):

  • 把这台新机器的 host 信息添加到 host 表中。
  • 把要追加的 coordinator 信息添加到 node 表中。
  • 在新机器上创建用户及其密码。
  • 执行 deploy 命令把集群可执行文件分发到新机器上。
  • 在新机器上修改当前用户下隐藏文件 .bashrc,追加如下内容并执行 source ~/.bashrc 使其生效:
export ADBHOME=/opt/antdb/app (以实际情况修改) 
export PATH=$ADBHOME/bin:$PATH 
export LD_LIBRARY_PATH=$ADBHOME/lib:$LD_LIBRARY_PATH 
  • 执行 start agent,启动新机器上的 agent 进程。
  • 执行 append 命令。 具体功能可通过帮助命令 \h append 查看。

命令格式:

APPEND GTMCOORD SLAVE node_name 
APPEND DATANODE { MASTER | SLAVE } node_name 
APPEND COORDINATOR MASTER node_name 
 
-- 利用流复制功能加快append coordinator 
APPEND COORDINATOR dest_coordinator_name FOR source_coordinator_name 
APPEND ACTIVATE COORDINATOR node_name 

命令举例:

-- 往AntDB集群中追加一个名为coord4的coordinator节点: 
APPEND COORDINATOR MASTER coord4; 
-- 往AntDB集群中追加一个名为db4的datanode master节点: 
APPEND DATANODE MASTER db4; 
-- 为AntDB集群中追加一个名为db4的datanode slave节点: 
APPEND DATANODE SLAVE db4; 
-- 利用流复制功能往AntDB集群中追加coordinator master 节点: 
APPEND COORDINATOR coord5 FOR coord1;  
APPEND ACTIVATE COORDINATOR coord5; 

删除节点

remove node

命令功能:

在 node 表中修改节点的 initialized 和字段值为 false,并从 pgxc_node 表中删除 node,但在 mgr 的 node 表中保留信息。

注意

目前只能 remove 的节点类型有 4 种,coordiantor master 和 slave、datanode slave、gtmcoord slave,且要求节点处于 not running 状态。

命令格式

REMOVE COORDINATOR SLAVE node_name 
REMOVE COORDINATOR MASTER node_name 
REMOVE DATANODE SLAVE node_name 
REMOVE GTMCOORD SLAVE node_name 

命令举例

-- 从集群中删除coordinator节点 
REMOVE COORDINATOR MASTER cd2; 
-- 从集群中删除datanode slave节点 
REMOVE DATANODE SLAVE db1_2; 
-- 从集群中删除gtmcoord slave节点 
REMOVE DATANODE SLAVE gc2; 

clean node

命令功能:

CLEAN 命令用于清空 AntDB 集群中节点数据目录下面的所有数据。执行此命令的前提是所有节点都处在 stop 状态且不在集群中。执行 CLEAN 命令不会有交互,所以如果需要保留数据,请慎重执行这个命令。先只支持 CLEAN ALL 命令。 具体功能可通过帮助命令 \h clean 查看。

命令格式:

CLEAN ALL 
CLEAN COORDINATOR { MASTER | SLAVE } { node_name [ , ... ] } 
CLEAN DATANODE { MASTER | SLAVE } { node_name [ , ... ] } 
CLEAN GTMCOORD { MASTER | SLAVE } node_name 
CLEAN MONITOR number_days 
CLEAN ZONE zonename 

命令举例:

-- 清空AntDB 集群中所有节点数据目录下的内容(ADB 集群处在stop状态): 
CLEAN ALL; 
-- 清空coordinator节点数据目录: 
CLEAN COORDINATOR MASTER coord1; 
-- 清空15天前的monitor数据: 
CLEAN MONITOR 15; 

drop node

命令功能:

在 node 表中删除节点信息。具体功能可通过帮助命令 \h drop gtmcoord\h drop coordinator\h drop datanode 查看。

注意: 在集群初始化前,可以通过 drop node 删除节点信息,但是在存在备机的情况下,需要先删除备节点,才能删除主节点。在集群初始化后,不允许执行 drop node 操作。

命令格式:

DROP GTMCOORD { MASTER | SLAVE } node_name 
DROP COORDINATOR MASTER node_name [, ...] 
DROP DATANODE { MASTER | SLAVE } node_name [, ...] 
DROP ZONE zonename # 删除同一个zone的所有节点 

命令举例:

-- 在集群初始化之前删除datanode slave db1s: 
DROP DATANODE SLAVE db1s; 
-- 在集群初始化之前删除coordinator coord1: 
DROP COORDINATOR master coord1; 
-- 在集群初始化之前删除gtmcoord slave gc: 
DROP GTMCOORD SLAVE gcs; 
-- 在集群初始化之前删除gtmcoord master gc: 
DROP GTMCOORD MASTER gc; 

查询节点信息

命令功能:

显示 node 表中节点信息。具体功能可通过帮助命令“\h list node” 查看。

命令格式:

LIST NODE COORDINATOR [ MASTER | SLAVE ] 
LIST NODE DATANODE [ MASTER | SLAVE ] 
LIST NODE DATANODE MASTER node_name 
LIST NODE HOST host_name [, ...] 
LIST NODE  [ ( option ) ] [ node_name [, ...] ] 
LIST NODE ZONE zonename 
where option can be one of: 
 
    NAME 
    HOST 
    TYPE 
    MASTERNAME 
    PORT 
    SYNC_STATE 
    PATH 
    INITIALIZED 
    INCLUSTER 
 
参数说明: 
NAME:节点名称,对应node表name列。 
HOST:主机名,与host表中主机名对应。 
TYPE:节点类型,包含:GTMCOORD MASTER, GTMCOORD SLAVE,COORDINATOR MASTER,DATANODE 	MASTER,DATANODE SLAVE 
MASTERNAME:备机对应的主机名,非备机对应为空。 
PORT:节点监听端口号。 
sync_state:从节点与主节点的同异步关系。仅对从节点有效。值“sync”表示该从节点是同步从节点,“potential”表示该从节点是潜在同步节点,“async”表示该从节点是异步从节点。 
PATH:节点数据路径,需要保证该目录是空目录。 
INITIALIZED:标识节点是否初始化。 
INCLUSTER:标识节点是否在集群中。 

命令举例:

-- 显示node表节点信息: 
LIST NODE; 
-- 显示节点名称为”db1”的节点信息: 
LIST NODE db1; 
-- 显示db1_2的master/slave节点信息: 
list node DATANODE MASTER db1_2; 
-- 显示主机localhost1上的节点信息: 
list node host localhost1; 
-- 显示local zone下的所有节点,双中心场景会有2个zone:
list node zone local;

节点主备切换

最新版本的 AntDB 中,高可用由自愈模块自动完成,用户无需关注,因此本章节内容仅为用户手动执行的时候作为参考。

涉及到主备切换的命令有 3 个,分别是 failover、rewind、switchover,应用不同的场景。

故障切换

当主节点 down 了之后,通过 failover 命令实现 datanode、coordinator、gtmcoord 节点的主备切换。

antdb=# FAILOR DATANODE dn1_1; 
WARNING:  An exception occurred during the switching operation, It is recommended to use command such as 'monitor all', 'monitor ha' to check the failure point in the cluster first, and then retry the switching operation!!! 
ERROR:  Can't find a Synchronous standby node, Abort switching to avoid data loss 
antdb=# FAILOR DATANODE dn1_1 force; 
NOTICE:  dn1_3 have the best wal lsn, choose it as a candidate for promotion 
NOTICE:  gcn1 try lock cluster successfully 
NOTICE:  dn1_3 was successfully promoted to the new master 
NOTICE:  dn1_3 running on correct status of master mode 
NOTICE:  set GTM information on dn1_2 successfully 
NOTICE:  dn1_2 running on correct status of slave mode 
NOTICE:  dn1_1 is waiting for rewinding. If the doctor is enabled, the doctor will automatically rewind it 
NOTICE:  gcn1 try unlock cluster successfully 
NOTICE:  Switch the datanode master from dn1_1 to dn1_3 has been successfully completed 
 nodename | status |    description     
----------+--------+------------------- 
 dn1_3    | t      | promotion success 
(1 row) 

从操作中可以看到,如果 master 节点没有同步 slave 存在,则不允许进行 failover 操作,否则会造成数据丢失,需要使用 force 选项来进行强制切换。

非故障切换

当用户需要将原主机切换被备机,原备机切换为主机,可以使用 switchover 命令:

antdb=# SWITCHOR DATANODE SLAVE dn2_2; 
NOTICE:  wait max 10 seconds to wait there are no active connections on coordinators and master nodes 
NOTICE:  gcn1 try lock cluster successfully 
NOTICE:  wait max 10 seconds to check there are no active locks in pg_locks except the locks on pg_locks table 
NOTICE:  wait max 10 seconds to check dn2_1 and dn2_2 have the same xlog position 
NOTICE:  dn2_2 was successfully promoted to the new master 
NOTICE:  dn2_2 running on correct status of master mode 
NOTICE:  dn2_1 running on correct status of slave mode 
NOTICE:  gcn1 try unlock cluster successfully 
NOTICE:  Switch the datanode master from dn2_1 to dn2_2 has been successfully completed 
 nodename | status |    description     
----------+--------+------------------- 
 dn2_2    | t      | promotion success 
(1 row) 
 
antdb=# list node dn2_2; 
 name  | host  |      type       | mastername | port  | sync_state |               path               | initialized | incluster | readonly | zone   
-------+-------+-----------------+------------+-------+------------+----------------------------------+-------------+-----------+----------+------- 
 dn2_2 | adb01 | datanode master |            | 52542 |            | /data/antdb/data/adb50/d2/dn2_2 | t           | t         | f        | local 
(1 row) 
 
antdb=# list node dn2_1; 
 name  | host  |      type      | mastername | port  | sync_state |               path               | initialized | incluster | readonly | zone   
-------+-------+----------------+------------+-------+------------+----------------------------------+-------------+-----------+----------+------- 
 dn2_1 | adb01 | datanode slave | dn2_2      | 52541 | sync       | /data/antdb/data/adb50/d1/dn2_1 | t           | t         | f        | local 
(1 row) 

可以看到,主备之间发生了切换。

快速恢复备节点

如果 master 出现故障,执行了 failover 命令,slave 升级为 master 后,用户想给新 master 重新添加新 slave 时,可以有两个选择:

方法一:使用 append 命令添加一个全新的 slave 节点,需要进行数据同步,保证主备一致;

方法二:将原来移除的 master 以 slave 节点的形式加入到集群中。

第二种方式由于原 master 节点已经有大量的数据,重新加入到集群中后只需要进行少量的数据同步即可,时间短。rewind 的功能正是如此,可以实现快速恢复备节点。具体可以参考 rewind 章节。

注意:要使用 rewind 功能,需要在 datanode 上将 wal_log_hints 和 full_page_writes 设置为 on。

SET DATANODE ALL(wal_log_hints=on, full_page_writes=on); 
REWIND DATANODE SLAVE dm1; 

举例:

antdb=# ADD DATANODE SLAVE dn1_1 for dn1_3 (host=adb01,port=52531,path='/data/antdb/data/adb50/d1/dn1_1'); 
ADD NODE 
antdb=# REWIND DATANODE SLAVE dn1_1; 
NOTICE:  pg_ctl restart datanode slave "dn1_1" 
NOTICE:  10.21.20.175, pg_ctl  restart -D /data/antdb/data/adb50/d1/dn1_1 -Z datanode -m fast -o -i -w -c -l /data/antdb/data/adb50/d1/dn1_1/logfile 
NOTICE:  wait max 90 seconds to check datanode slave "dn1_1" running normal 
NOTICE:  pg_ctl stop datanode slave "dn1_1" with fast mode 
NOTICE:  10.21.20.175, pg_ctl  stop -D /data/antdb/data/adb50/d1/dn1_1 -Z datanode -m fast -o -i -w -c 
NOTICE:  wait max 90 seconds to check datanode slave "dn1_1" stop complete 
NOTICE:  update gtmcoord master "gcn1" pg_hba.conf for the rewind node dn1_1 
NOTICE:  update gtmcoord slave "gcn2" pg_hba.conf for the rewind node dn1_1 
NOTICE:  update datanode master "dn1_3" pg_hba.conf for the rewind node dn1_1 
NOTICE:  update datanode slave "dn1_2" pg_hba.conf for the rewind node dn1_1 
NOTICE:  on datanode master "dn1_3" execute "checkpoint" 
NOTICE:  10.21.20.175,  /data/antdb/app/adb50/bin/pg_controldata '/data/antdb/data/adb50/d2/dn1_3' | grep 'Minimum recovery ending location:' |awk '{print $5}' 
NOTICE:  receive msg: {"result":"0/0"} 
NOTICE:  10.21.20.175,  /data/antdb/app/adb50/bin/pg_controldata '/data/antdb/data/adb50/d2/dn1_3' |grep 'Min recovery ending loc' |awk '{print $6}' 
NOTICE:  receive msg: {"result":"0"} 
NOTICE:  10.21.20.175, adb_rewind  --target-pgdata /data/antdb/data/adb50/d1/dn1_1 --source-server='host=10.21.20.175 port=52533 user=antdb dbname=postgres' -T dn1_1 -S dn1_3 
NOTICE:  receive msg: servers diverged at WAL location 0/40001B0 on timeline 1 
rewinding from last common checkpoint at 0/4000140 on timeline 1 
Done! 
 
NOTICE:  refresh mastername of datanode slave "dn1_1" in the node table 
NOTICE:  set parameters in postgresql.conf of datanode slave "dn1_1" 
NOTICE:  refresh recovery.conf of datanode slave "dn1_1" 
NOTICE:  pg_ctl  start -Z datanode -D /data/antdb/data/adb50/d1/dn1_1 -o -i -w -c -l /data/antdb/data/adb50/d1/dn1_1/logfile 
NOTICE:  10.21.20.175, pg_ctl  start -Z datanode -D /data/antdb/data/adb50/d1/dn1_1 -o -i -w -c -l /data/antdb/data/adb50/d1/dn1_1/logfile 
NOTICE:  refresh datanode master "dn1_3" synchronous_standby_names='1 (dn1_2,dn1_1)' 
 mgr_failover_manual_rewind_func  
--------------------------------- 
 t 
(1 row) 
 
antdb=# list node dn1_3; 
 name  | host  |      type       | mastername | port  | sync_state |               path               | initialized | incluster | readonly | zone   
-------+-------+-----------------+------------+-------+------------+----------------------------------+-------------+-----------+----------+------- 
 dn1_3 | adb01 | datanode master |            | 52533 |            | /data/antdb/data/adb50/d2/dn1_3 | t           | t         | f        | local 
(1 row) 
 
antdb=# list node dn1_1; 
 name  | host  |      type      | mastername | port  | sync_state |               path               | initialized | incluster | readonly | zone   
-------+-------+----------------+------------+-------+------------+----------------------------------+-------------+-----------+----------+------- 
 dn1_1 | adb01 | datanode slave | dn1_3      | 52531 | potential  | /data/antdb/data/adb50/d1/dn1_1 | t           | t         | f        | local 
(1 row) 

再次说明,在最新版本中,如果配置了自愈doctor,以上操作均无需人工干预。

在线扩容

扩容背景

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

扩容准备

扩容过程中会占用较多的网络和 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"命令

问题反馈