如何用Sequoiadb Shell命令删除协调节点和编目节点

如果想彻底清除一个巨杉数据库(Sequoiadb)的集群环境,包括数据复制组、协调复制组、编目复制组,应该如何做?

大体来说,有2个方法:

1)停掉所有的复制组,然后手工删除所有节点所对应的数据库目录。

      这种方法简单易行,但是看上略显野蛮。

2)利用SDB Shell里提供的各种命令,逐步删除数据复制组、协调复制组、编目复制组。

     本文主要是探讨这种方法的步骤,后面展开详细的讨论。

 

首先,数据复制组的删除是比较容易的,只要通过removeRG()命令就可以方便的删除数据复制组。
其次,协调复制组的删除也比较容易,可以通过removeCoordRG()命令来实现。删除数据库中协调分区组,原则上会把该分区组的所有协调节点都删除,但如果在删除这些节点过程中,先把db对象所连接上的协调节点删除,则有可能会遗留部分协调节点未删除,需要使用Oma类的removeCoord方法删除遗留的协调节点。

但是,删除编目复制组的过程就相对麻烦些。虽然我们提供了removeCatalogRG()这个命令,但其实不能直接执行,因为这个命令必须满足两个条件:

1)此命令必须在协调节点上执行

2)此命令执行时,此编目复制组上已经没有协调节点的信息

因此,如果使用集群中已有的协调复制组,我们就无法同时满足这两个条件,也就无法执行removeCatalogRG()命令。

为了破解上面这个自相矛盾的局面,我们需要引入一个临时的协调节点,这个临时协调节点的主要目的就是执行removeCatalogRG()命令以删除编目复制组。

但并不是随便建一个协调节点就能拿来删除编目复制组,还需要将两者“绑定”在一起,否则这个临时协调节点在执行removeCatalogRG()命令时,就不知道该删哪个编目复制组。建立这种绑定关系的方法,就是利用Oma.createCoord()函数中不太常用的第3个参数config:

那么,这个config参数的内容是什么呢?是一个形如“{catalogaddr:":"}”的参数,要获取这个参数的值,可以通过下面的命令:

  sdblist -p --expand --detail | grep catalogaddr

其中是编目节点所对应的端口。假设编目节点的端口是11800,那么如下图所示:

 

下面举一个具体的例子。假设所有的数据复制组和协调复制组都已经删除(分别通过removeRG()命令和removeCoordRG()命令),编目节点所对应的端口是11800(具体如上面的截图所示),具体步骤如下:

sdb

> var oma = new Oma("localhost", 11790)

> oma.createCoord(18800, "/opt/sequoiadb/database/coord/18800", {catalogaddr:"sdbserver1:11803"})

> oma.startNode(18800)

> var db = new Sdb("localhost", 18800)

> db.removeCatalogRG()

> oma.removeCoord(18800)

这里需要特别提醒的,还是createCoord()的第三个参数:必须要使用 sdblist -p --expand --detail命令输出中的catalogaddr的值。

你可能感兴趣的:(Sequoiadb,linux,nosql)