reading recovery_the common reader

reading recovery_the common readerBookKeeperAutoRecovery背景版本:BookKeeper版本为4.12.0(Pulsar2.7.0的内置版本)Recovery主要针对的场景是:当集群中有部分bookie节点因异常原因宕机,此时我们恢复该节点上存储的数据。BookKeeper提供了两种数据恢复方式,一种是手动恢复(Manualrecovery),一种是自动恢复(AutoRecovery)。ManualRecovery如果集群中未开启AutoRecovery的功能,则用户可用手动恢复。手动恢复

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

BookKeeper AutoRecovery

背景

  1. 版本:BookKeeper版本为4.12.0(Pulsar 2.7.0的内置版本)

  2. Recovery主要针对的场景是:当集群中有部分bookie节点因异常原因宕机,此时我们恢复该节点上存储的数据。BookKeeper提供了两种数据恢复方式,一种是手动恢复(Manual recovery),一种是自动恢复(AutoRecovery)。

Manual Recovery

如果集群中未开启AutoRecovery的功能,则用户可用手动恢复。

手动恢复有两种方式,一是恢复指定bookie节点的数据;二是恢复指定ledger的数据。

  1. 恢复指定bookie节点的数据(该命令可以在下线节点执行,也可以在正常bookie节点执行);

    ./bin/bookkeeper shell recover bookiehostname:3181
    

    Jetbrains全家桶1年46,售后保障稳定

  2. 恢复指定ledger的数据;

    bin/bookkeeper shell recover \
      192.168.1.10:3181 \    # IP and port for the failed bookie
      --ledger ledgerID      # ledgerID which you want to recover 
    

AutoRecovery简介

AutoRecovery有三种部署模式。

  1. 与bookie节点集成。将bookie节点的bookkeeper.conf文件中将配置项autoRecoveryDaemonEnabled设置为true即可(此部署方式在一台节点上只包含一个进程,AutoRecovery作为附属线程运行于进程中)。
  2. 与bookie节点集成,但是作为单独的进程。即一台节点上有两个进程,一个为Bookie的主进程Main,一个为AutoRecovery进程。(此时需要关闭bookie节点的autoRecoveryDaemonEnabled选项,否则,bookie节点也会参与replication的工作)
  3. 在专门的recovery node上执行。(这里需要注意的是,此时需要关闭bookie节点的autoRecoveryDaemonEnabled选项,否则,bookie节点也会参与replication的工作)
  4. 部分在bookie节点执行,部分在专门的recovery node执行。

备注:Pulsar默认开启AutoRecovery的功能,且也是采用第一种部署方式。

  1. 本文主要介绍第1中部署方式,即将AutoRecovery作为bookie的附属线程执行。下文的相关说明也是只针对第一种方式。
  2. 其中第2种部署方式中,需要为Bookie和AutoRecovery进程分别给予配置文件,否则会导致端口冲突。(主要是prometheus的端口冲突,可将bookkeeper.conf拷贝一份为autorecovery.conf,并将其中的promethues端口更改)。
  3. (第3种和第4中方式笔者还未尝试)。

关闭AutoRecovery

You can disable AutoRecovery for the whole cluster at any time, for example during maintenance. Disabling AutoRecovery ensures that bookies’ data isn’t unnecessarily rereplicated when the bookie is only taken down for a short period of time, for example when the bookie is being updated or the configuration if being changed.

  1. 关闭AutoRecovery
$ bin/bookkeeper shell autorecovery -disable
  1. 开启AutoRecovery
$ bin/bookkeeper shell autorecovery -enable

配置

  1. 确保bookkeeper.conf中autoRecoveryDaemonEnabled为true即可。
  2. 更多配置参考。BookKeeper AutoRecovery

测试AutoRecovery

  1. 查看当前集群中可用的bookie列表。
[test@mq5 middleware]$ ./bin/bookkeeper shell listbookies -rw
JMX enabled by default
16:18:19.118 [main] INFO  org.apache.bookkeeper.tools.cli.commands.bookies.ListBookiesCommand - ReadWrite Bookies :
16:18:19.133 [main] INFO  org.apache.bookkeeper.tools.cli.commands.bookies.ListBookiesCommand - BookieID:mq8:3181, IP:xxx, Port:3181, Hostname:mq8
16:18:19.134 [main] INFO  org.apache.bookkeeper.tools.cli.commands.bookies.ListBookiesCommand - BookieID:mq7:3181, IP:xxx, Port:3181, Hostname:mq7
16:18:19.134 [main] INFO  org.apache.bookkeeper.tools.cli.commands.bookies.ListBookiesCommand - BookieID:mq5:3181, IP:xxx, Port:3181, Hostname:mq5
16:18:19.134 [main] INFO  org.apache.bookkeeper.tools.cli.commands.bookies.ListBookiesCommand - BookieID:mq6:3181, IP:xxx, Port:3181, Hostname:mq6
16:18:19.240 [Thread-1] WARN  org.apache.zookeeper.Login - TGT renewal thread has been interrupted and will exit.


  1. 查看当前集群中的ledger(命令输出节选)。
