sequoiadb的运行维护

1. 集群的启停

启动

手工启动特定节点

当集群中某个节点失效后,用户可以在 sdb 命令行使用如下步骤启动节点。假设 SequoiaDB 的安装路径为/opt/sequoiadb

  1. 连接到协调节点
    $ /opt/sequoiadb/bin/sdb
    > var db = new Sdb("localhost", 11810) ;
  2. 得到分区组
    > dataRG = db.getRG ( "<datagroup1>" ) ;
  3. 得到数据节点
    > dataNode = dataRG.getNode ( "<hostname1>", "<servicename1>" ) ;
  4. 启动节点
    > dataNode.start() ;

手工启动数据组

当集群中某个数据组被停止后,用户可以在 sdb 命令行使用如下步骤启动数据组。该操作会启动数据组中全部数据节点。

  1. 连接到协调节点
    $ /opt/sequoiadb/bin/sdb
    > var db = new Sdb("localhost", 11810) ;
  2. 得到分区组
    > dataRG = db.getRG ( "<datagroup1>" ) ;
  3. 启动数据组
    > dataRG.start();

2. 备份恢复

数据备份

当前版本中,数据备份支持离线备份,即数据备份期间需要中断插入、更新、删除等变更操作,只支持查询操作。当前备份支持两种方式:全量备份和增量备份

  • 全量备份:备份整个数据库的配置、数据和日志;
  • 增量备份:在上一个全量备份或增量备份的基础上备份新增的日志和配置;

离线备份参数说明

参数说明
Name备份名称,缺省则以当前时间格式命名,如“2013-11-13-15:00:00”。
Description备份用户描述信息。
Path本次备份的指定路径,缺省为配置参数“bkuppath”中指定的路径。
EnsureInc备份方式,true 表示增量备份,false 表示全量备份,缺省为 false。
OverWrite对于同名备份是否覆盖,true 表示覆盖,false 表示不覆盖,如果同名则报错;缺省为 true。
GroupName对指定组进行备份,缺省为对全系统备份,当需要对多个组进行备份可以指定为数组类型,如:["datagroup1","datagroup2"]。

备份整个数据库

1. 连接到协调节点

$ /opt/sequoiadb/bin/sdb
> var db = new Sdb("localhost",11810);

2. 执行备份命令

> db.backupOffline({Name:"backupName",Description:"backup for all"})

备份指定组的数据库

1. 连接到协调节点

$ /opt/sequoiadb/bin/sdb
> var db = new Sdb("localhost",11810);

2. 执行备份命令

> db.backupOffline({Name:"backupName",Description:"backup group1",GroupName:"datagroup1"})

备份指定节点的数据库

1. 连接到指定节点

$ /opt/sequoiadb/bin/sdb
> var dbdata = new Sdb("hostname1","servicename1");

2. 执行备份命令

> dbdata.backupOffline({Name:"backupName",Description:"backup data node"}))
Note: catalog 编目组的名称固定为 SYSCatalogGroup

3. 故障恢复

4. 监控

查看备份信息

备份信息查看可以通过客户端和手工查看。

查看备份信息参数说明

参数说明
Name备份名称,缺省则查看目录下所有备份信息。
Path查看备份的指定路径,缺省为配置参数“bkuppath”中指定的路径。
GroupName查看指定组的备份信息,缺省为查看全系统备份信息,当需要查看多个组的备份信息可以指定为数组类型,如:["datagroup1","datagroup2"]。

查看全系统备份信息

1. 连接到协调节点

$ /opt/sequoiadb/bin/sdb
> var db = new Sdb("localhost",11810);

2. 执行查看备份信息命令

> db.listBackup()
{
  "Name": "test_bk",
  "NodeName": "vmsvr2-suse-x64-1:11800",
  "GroupName": "SYSCatalogGroup",
  "EnsureInc": false,
  "BeginLSNOffset": 0,
  "EndLSNOffset": 18744,
  "StartTime": "2013-11-13-16:06:31",
  "HasError": false
}
{
  "Name": "test_bk",
  "NodeName": "vmsvr2-suse-x64-1:11820",
  "GroupName": "db1",
  "EnsureInc": false,
  "BeginLSNOffset": 0,
  "EndLSNOffset": 920424,
  "StartTime": "2013-11-13-16:06:31",
  "HasError": false
}

查看指定名称的备份信息

1. 连接到协调节点

