美文网首页
zk集群数据迁移和恢复

zk集群数据迁移和恢复

作者: 安静的码农 | 来源:发表于2021-11-04 22:46 被阅读0次


    zk集群数据迁移和恢复

    一、zk数据迁移,有如下两种方案:

    1、利用zk集群超过半数仍然可用的特性,比如集群中有5个节点,可以将其中1~2个节点割裂出去,再添加1个新的节点,组成新的集群,以此实现数据迁移;

    2、直接拷贝集群的元数据文件到新集群;

    但第1种方案并不是最佳选择,例如zk集群连接数负载高,如果此时再减少节点数,则会导致集群负载变得更高,甚至集群崩溃。故采用第2种方案,通过拷贝元数据的方式来实现集群数据迁移和恢复。

    二、zk数据迁移和恢复的实现思路

    1、搭建好新的zk集群,并且启动集群(此时集群还没有数据);

    2、停止新集群所有节点的zk进程;

    3、删除新集群所有节点数据目录下的文件,包括:事务日志、快照、epoch文件

    4、将老集群leader节点的事务日志、快照、epoch文件拷贝到新集群所有节点对应的数据目录下;

    5、重新启动新集群;

    三、注意事项:

    如果新集群的两个epoch文件不删掉的话,会造成新集群无法启动;原因是:如果只是拷贝了老集群的快照、事务日志到新集群,新集群的节点在启动时会识别epoch文件中记录的当前epoch值,然后将这个epoch值和从老集群拷贝过来的元数据中的事务ID(zxid)进行比较,发现并不匹配,就会造成新集群无法正常启动。故需要将新集群中各个节点的epoch文件删除,将老集群的epoch文件、快照文件、事务日志文件一并拷贝到新集群的各个节点。

    四、zk数据迁移和恢复的具体操作步骤:

    1、搭建新集群:

    1)、rpm -ivh jdk-8u20-linux-x64.rpm  

    2)、cd  /data/  &&  tar  -zxvf  zk_server.tgz  ###解压到/data或者/data1

    3)、cd  /data/  &&  mv  zk_server  zk.1     ###myid为1的节点,家目录为/data/zk.1、myid为2的节点,家目录为/data/zk.2

    4)、解压之后,可以看到3个目录:

    cd  /data/zk.1  &&  ls -l

    zk_data      ###保存zk快照数据的主目录

    zk_log       ###保存zk事务日志的主目录

    zookeeper    ###程序路径,包含配置文件

    5)、cd  /data/zk.1/zk_data  &&  echo 1 > myid  ###配置节点myid,myid为1的节点配置成1,myid为2的节点配置成2,myid为3的节点配置3

    6)、cd  /data/zk.1/zookeeper/conf  &&  cp -ar  zoo.cfg.template  zoo.cfg

    7)、vim  zoo.cfg

    tickTime=2000

    initLimit=10

    syncLimit=5

    clientPort=2181

    autopurge.snapRetainCount=500

    autopurge.purgeInterval = 48 

    dataDir=/data/zk.1/zk_data    ###myid为2则配置为/data/zk.2/zk_data

    dataLogDir=/data/zk.1/zk_log  ###myid为2则配置为/data/zk.2/zk_log

    server.1=节点1的IP:8880:7770          #节点1的配置

    server.2=节点2的IP:8880:7770          #节点2的配置

    server.3=节点3的IP:8880:7770           #节点3的配置

    8)、其余2个节点的安装部署方法也是一样

    9)、依次启动3个节点,并检查状态

    启动:

    cd  /data/zk.1/zookeeper/bin/  &&   nohup sh  zkServer.sh start  > zookeeper.out &

    检查节点状态:

    cd /data/zk.1/zookeeper/bin/ && ./zkServer.sh  status  

    连接本地节点,查看数据:

    cd /data/zk.1/zookeeper/bin/ && ./zkCli.sh -server 127.0.0.1:2181

    2、停止新集群所有节点的zk进程:

    cd /data/zk.1/zookeeper/bin/ && sh zkServer.sh stop

    cd /data/zk.2/zookeeper/bin/ && sh zkServer.sh stop

    cd /data/zk.3/zookeeper/bin/ && sh zkServer.sh stop

    3、删除新集群所有节点数据目录下的文件,包括:事务日志、快照、epoch文件(以节点1为例):

    cd  /data/zk.1/zk_data/version-2  &&  rm  -f  snapshot.*  &&  rm  -f  acceptedEpoch  && rm  -f  currentEpoch

    cd  /data/zk.1/zk_log/version-2  &&  rm  -f  log.*

    4、将老集群leader节点的事务日志、快照、epoch文件拷贝到新集群所有节点对应的数据目录下(以leader节点的数据为准):

    1)、备份老集群leader节点的数据目录下的文件(拷贝到本地的新建的zk_meta_dir目录)

    最新的log事务日志文件  ###不是所有的log文件,而是最新的log文件

    最新的snapshot文件   ###不是所有的snapshot文件,而是最新的snapshot文件

    acceptedEpoch文件

    currentEpoch文件

    2)、将leader节点zk_meta_dir目录的log文件、snapshot文件、Epoch文件分发到新集群每个节点对应的目录,例如节点1的/data/zk.1/zk_data/version-2、/data/zk.1/zk_log/version-2

    5、重新启动新集群:

    以节点1为例:

    cd  /data/zk.1/zookeeper/bin/  &&   nohup sh  zkServer.sh start  > zookeeper.out &

    相关文章

      网友评论

          本文标题:zk集群数据迁移和恢复

          本文链接:https://www.haomeiwen.com/subject/swllzltx.html