[test@mq5 middleware]$ ./bin/bookkeeper shell listledgers
# 以下节选部分输出
...
JMX enabled by default
org.apache.bookkeeper.tools.cli.commands.bookie.ListLedgersCommand - ledgerID: 480
16:21:33.704 [main-EventThread] INFO  org.apache.bookkeeper.tools.cli.commands.bookie.ListLedgersCommand - ledgerID: 481
16:21:33.704 [main-EventThread] INFO  org.apache.bookkeeper.tools.cli.commands.bookie.ListLedgersCommand - ledgerID: 482
16:21:33.704 [main-EventThread] INFO  org.apache.bookkeeper.tools.cli.commands.bookie.ListLedgersCommand - ledgerID: 483
16:21:33.704 [main-EventThread] INFO  org.apache.bookkeeper.tools.cli.commands.bookie.ListLedgersCommand - ledgerID: 484
16:21:33.704 [main-EventThread] INFO  org.apache.bookkeeper.tools.cli.commands.bookie.ListLedgersCommand - ledgerID: 485
...
  1. 查看ledger 485的元数据。
[test@mq5 middleware]$ ./bin/bookkeeper shell ledgermetadata -l 485
JMX enabled by default
17:19:47.521 [main] INFO  org.apache.bookkeeper.tools.cli.commands.client.LedgerMetaDataCommand - ledgerID: 488
17:19:47.532 [main] INFO  org.apache.bookkeeper.tools.cli.commands.client.LedgerMetaDataCommand - LedgerMetadata{ 
   formatVersion=3, ensembleSize=2, writeQuorumSize=2, ackQuorumSize=2, state=OPEN, digestType=CRC32C, password=base64:, ensembles={ 
   0=[mq8:3181, mq6:3181]}, customMetadata={ 
   component=base64:bWFuYWdlZC1sZWRnZXI=, pulsar/managed-ledger=base64:cHVibGljL2RlZmF1bHQvcGVyc2lzdGVudC90ZXN0Mg==, application=base64:cHVsc2Fy}}
17:19:47.639 [Thread-1] WARN  org.apache.zookeeper.Login - TGT renewal thread has been interrupted and will exit.

  • 观察该数据可知,该ledger存储在mq8和mq6节点上。
  • 该ledger的E,W,A为(2,2,2)
  • 该ledger存储的是public/default/persistent/test2的数据。通过命令echo "cHVibGljL2RlZmF1bHQvcGVyc2lzdGVudC90ZXN0Mg=="| base64 -d得到
  1. 现在我们停止mq8上的bookie。
./bin/pulsar-daemon stop bookie
  1. 再次观察ledger485的元数据。发现还为发生变化。
[test@mq5 middleware]$ ./bin/bookkeeper shell ledgermetadata -l 485
JMX enabled by default
17:19:47.521 [main] INFO  org.apache.bookkeeper.tools.cli.commands.client.LedgerMetaDataCommand - ledgerID: 488
17:19:47.532 [main] INFO  org.apache.bookkeeper.tools.cli.commands.client.LedgerMetaDataCommand - LedgerMetadata{ 
   formatVersion=3, ensembleSize=2, writeQuorumSize=2, ackQuorumSize=2, state=OPEN, digestType=CRC32C, password=base64:, ensembles={ 
   0=[mq8:3181, mq6:3181]}, customMetadata={ 
   component=base64:bWFuYWdlZC1sZWRnZXI=, pulsar/managed-ledger=base64:cHVibGljL2RlZmF1bHQvcGVyc2lzdGVudC90ZXN0Mg==, application=base64:cHVsc2Fy}}
17:19:47.639 [Thread-1] WARN  org.apache.zookeeper.Login - TGT renewal thread has been interrupted and will exit.
  1. 查看当前在复制的ledger(如果ledger数据较小,则复制过程会比较快,可能看不到正在复制的ledger)
[test@mq5 middleware]$ ./bin/bookkeeper shell listunderreplicated
JMX enabled by default
15:58:23.932 [main] INFO  org.apache.bookkeeper.tools.cli.commands.autorecovery.ListUnderReplicatedCommand - 485
15:58:23.938 [main] INFO  org.apache.bookkeeper.tools.cli.commands.autorecovery.ListUnderReplicatedCommand -    Cti
15:58:24.045 [Thread-1] WARN  org.apache.zookeeper.Login - TGT renewal thread has been interrupted and will exit.
[test@mq5 middleware]$ ./bin/bookkeeper shell listunderreplicated
JMX enabled by default
  1. 再次查看ledger485的元数据。