$ /opt/sequoiadb/bin/sdb
> var db = new Sdb("localhost",11810);

2. 执行查看备份信息命令

> db.listBackup({Name:"backup1"})
{
  "Name": "backup1",
  "NodeName": "vmsvr2-suse-x64-1:11820",
  "GroupName": "group1",
  "EnsureInc": false,
  "BeginLSNOffset": 0,
  "EndLSNOffset": 108744,
  "StartTime": "2013-11-13-16:06:31",
  "HasError": false
}

手工查看备份信息

手工查看备份信息直接通过终端登入指定机器,并进入到相应的备份目录中,执行“ls -l”

use@vmsvr2-suse-x64-1:/opt/sequoiadb/database/11820/bakfile> ls -l
total 37328
-rw-r----- 1 sdbadmin sdbadmin  38157784 Nov 13 16:06 test_bk.1
-rw-r----- 1 sdbadmin sdbadmin     65536 Nov 13 16:06 test_bk.bak

数据恢复

使用备份的数据恢复某个分区组。执行数据恢复必须确保相应组已停止运行,数据恢复首先会清空原节点的所有数据和日志,然后从备份的数据中恢复配置、数据和日志。

数据恢复工具参数说明

参数缩写说明
--bkpath-p备份源数据所在路径。
--increaseid-i需要恢复到第几次增量备份,缺省恢复到最后一次。
--bkname-n需要恢复的备份名。
--action-a恢复行为,“restore”表示恢复,“list”表示查看备份信息,缺省为“restore”。
--isSelf 是否为恢复本节点数据,缺省为“true”;当取值为“false”时,根据如下参数将数据恢复至指定路径:
--dbpath 必须配置,数据文件目录。
--confpath 必须配置,配置文件路径。
--svcname 必须配置,本地服务名或端口。
--indexpath 索引文件目录。
--logpath 日志文件目录。
--diagpath 诊断日志文件目录。
--bkuppath 备份文件目录。
--replname 复制通讯服务名或端口。
--shardname 分区通讯服务名或端口。
--catalogname 编目通讯服务名或端口。
--httpname REST 服务名或端口。

恢复数据

Note: 如果一个分区组包含多个数据节点,必须停止该组中每个数据节点并进行恢复。如果将备份的数据恢复至非备份数据节点,须使用 --isSelf false 配置参数,同时设置相关的配置参数。
  1. 连接到协调节点
    $ /opt/sequoiadb/bin/sdb
    > var db = new Sdb("localhost", 11810) ;
  2. 得到分区组
    > dataRG = db.getRG ( "data" ) ;
  3. 停止分区组
    > dataRG.stop()
  4. 通过终端登入相应分区组的数据节点,执行数据恢复。
    sdbadmin@vmsvr2-suse-x64-1:/opt/sequoiadb> bin/sdbrestore -p database/11820/bakfile -n test_bk
    Begin to clean dps logs...
    Begin to clean dms storages...
    Begin to init dps logs...
    Begin to restore...
    Begin to restore data file: 11820/bakfile/test_bk.1 ...
    Begin to restore su: test.1.data ...
    Begin to restore su: test.1.idx ...
    Begin to restore dps logs...
    *****************************************************
    Restore succeed!
    *****************************************************
  5. 到数据节点目录检查文件是否恢复。
    sdbadmin @vmsvr2-suse-x64-1:/ opt/sequoiadb /database/11820> ls -l
    total 299156
    drwxr-xr-x 2 sdbadmin sdbadmin      4096 Nov 13 16:06 bakfile
    drwxr-xr-x 2 sdbadmin sdbadmin      4096 Nov 13 15:48 diaglog
    drwxr-xr-x 2 sdbadmin sdbadmin      4096 Nov 13 17:39 replicalog
    -rw-r----- 1 sdbadmin sdbadmin 155254784 Nov 13 17:39 test.1.data
    -rw-r----- 1 sdbadmin sdbadmin 151060480 Nov 13 17:39 test.1.idx
  6. 删除该分区组中其它数据节点的所有数据(或者将该节点的所有 .data 和 .idx 文件拷贝至其它数据节点的数据目录和索引目录下,以及将该节点 replicalog 所有日志拷贝至其它数据节点的日志目录下,或者将备份文件拷贝至其它数据节点,并通过 restored 工具恢复);重新启动系统。