我们xxxxxxxxxx [test@mq5 middleware]$ ./bin/bookkeeper shell ledgermetadata -l 485JMX enabled by default17:22:52.300 [main] INFO  org.apache.bookkeeper.tools.cli.commands.client.LedgerMetaDataCommand - ledgerID: 48817:22:52.311 [main] INFO  org.apache.bookkeeper.tools.cli.commands.client.LedgerMetaDataCommand - LedgerMetadata{ 
   formatVersion=3, ensembleSize=2, writeQuorumSize=2, ackQuorumSize=2, state=OPEN, digestType=CRC32C, password=base64:, ensembles={ 
   0=[mq7:3181, mq6:3181], 13=[mq5:3181, mq6:3181]}, customMetadata={ 
   pulsar/managed-ledger=base64:cHVibGljL2RlZmF1bHQvcGVyc2lzdGVudC90ZXN0Mg==, component=base64:bWFuYWdlZC1sZWRnZXI=, application=base64:cHVsc2Fy}}17:22:52.419 [Thread-1] WARN  org.apache.zookeeper.Login - TGT renewal thread has been interrupted and will exit.shell

我们可以观察下ledger位置的变化。

在停掉bookie8之前,元数据显示ensemble为

ensembles={ 
   0=[mq8:3181, mq6:3181]},

在停掉之后,元数据显示ensemble为:

ensembles={ 
   0=[mq7:3181, mq6:3181], 13=[mq5:3181, mq6:3181]}

解释:该现象说明:

  • 开始时,ledger放置在mq8和mq6上;
  • 在Recovery之后,该ledger的entryId为【0,12】的entry放置在mq7和mq6上,entryId大于等于13的entry放置在mq5和mq6上。
  • Recovery体现在哪里?因为节点8挂掉了,所以原本entryid范围为【0,12】的数据,又拷贝了一份放置在了mq7上。

参考

  1. BookKeeper Auto Recovery 文档
  2. 《深入理解Apache Pulsar》
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/206809.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Apache中 RewriteRule 规则参数介绍

    Apache中 RewriteRule 规则参数介绍Apache中RewriteRule规则参数介绍 摘要: Apache模块mod_rewrite提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求。它支持每个完整规则可以拥有不限数量的子规则以及附加条件规则的灵活而且强大的URL操作机制。这里着重介绍RewriteRule规则以及参数说明。Apache模块mod_rewrite提供了一个基于正则表达式分析器的重写引擎来实…

  • 5G融合通信_网关正在获取怎么解决

    5G融合通信_网关正在获取怎么解决随着物联网5G商用步伐的加速和5G网络建设的突飞猛进,2020年无疑成为5G向千行百业拓展落地的关键之年。作为“新基建”的领头羊,5G已凝聚产业链力量,蓄势待发为行业的智能化和数字化转型赋能,为新一轮经济增长提速。GrassRouter作为5G技术在超高清视频传输领域应用的领先代表,于今年推出了最新一代5G高速物联网B4G+5G聚合路由器,可支持构建点对点安全传输链路,支持移动/联通/电信混用,实现多达7条2G/3G/4G/5G/有线传输链路聚合,成为5G应用落地的重点项目之一。5G要全面覆盖还

  • linux环境安装python3

    linux环境安装python3最近小编对python产生了兴趣,并申请了腾讯云,自己想搭建一下python3的环境,根据readme文件步骤是这样的:                步骤一:./configure        步骤二:make        步骤三:make test        步骤四:sudo make install     然并卵,理想很丰满,现实很骨感,自己还是遇到

  • 美国网件对KRACK WPA2安全漏洞做出回应:表示正积极跟进修复[通俗易懂]

    美国网件对KRACK WPA2安全漏洞做出回应:表示正积极跟进修复[通俗易懂]NETGEAR美国网件意识到最近公布的安全漏洞KRACK,它利用了WPA2(WiFi保护访问II)中的安全漏洞。美国网件现正在积极跟进修复,已更新了多个产品的修复程序,请浏览美国网件官方网站(https://kb.netgear.com/000049498/Security-Advisory-for-WPA-2-Vulnerabilities-PSV-2017-2826-PSV-2017-2836…

  • Java IO用法详解

    Java IO用法详解一、javaio概述1.1相关概念JavaIOJavaIO即Java输入输出系统。不管我们编写何种应用,都难免和各种输入输出相关的媒介打交道,其实和媒介进行IO的过程是十分复杂的,这要考虑的因素特别多,比如我们要考虑和哪种媒介进行IO(文件、控制台、网络),我们还要考虑具体和它们的通信方式(顺序、随机、二进制、按字符、按字、按行等等)。Java类库的设计者通过设计大量的类来攻克这些难题…

  • java 二维数组 数据库_java 二维数组如何存入数据库

    java 二维数组 数据库_java 二维数组如何存入数据库usingSystem;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Xml;usingSystem.Xml.Serialization;usingSystem.IO;namespaceWindowsFormsApplication1{publicpartialclassForm…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号