备份和恢复流程

  1. 备份前确认数据库无插入,更新,删除等变更操作;

  2. 进入 sdb 客户端;
    # /opt/sequoiadb/bin/sdb
  3. 连接其中 coord 节点
    > var db = new Sdb('htest1', 11810)
  4. 检查数据库是否有备份;

    检查数据库集群内所含有的数据:
    > db.list(4)
    {
      "Name": "foo.bar"
    }
    Return 1 row(s).
    Takes 0.2882s.
    > db.foo.bar.count()
    2880000
    Takes 0.2586s.
    > db.listBackup()
    Return 0 row(s).
    Takes 0.6483s.
  5. 执行数据库备份;

    数据库集群备份是按组为单位进行备份的,故在备份的时候需要指定组进行备份。如下操作对编目组进行备份,备份完成后并且检查是否备份成功,此备份文件保存在主机 htest1: /opt/sequoiadb/database/cata/30000/bakfile/ 下面。
    > db.backupOffline({Name:"catalogBackup",GroupName:"SYSCatalogGroup"})
    Takes 1.762381s.
    > db.listBackup()
    {
          "Name": "catalogBackup",
          "NodeName": "htest1:30000",
          "GroupName": "SYSCatalogGroup",
          "EnsureInc": false,
          "BeginLSNOffset": 0,
          "EndLSNOffset": 9716,
          "StartTime": "2014-07-29-22:34:40",
          "HasError": false
    }
    Return 1 row(s).
    Takes 0.7994s.
    数据组也采用与编目组同样的方式进行备份,其备份文件保存在主机 htest3 上,目录名为:/opt/sequoiadb/database/data/41000/bakfile/
    > db.backupOffline({Name:"datagroupG1Backup",GroupName:"g1"})
    Takes 12.85741s.  
    > db.listBackup({Name:"datagroupG1Backup",GroupName:"g1"})
    {
          "Name": "datagroupG1Backup",
          "NodeName": "htest3:41000",
          "GroupName": "g1",
          "EnsureInc": false,
          "BeginLSNOffset": 0,
          "EndLSNOffset": 460800544,
          "StartTime": "2014-07-29-22:41:40",
          "HasError": false
    }
    Note: 如果想要一次将整个数据库备份完成,则可执行数据库备份操作且不提供任意参数。如此即可一次备份完成整个数据库集群,包含编目组与数据组。默认备份到相应组主节点的 bakfile 下 /opt/sequoiadb/database/../../dialog/bakfile
    > db.backupOffline()
  6. 查看备份;
    > db.listBackup()
    {
      "Name": "catalogBackup",
      "NodeName": "htest1:30000",
      "GroupName": "SYSCatalogGroup",
      "EnsureInc": false,
      "BeginLSNOffset": 0,
      "EndLSNOffset": 9716,
      "StartTime": "2014-07-29-22:34:40",
      "HasError": false
    }
    {
      "Name": "datagroupG1Backup",
      "NodeName": "htest3:41000",
      "GroupName": "g1",
      "EnsureInc": false,
      "BeginLSNOffset": 0,
      "EndLSNOffset": 460800544,
      "StartTime": "2014-07-29-22:41:40",
      "HasError": false
    }
    Return2 row(s).
    Takes 0.16428s.

    如果不指定路径备份,则数据库默认备份到相应组的主节点数据库目录下的 bakfile 文件夹中。若备份在其它路径下,则查看的时候需要带路径参数。

数据恢复

使用数据库的备份文件来恢复某个分区组。执行数据恢复必须确保相应组已停止运行,数据恢复首先会清空原节点的所有数据和日志,然后从备份的数据中恢复配置,数据和日志。数据恢复工具位于: /opt/sequoiadb/bin/sdbrestore,执行 ./sdbrestore --help 可以查看相应的参数。

恢复流程:

  1. 停止相关的组的数据库服务进程;

    停止数据库服务最好通过 sdb 客户端来完成,这样不需要去集群节点所在的机器去停止数据库,如 g1。当停止的组中包含 catalog 编目组时,要最后再停止编目组。
    sdbadmin@htest1:~$ /opt/sequoiadb/bin/sdb
    > var db = new Sdb('localhost',11810)
    > datarg = db.getRG('g1')
    > datarg.stop()
  2. 将数据库备份文件拷贝到共享目录下;

    由于 SequoiaDB 数据的恢复只能对一台机进行恢复,故将数据库备份文件拷贝到数据库集群机器所共享的目录下。如共享目录为 /mnt/xiaojun/BACKUP,则拷贝如下:
    sdbadmin@htest1:/opt/sequoiadb$ cp -r /opt/sequoiadb/database/cata/30000/bakfile/ /mnt/xiaojun/BACKUP/bakfile.30000.htest1
    sdbadmin@htest3:/opt/sequoiadb$ cp -r /opt/sequoiadb/database/data/41000/bakfile/ /mnt/xiaojun/BACKUP/bakfile.41000.htest3

    拷贝到共享目录下的好处是在恢复操作时只用一个共享目录即可,而不用每一台要恢复的机器都拷贝一份备份文件到那台机器中去。

  3. 数据恢复操作;

    恢复工具(sdbrestore)位于 SequoiaDB 数据库中的 bin 目录下面(/opt/sequoiadb/bin)。通过 sdb shell 登入分区组的数据节点,执行数据恢复。执行恢复操作时,至少要对一个组中超过半数的节点进行恢复,最好是对组内所有的节点进行恢复操作。此数据库集群包含两个组:编目组“SYSCatalogGroup”和一个数据组“g1”,分别布署在三台主机上:htest1/htest2/htest3。恢复节点操作时需要进到节点所在的主机分别进行恢复。如恢复位于主机 htest1 上的编目节点则要在此主机内执行操作:
    sdbadmin@htest1:/opt/sequoiadb/bin$ ./sdbrestore -p /mnt/xiaojun/BACKUP/bakfile.30000.htest1/ -n catalogBackup --dbpath \
    > /opt/sequoiadb/database/cata/30000/ --confpath /opt/sequoiadb/conf/local/30000/ --svcname 30000
    2014-07-29-23.09.19.382036               Level:EVENT
    PID:9556                                 TID:9556
    Function:pmdRestoreThreadMain            Line:491
    File:SequoiaDB/engine/pmd/sdbrestore.cpp
    Message:
    Start sdbrestore [Ver: 1.8, Release: 13673, Build: 2014-07-22-00.11.23(Debug)]...
                       .
                       .
                       .
    *****************************************************
    Restore succeed!
    *****************************************************

    此时仅恢复了 htest1 的编目节点,采用同样的方式去将 htest2 和 htest3 的编目节点启动起来。

    恢复数据组 g1 的数据节点,和恢复编目组节点的方法类似。三台机 htest1/htest2/htest3 中的数据节点均采用如下方法分别进行恢复:
    sdbadmin@htest1:/opt/sequoiadb/bin$ ./sdbrestore -p /mnt/xiaojun/BACKUP/bakfile.41000.htest3/ -n datagroupG1Backup --dbpath \
    > /opt/sequoiadb/database/data/41000/ --confpath /opt/sequoiadb/conf/local/41000/ --svcname 41000
    2014-07-29-23.18.08.966708               Level:EVENT
    PID:9590                                 TID:9590
    Function:pmdRestoreThreadMain            Line:491
    File:SequoiaDB/engine/pmd/sdbrestore.cpp
    Message:
    Start sdbrestore [Ver: 1.8, Release: 13673, Build: 2014-07-22-00.11.23(Debug)]...
                       .
                       .
                       .
    *****************************************************
    Restore succeed!
    *****************************************************
  4. 检查数据库集群的恢复是否正确;

    通过 sdb 客户端对恢复好的数据库进行简单的数据操作,如增删改查等。
    sdbadmin@htest1:~$ /opt/sequoiadb/bin/sdb
    > var db = new Sdb('htest1',11810)
    Takes 0.8073s.
    > db.list(4)
    {
      "Name": "foo.bar"
    }
    Return 1 row(s).
    Takes 0.47547s.
    > db.foo.bar.count()
    2880000
    Takes 0.164788s.
    > db.foo.bar.find().limit(1)
    {
      "_id": 4000000,
      "id": 4000000,
      "ID": "http://www.sequoiadb.com",
      "change": "ccc",
      "info": "email:contact@sequoiadb.com"
    }
    Return 1 row(s).
    Takes 0.28824s.
    > db.foo.bar.insert({testing:"testingBackup"})
    Takes 0.296942s.
    > db.foo.bar.find({testing:"testingBackup"})
    {
      "_id": {
        "$oid": "53d7c4f9c6e6fab31f000000"
      },
      "testing": "testingBackup"
    }
    Return 1 row(s).
    Takes 4.311792s.

    通过此操作可基本确定数据库恢复成功。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值