ZooKeeper管理员指南

部署和管理指南 PDF

  • 部署

    • 系统要求

      • 支持的平台
      • 必备软件
    • 群集(多服务器)安装程序
    • 单服务器和开发人员设置
  • 管理
    • 设计ZooKeeper部署

      • 跨机器要求
      • 单机要求
    • 供应
    • 需要考虑的事项:ZooKeeper的优势和局限
    • 管理
    • 保养
      • 正在进行的数据目录清理
      • 调试日志清理(log4j)
    • 监督
    • 监控
    • 记录
    • 故障排除
    • 配置参数
      • 最低配置
      • 高级配置
      • 群集选项
      • 身份验证和授权选项
      • 实验选项/功能
      • 不安全的选择
      • 禁用数据目录自动创建
      • 使用Netty框架进行通信
    • ZooKeeper命令:四字母词
    • 数据文件管理
      • 数据目录
      • 日志目录
      • 文件管理
    • 要避免的事情
    • 最佳实践

部署

本节包含有关部署Zookeeper的信息,并涵盖以下主题:

  • 系统要求

  • 群集(多服务器)安装程序

  • 单服务器和开发人员设置

前两节假设您有兴趣在生产环境(如数据中心)中安装ZooKeeper。最后一节介绍了在有限的基础上设置ZooKeeper的情况 - 用于评估,测试或开发 - 但不适用于生产环境。

系统要求

支持的平台

  • 支持GNU / Linux作为服务器和客户端的开发和生产平台。

  • 支持Sun Solaris作为服务器和客户端的开发和生产平台。

  • FreeBSD仅作为客户的开发和生产平台。FreeBSD JVM中的Java NIO选择器支持被破坏了。

  • 仅支持Win32作为服务器和客户端的开发平台

  • 仅支持MacOSX作为服务器和客户端的开发平台

必备软件

ZooKeeper在Java中运行,版本1.6或更高版本(JDK 6或更高版本)。它作为ZooKeeper服务器的集合运行。三个ZooKeeper服务器是整体的最小建议大小,我们还建议它们在不同的机器上运行。在Yahoo!,ZooKeeper通常部署在专用的RHEL盒子上,具有双核处理器,2GB RAM和80GB IDE硬盘。

群集(多服务器)安装程序

对于可靠的ZooKeeper服务,您应该在称为集合的集群中部署ZooKeeper 。只要合奏的大部分都在增加,该服务将可用。因为Zookeeper需要占多数,所以最好使用奇数个机器。例如,使用四台机器,ZooKeeper只能处理单台机器的故障; 如果两台机器出现故障,其余两台机器不会占多数。但是,有了五台机器,ZooKeeper可以处理两台机器的故障。

以下是设置将成为集合一部分的服务器的步骤。这些步骤应该在整体中的每个主机上执行:

  1. 安装Java JDK。您可以为系统使用本机打包系统,也可以从以下位置下载JDK:

    http://java.sun.com/javase/downloads/index.jsp

  2. 设置Java堆大小。这对于避免交换非常重要,这会严重降低ZooKeeper的性能。要确定正确的值,请使用负载测试,并确保远低于导致交换的使用限制。保守一点 - 对于4GB机器,最大堆大小为3GB。

  3. 安装ZooKeeper服务器包。它可以从以下网址下载:

    http://zookeeper.apache.org/releases.html

  4. 创建配置文件。这个文件可以被称为任何东西。使用以下设置作为起点:

    <span style="color:#000000">滚动时间= 2000
    DATADIR =的/ var / lib中/动物园管理员/
    CLIENTPORT = 2181
    initLimit = 5
    syncLimit = 2
    server.1 = zoo1:2888:3888
    server.2 = zoo2:2888:3888
    server.3 = zoo3:2888:3888</span>

    您可以在“ 配置参数 ”部分中找到这些和其他配置设置的含义。这里有一句话:

    作为ZooKeeper整体的一部分的每台机器都应该知道整体中的每台其他机器。您可以使用server.id = host:port:port形式的一系列行来完成此操作。参数hostport很简单。您可以通过创建名为myid的文件将服务器ID归因于每台计算机,每个服务器对应一个文件 ,该文件位于该服务器的数据目录中,由配置文件参数dataDir指定。

  5. myid文件由一行组成,只包含该机器id的文本。所以服务器1的myid将包含文本“1”而没有别的。id在整体中必须是唯一的,并且应该具有1到255之间的值。

  6. 如果您的配置文件已设置,则可以启动ZooKeeper服务器:

    $ java -cp zookeeper.jar:lib / slf4j-api-1.6.1.jar:lib / slf4j-log4j12-1.6.1.jar:lib / log4j-1.2.15.jar:conf \ org.apache.zookeeper。 server.quorum.QuorumPeerMain zoo.cfg

    QuorumPeerMain启动ZooKeeper服务器, 还注册了JMX管理bean,允许通过JMX管理控制台进行管理。该ZooKeeper的JMX文件包含有关使用JMX管理ZooKeeper的细节。

    有关启动服务器实例的示例,请参阅发行版中包含的脚本bin / zkServer.sh

  7. 通过连接到主机来测试您的部署:

    在Java中,您可以运行以下命令来执行简单操作:

    $ bin / zkCli.sh -server 127.0.0.1:2181

单服务器和开发人员设置

如果要设置ZooKeeper用于开发目的,您可能需要设置ZooKeeper的单个服务器实例,然后在开发计算机上安装Java或C客户端库和绑定。

设置单个服务器实例的步骤与上述类似,但配置文件更简单。您可以在ZooKeeper入门指南的“ 单服务器模式下安装和运行ZooKeeper”部分找到完整说明。

有关安装客户端库的信息,请参阅ZooKeeper程序员指南的Bindings 部分。

管理

本节包含有关运行和维护ZooKeeper的信息,并涵盖以下主题:

  • 设计ZooKeeper部署

  • 供应

  • 需要考虑的事项:ZooKeeper的优势和局限

  • 管理

  • 保养

  • 监督

  • 监控

  • 记录

  • 故障排除

  • 配置参数

  • ZooKeeper命令:四字母词

  • 数据文件管理

  • 要避免的事情

  • 最佳实践

设计ZooKeeper部署

ZooKeeper的可靠性取决于两个基本假设。

  1. 部署中只有少数服务器会失败。此上下文中的失败意味着机器崩溃或网络中的一些错误将服务器与大多数分区。

  2. 部署的机器正常运行。正确操作意味着正确执行代码,使时钟正常工作,并使存储和网络组件始终如一地执行。

以下部分包含ZooKeeper管理员的注意事项,以最大化这些假设保持为真的概率。其中一些是跨机器考虑因素,而另一些则是您应该为部署中的每台计算机考虑的事项。

跨机器要求

要使ZooKeeper服务处于活动状态,必须有大多数可以相互通信的非故障机器。要创建可以容忍F计算机故障的部署,您应该依赖部署2xF + 1计算机。因此,由三台机器组成的部署可以处理一个故障,而五台机器的部署可以处理两个故障。请注意,由于三台计算机不是多数,因此部署六台计算机只能处理两次故障。因此,ZooKeeper部署通常由奇数个计算机组成。

为了实现容忍故障的最高概率,您应该尝试使机器故障独立。例如,如果大多数机器共享同一个交换机,则该交换机的故障可能导致相关故障并导致服务中断。共享电源电路,冷却系统等也是如此。

单机要求

如果ZooKeeper必须与其他应用程序竞争访问存储介质,CPU,网络或内存等资源,其性能将受到显着影响。ZooKeeper具有强大的持久性保证,这意味着它允许存储介质记录更改,然后才能完成负责更改的操作。您应该知道这种依赖关系,如果您想确保媒体不会阻止ZooKeeper操作,请务必小心。以下是您可以采取的一些措施,以尽量减少这种退化:

  • ZooKeeper的事务日志必须位于专用设备上。(专用分区是不够的。)ZooKeeper按顺序写入日志,而不寻求与其他进程共享您的日志设备可能导致搜索和争用,这反过来可能导致多秒延迟。

  • 不要将ZooKeeper置于可能导致交换的情况。为了使ZooKeeper能够以任何时间运行,它根本不允许交换。因此,请确保为ZooKeeper提供的最大堆大小不大于ZooKeeper可用的实际内存量。有关详细信息,请参阅 下面的“ 要避免的事项”。

供应

需要考虑的事项:ZooKeeper的优势和局限

管理

保养

ZooKeeper集群需要很少的长期维护,但您必须了解以下内容:

正在进行的数据目录清理

ZooKeeper 数据目录包含的文件是特定服务集合存储的znode的持久副本。这些是快照和事务日志文件。当对znode进行更改时,这些更改将附加到事务日志中,有时,当日志变大时,所有znode的当前状态的快照将写入文件系统。此快照取代所有以前的日志。

使用默认配置时,ZooKeeper服务器不会删除旧快照和日志文件(请参阅下面的autopurge),这是运营商的责任。每个服务环境都不同,因此管理这些文件的要求可能因安装而不同(例如备份)。

PurgeTxnLog实用程序实现了管理员可以使用的简单保留策略。该API文档包含调用约定(参数等)的详细信息。

在以下示例中,将保留最后的计数快照及其相应的日志,并删除其他日志。<count>的值通常应大于3(尽管不是必需的,但在最近的日志已损坏的情况下,这提供了3个备份)。这可以作为ZooKeeper服务器计算机上的cron作业运行,以便每天清理日志。

<span style="color:#000000"> java -cp zookeeper.jar:lib / slf4j-api-1.6.1.jar:lib / slf4j-log4j12-1.6.1.jar:lib / log4j-1.2.15.jar:conf org.apache.zookeeper.server。 PurgeTxnLog <dataDir> <snapDir> -n <count></span>

版本3.4.0中引入了自动清除快照和相应的事务日志,可以通过以下配置参数autopurge.snapRetainCountautopurge.purgeInterval启用。有关详细信息,请参阅 下面的高级配置。

调试日志清理(log4j)

请参阅本文档中的登录部分。预计您将使用内置的log4j功能设置滚动文件追加器。发行版tar的conf / log4j.properties中的示例配置文件提供了此示例。

监督

您将需要一个管理每个ZooKeeper服务器进程(JVM)的监督过程。ZK服务器被设计为“快速失败”,这意味着如果发生无法恢复的错误,它将关闭(进程退出)。由于ZooKeeper服务群集非常可靠,这意味着虽然服务器可能会在整个群集中停留,但仍然处于活动状态并提供请求。此外,由于群集是“自我修复”,故障服务器一旦重新启动,将自动重新加入整体,无需任何手动交互。

有一个监控过程,如daemontools或 SMF (监控过程的其他选项也可用,取决于你想要使用哪一个,这只是两个例子)管理你的ZooKeeper服务器确保如果进程异常退出它将自动重新启动并快速重新加入群集。

监控

ZooKeeper服务可以通过两种主要方式之一进行监控; 1)命令端口通过使用4个字母的单词和2)JMX。有关您的环境/要求,请参阅相应部分。

记录

ZooKeeper使用log4j 1.2版作为其日志记录基础结构。ZooKeeper默认的log4j.properties 文件位于conf目录中。Log4j要求 log4j.properties位于工作目录(运行ZooKeeper的目录)中,或者可以从类路径访问。

有关更多信息,请参阅 log4j手册的Log4j默认初始化过程。

故障排除

服务器因文件损坏而无法启动

由于ZooKeeper服务器的事务日志中的某些文件损坏,服务器可能无法读取其数据库并且无法启动。您将在加载ZooKeeper数据库时看到一些IOException。在这种情况下,请确保您的整体中的所有其他服务器都已启动并正常工作。在命令端口上使用“stat”命令查看它们是否运行状况良好。在验证了集合的所有其他服务器都已启动后,您可以继续清理损坏服务器的数据库。删除datadir / version-2和datalogdir / version-2 /中的所有文件。重启服务器。

配置参数

ZooKeeper的行为由ZooKeeper配置文件控制。假设磁盘布局相同,则此文件的设计使得构成ZooKeeper服务器的所有服务器都可以使用完全相同的文件。如果服务器使用不同的配置文件,则必须注意确保所有不同配置文件中的服务器列表匹配。

最低配置

以下是必须在配置文件中定义的最低配置关键字:

CLIENTPORT

侦听客户端连接的端口; 也就是客户端尝试连接的端口。

DATADIR

ZooKeeper将存储内存数据库快照的位置,除非另有说明,否则为数据库更新的事务日志。

注意

放置事务日志的位置要小心。专用的事务日志设备是始终如一的良好性能的关键。将日志置于繁忙的设备上会对性能产生负面影响。

滚动时间

单个tick的长度,即ZooKeeper使用的基本时间单位,以毫秒为单位。它用于调节心跳和超时。例如,最小会话超时将是两个滴答。

高级配置

该部分中的配置设置是可选的。您可以使用它们来进一步微调ZooKeeper服务器的行为。有些也可以使用Java系统属性进行设置,通常采用zookeeper.keyword形式。确切的系统属性(如果可用)如下所示。

dataLogDir

(没有Java系统属性)

此选项将指示计算机将事务日志写入dataLogDir而不是dataDir。这允许使用专用的日志设备,并有助于避免日志记录和快照之间的竞争。

注意

拥有专用的日志设备会对吞吐量和稳定的延迟产生很大影响。强烈建议专用日志设备并将dataLogDir设置为指向该设备上的目录,然后确保将dataDir指向驻留在该设备上的目录。

globalOutstandingLimit

(Java系统属性:zookeeper.globalOutstandingLimit。

客户端可以比ZooKeeper更快地提交请求,尤其是在有很多客户端的情况下。为了防止ZooKeeper因排队请求而耗尽内存,ZooKeeper将限制客户端,以便系统中只有globalOutstandingLimit未完成的请求。默认限制为1,000。

preAllocSize

(Java系统属性:zookeeper.preAllocSize

为了避免搜索,ZooKeeper以preAllocSize千字节为单位在事务日志文件中分配空间。默认块大小为64M。更改块大小的一个原因是,如果更频繁地拍摄快照,则减小块大小。(另请参阅snapCount)。

snapCount

(Java系统属性:zookeeper.snapCount

ZooKeeper将事务记录到事务日志中。将snapCount事务写入日志文件后,将启动快照并创建新的事务日志文件。默认snapCount为100,000。

跟踪文件

(Java系统属性:requestTraceFile

如果定义了此选项,请求将记录到名为traceFile.year.month.day的跟踪文件中。使用此选项可提供有用的调试信息,但会影响性能。(注意:系统属性没有zookeeper前缀,配置变量名称与系统属性不同。是的 - 它不一致,而且很烦人。)

maxClientCnxns

(没有Java系统属性)

限制由IP地址标识的单个客户端可能对ZooKeeper集合的单个成员进行的并发连接数(在套接字级别)。这用于防止某些类别的DoS攻击,包括文件描述符耗尽。默认值为60.将此值设置为0将完全删除并发连接的限制。

clientPortAddress

3.3.0中的新功能:侦听客户端连接的地址(ipv4,ipv6或hostname); 也就是客户端尝试连接的地址。这是可选的,默认情况下我们以这样的方式绑定,即接受服务器上任何地址/接口/ nic 的clientPort的任何连接。

minSessionTimeout

(没有Java系统属性)

3.3.0中的新增内容:服务器允许客户端协商的最小会话超时(以毫秒为单位)。默认为tickTime的 2倍。

maxSessionTimeout

(没有Java系统属性)

3.3.0中的新增内容:服务器允许客户端协商的最大会话超时(以毫秒为单位)。默认为tickTime的 20倍。

fsync.warningthresholdms

(Java系统属性:fsync.warningthresholdms

3.3.4中的新增内容:只要事务日志(WAL)中的fsync花费的时间超过此值,就会向日志输出警告消息。值以毫秒为单位指定,默认值为1000.此值只能设置为系统属性。

autopurge.snapRetainCount

(没有Java系统属性)

3.4.0中的新增 功能启用后,ZooKeeper自动清除功能分别在dataDirdataLogDir中保留autopurge.snapRetainCount最新快照和相应的事务日志,并删除其余日志。默认为3.最小值为3。

autopurge.purgeInterval

(没有Java系统属性)

3.4.0中的新增功能:必须触发清除任务的时间间隔(以小时为单位)。设置为正整数(1和更高)以启用自动清除。默认为0。

群集选项

本节中的选项旨在与服务器集合一起使用 - 即,在部署服务器群集时。

electionAlg

(没有Java系统属性)

选举实施使用。值“0”对应于原始的基于UDP的版本,“1”对应于未经认证的基于UDP的快速领导者选举版本,“2”对应于经认证的基于UDP的快速领导者选举版本,并且“3”对应于基于TCP的快速领导者选举版本。目前,算法3是默认值

注意

现在不推荐使用领导者选举0,1和2的实现 。我们打算在下一个版本中删除它们,此时只有FastLeaderElection可用。

initLimit

(没有Java系统属性)

以滴答为单位的时间量(请参阅tickTime),以允许关注者连接并同步到领导者。如果ZooKeeper管理的数据量很大,则根据需要增加此值。

leaderServes

(Java系统属性:zookeeper。领导者服务

领导者接受客户连接。默认值为“是”。领导者协调更新。对于更高的更新吞吐量而言,读取吞吐量略有损失,可以将领导者配置为不接受客户端并专注于协调。此选项的默认值为yes,这表示领导者将接受客户端连接。

注意

如果集合中有三个以上的ZooKeeper服务器,强烈建议启用领导者选择。

server.x = [hostname]:nnnnn [:nnnnn]等

(没有Java系统属性)

组成ZooKeeper集合的服务器。当服务器启动时,它通过在数据目录中查找文件myid来确定它是哪个服务器。该文件包含了服务器数量,在ASCII,它应该与 Xserver.x在此设置的左侧。

组成客户端使用的ZooKeeper服务器的服务器列表必须与每个ZooKeeper服务器所具有的ZooKeeper服务器列表相匹配。

有两个端口号nnnnn。第一批追随者用来连接领导者,第二个追随者用于领导者选举。仅当electionAlg为1,2或3(默认值)时,才需要领导者选举端口。如果electionAlg为0,则不需要第二个端口。如果要在一台计算机上测试多个服务器,则可以为每个服务器使用不同的端口。

syncLimit

(没有Java系统属性)

以滴答为单位的时间量(请参阅tickTime),以允许关注者与ZooKeeper同步。如果粉丝落后于领导者,他们就会被淘汰。

group.x = NNNNN [:NNNNN]

(没有Java系统属性)

启用分层仲裁构造。“x”是组标识符,“=”符号后面的数字对应于服务器标识符。赋值的左侧是以冒号分隔的服务器标识符列表。请注意,组必须是不相交的,并且所有组的并集必须是ZooKeeper集合。

你会在这里找到一个例子

weight.x = NNNNN

(没有Java系统属性)

与“组”一起使用时,它在形成仲裁时为服务器分配权重。这样的值对应于投票时服务器的权重。ZooKeeper的一些部分需要投票,例如领导者选举和原子广播协议。默认情况下,服务器的权重为1.如果配置定义组而不是权重,则将为所有服务器分配值1。

你会在这里找到一个例子

cnxTimeout

(Java系统属性:饲养员cnxTimeout

设置打开领导者选举通知连接的超时值。仅适用于您使用electionAlg 3的情况。

注意

默认值为5秒。

4lw.commands.whitelist

(Java系统属性:zookeeper.4lw.commands.whitelist

3.4.10中的新增内容: 此属性包含逗号分隔的四字母单词命令列表 。引入它是为了对ZooKeeper可以执行的命令集提供细粒度控制,因此用户可以在必要时关闭某些命令。默认情况下,如果未指定属性,则它包含除“wchp”和“wchc”之外的所有支持的四个字母单词命令。如果指定了该属性,则仅启用白名单中列出的命令。

以下是启用stat,ruok,conf和isro命令的配置示例,同时禁用其余的Four Letter Words命令:

<span style="color:#000000">                4lw.commands.whitelist = stat,ruok,conf,isro</span>

用户还可以使用星号选项,这样他们就不必在列表中逐个包含每个命令。例如,这将启用所有四个字母单词命令:

<span style="color:#000000">                4lw.commands.whitelist = *</span>

身份验证和授权选项

本节中的选项允许控制服务执行的身份验证/授权。

zookeeper.DigestAuthenticationProvider.superDigest

(仅限Java系统属性:zookeeper.DigestAuthenticationProvider.superDigest

默认情况下,此功能已禁用

3.2中的新功能: 允许ZooKeeper集合管理员以“超级”用户身份访问znode层次结构。特别是对于经过身份验证的用户,不会进行ACL检查。

org.apache.zookeeper.server.auth.DigestAuthenticationProvider可用于生成superDigest,使用“super:<password>”参数调用它。在启动整体的每个服务器时,提供生成的“super:<data>”作为系统属性值。

当对ZooKeeper服务器(来自ZooKeeper客户端)进行身份验证时,传递“digest”和authdata“super:<password>”的方案。请注意,摘要auth以明文形式将authdata传递给服务器,仅在localhost(不是通过网络)或通过加密连接使用此身份验证方法是明智的。

实验选项/功能

目前被认为是实验性的新功能。

只读模式服务器

(Java系统属性:readonlymode.enabled

3.4.0中的新增功能: 将此值设置为true可启用只读模式服务器支持(默认情况下禁用)。即使服务器可能与仲裁分区,ROM也允许请求ROM支持的客户端会话连接到服务器。在此模式下,ROM客户端仍然可以从ZK服务读取值,但无法写入值并查看其他客户端的更改。有关详细信息,请参阅ZOOKEEPER-784。

不安全的选择

以下选项可能很有用,但在使用它们时要小心。解释每个的风险以及变量的作用的解释。

FORCESYNC

(Java系统属性:zookeeper.forceSync

在完成处理更新之前,需要将更新同步到事务日志的介质。如果此选项设置为no,则ZooKeeper不需要将更新同步到媒体。

jute.maxbuffer:

(Java系统属性: jute.maxbuffer

此选项只能设置为Java系统属性。它上面没有zookeeper前缀。它指定可以存储在znode中的数据的最大大小。默认值为0xfffff,或者仅为1M。如果更改此选项,则必须在所有服务器和客户端上设置系统属性,否则将出现问题。这真是一个健全检查。ZooKeeper旨在存储大小为千字节的数据。

skipACL

(Java系统属性:zookeeper.skipACL

跳过ACL检查。这样可以提高吞吐量,但可以向所有人开放对数据树的完全访问权限。

禁用数据目录自动创建

从3.5移植: ZooKeeper服务器的默认行为是在启动时自动创建数据目录(在配置文件中指定),如果该目录尚不存在。在某些情况下,这可能是不方便的甚至是危险的。假设对正在运行的服务器进行配置更改,其中dataDir参数被意外更改。当ZooKeeper服务器重新启动时,它将创建这个不存在的目录并开始服务 - 使用空的znode命名空间。这种情况可能导致有效的“裂脑”情况(即新的无效目录和原始有效数据存储中的数据)。因此,可以选择关闭此自动创建行为。通常,对于生产环境,这应该是完成的,但不幸的是,此时无法更改默认的遗留行为,因此必须根据具体情况进行此操作。这留给了用户和ZooKeeper发行版的打包者。

运行zkServer.sh时,可以通过将环境变量ZOO_DATADIR_AUTOCREATE_DISABLE设置为1 来禁用autocreate 。直接从类文件运行ZooKeeper服务器时,可以通过在java命令行上设置zookeeper.datadir.autocreate = false来完成,即-Dzookeeper.datadir .autocreate = FALSE

禁用此功能,并且ZooKeeper服务器确定所需的目录不存在时,它将生成错误并拒绝启动。

提供了一个新脚本zkServer-initialize.sh来支持此新功能。如果禁用autocreate,则用户必须首先安装ZooKeeper,然后创建数据目录(可能还有txnlog目录),然后启动服务器。否则如前一段所述,服务器将无法启动。运行zkServer-initialize.sh将创建所需的目录,并可选择设置myid文件(可选的命令行参数)。即使未使用自动创建功能本身,也可以使用此脚本,并且可能对用户有用,因为此过程(设置,包括创建myid文件)一直是用户的问题。请注意,此脚本仅确保数据目录存在,它不会创建配置文件,而是需要配置文件才能执行。

使用Netty框架进行通信

3.4中的新功能: Netty 是一个基于NIO的客户端/服务器通信框架,它简化了(通过直接使用NIO)许多Java应用程序的网络级通信的复杂性。此外,Netty框架内置了对加密(SSL)和身份验证(证书)的支持。这些是可选功能,可以单独打开或关闭。

在版本3.4之前,ZooKeeper一直使用NIO,但在版本3.4及更高版本中,Netty作为NIO(替换)的选项受支持。NIO仍然是默认值,但是通过将环境变量“zookeeper.serverCnxnFactory”设置为“org.apache.zookeeper.server.NettyServerCnxnFactory”,可以使用基于Netty的通信代替NIO。您可以选择在客户端或服务器上设置此项,通常您可以在两者上设置此项,但这由您自行决定。

TBD - netty的调整选项 - 目前没有netty特定的,但我们应该添加一些。Esp围绕netty创建的读者工作线程数量的最大界限。

TBD - 如何管理加密

TBD - 如何管理证书

ZooKeeper命令:四字母词

ZooKeeper响应一小组命令。每个命令由四个字母组成。您可以通过telnet或nc在客户端端口向ZooKeeper发出命令。

三个更有趣的命令:“stat”给出了关于服务器和连接客户端的一些一般信息,而“srvr”和“cons”分别给出了服务器和连接的扩展细节。

CONF

3.3.0中的新功能:打印有关服务配置的详细信息。

缺点

3.3.0中的新增功能:列出连接到此服务器的所有客户端的完整连接/会话详细信息。包括有关接收/发送的数据包数量,会话ID,操作延迟,上次执行的操作等信息...

CRST

3.3.0中的新增功能:重置所有连接的连接/会话统计信息。

倾倒

列出未完成的会话和短暂的节点。这只适用于领导者。

ENVI

打印服务环境的详细信息

你还行吗

测试服务器是否在非错误状态下运行。如果正在运行,服务器将使用imok响应。否则它根本不会响应。

“imok”的响应不一定表示服务器已加入仲裁,只是服务器进程处于活动状态并绑定到指定的客户端端口。有关状态wrt仲裁和客户端连接信息的详细信息,请使用“stat”。

SRST

重置服务器统计。

SRVR

3.3.0中的新功能:列出服务器的完整详细信息。

统计

列出服务器和连接客户端的简要详细信息。

WCHS

3.3.0中的新功能:列出服务器手表的简要信息。

wchc

3.3.0中的新功能:按会话列出服务器监视的详细信息。这将输出与相关监视(路径)的会话(连接)列表。请注意,根据手表的数量,此操作可能很昂贵(即影响服务器性能),请谨慎使用。

wchp

3.3.0中的新功能:按路径列出服务器监视的详细信息。这将输出一个包含相关会话的路径列表(znodes)。请注意,根据手表的数量,此操作可能很昂贵(即影响服务器性能),请谨慎使用。

MNTR

3.4.0中的新增内容:输出可用于监视群集运行状况的变量列表。

<span style="color:#000000">$ echo mntr | nc localhost 2185zk_version 3.4.0
zk_avg_latency 0
zk_max_latency 0
zk_min_latency 0
zk_packets_received 70
zk_packets_sent 69
zk_outstanding_requests 0
zk_server_state领导者
zk_znode_count 4
zk_watch_count 0
zk_ephemerals_count 0
zk_approximate_data_size 27
zk_followers 4  - 仅由领导者公开
zk_synced_followers 4  - 仅由领导者公开
zk_pending_syncs 0  - 仅由领导者公开
zk_open_file_descriptor_count 23  - 仅在Unix平台上可用
zk_max_file_descriptor_count 1024  - 仅在Unix平台上可用
</span>

输出与java属性格式兼容,内容可能随时间而变化(添加了新的键)。您的脚本应该预期更改。

注意:某些键是特定于平台的,而某些键仅由Leader导出。

输出包含多行,格式如下:

<span style="color:#000000">key \ t value</span>

这是ruok 命令的一个例子:

<span style="color:#000000">$ echo ruok | nc 127.0.0.1 5111
我可以
</span>

数据文件管理

ZooKeeper将其数据存储在数据目录中,将其事务日志存储在事务日志目录中。默认情况下,这两个目录是相同的。服务器可以(并且应该)配置为将事务日志文件存储在与数据文件不同的目录中。当事务日志驻留在专用日志设备上时,吞吐量增加和延迟减少。

数据目录

该目录中有两个文件:

  • myid - 包含人类可读ASCII文本中的单个整数,表示服务器ID。

  • snapshot。<zxid> - 保存数据树的模糊快照。

每个ZooKeeper服务器都有一个唯一的id。此id用于两个位置:myid文件和配置文件。该身份识别码的文件标识对应于给定数据目录的服务器。配置文件列出了由其服务器标识标识的每个服务器的联系信息。当ZooKeeper服务器实例启动时,它从myid文件读取其id ,然后使用该id从配置文件中读取,查找它应该监听的端口。

存储在数据目录中的快照文件是模糊快照,因为在ZooKeeper服务器拍摄快照期间,数据树正在进行更新。快照文件名的后缀是zxid,ZooKeeper事务id,是快照开始时的最后一个提交事务。因此,快照包括在快照处理期间发生的数据树更新的子集。然后,快照可能与实际存在的任何数据树不对应,因此我们将其称为模糊快照。尽管如此,ZooKeeper仍然可以使用此快照进行恢复,因为它利用了其更新的幂等特性。通过针对模糊快照重放事务日志,ZooKeeper在日志结束时获取系统的状态。

日志目录

日志目录包含ZooKeeper事务日志。在进行任何更新之前,ZooKeeper确保将表示更新的事务写入非易失性存储。每次开始快照时都会启动一个新的日志文件。日志文件的后缀是写入该日志的第一个zxid​​。

文件管理

快照和日志文件的格式在独立ZooKeeper服务器和复制的ZooKeeper服务器的不同配置之间不会更改。因此,您可以将这些文件从正在运行的复制ZooKeeper服务器提取到具有独立ZooKeeper服务器的开发计算机,以便进行故障排除。

使用较旧的日志和快照文件,您可以查看ZooKeeper服务器的先前状态,甚至还原该状态。LogFormatter类允许管理员查看日志中的事务。

ZooKeeper服务器创建快照和日志文件,但从不删除它们。数据和日志文件的保留策略在ZooKeeper服务器之外实现。服务器本身只需要最新的完整模糊快照和该快照开头的日志文件。有关设置保留策略和维护ZooKeeper存储的详细信息,请参阅本文档中的 维护部分。

注意

存储在这些文件中的数据未加密。在ZooKeeper中存储敏感数据的情况下(这种情况相当罕见),需要采取必要的措施来防止未经授权的访问。这些措施在ZooKeeper外部(例如,控制对文件的访问),并取决于部署它的各个设置。

要避免的事情

以下是通过正确配置ZooKeeper可以避免的一些常见问题:

不一致的服务器列表

客户端使用的ZooKeeper服务器列表必须与每个ZooKeeper服务器所拥有的ZooKeeper服务器列表相匹配。如果客户端列表是真实列表的子集,那么事情就可以了,但如果客户端有一个位于不同ZooKeeper集群中的ZooKeeper服务器列表,事情就会变得很奇怪。此外,每个Zookeeper服务器配置文件中的服务器列表应该彼此一致。

transasction日志的错误放置

ZooKeeper中性能最关键的部分是事务日志。ZooKeeper在返回响应之前将事务同步到媒体。专用的事务日志设备是始终如一的良好性能的关键。将日志置于繁忙的设备上会对性能产生负面影响。如果您只有一个存储设备,请将跟踪文件放在NFS上并增加snapshotCount; 它并没有消除这个问题,但它应该减轻它。

Java堆大小不正确

您应该特别注意正确设置Java最大堆大小。特别是,您不应该创建ZooKeeper交换到磁盘的情况。该磁盘是ZooKeeper的死亡。一切都是有序的,所以如果处理一个请求交换磁盘,所有其他排队的请求可能会做同样的事情。磁盘。不要交换。

保守估计:如果你有4G的RAM,不要将Java最大堆大小设置为6G甚至4G。例如,您更有可能将3G堆用于4G计算机,因为操作系统和缓存也需要内存。估计系统所需堆大小的最佳且唯一建议的做法是运行负载测试,然后确保远低于导致系统交换的使用限制。

可公开访问的部署

ZooKeeper集合有望在可信计算环境中运行。因此,建议在防火墙后部署ZooKeeper。

最佳实践

为获得最佳结果,请注意以下良好的Zookeeper实践列表:

对于多坦安装看到部分 细节的ZooKeeper“chroot环境”的支持,部署很多应用程序/服务的接口,以单一的ZooKeeper集群时,这是非常有用的。

ZooKeeper管理员指南 部署和管理指南相关推荐

  1. 《微软云计算Microsoft Azure部署与管理指南》即将上市!!!

    大家好,本人新作<微软云计算Microsoft Azure部署与管理指南>即将与广大读者见面,由电子工业出版社出版.希望大家能关注此书,并推荐给身边的好友和技术人员. 众所周知,Micro ...

  2. ZooKeeper管理员指南——部署与管理ZooKeeper

    本文以ZooKeeper3.4.3版本的官方指南为基础:http://zookeeper.apache.org/doc/r3.4.3/zookeeperAdmin.html,补充一些作者运维实践中的要 ...

  3. ZooKeeper管理员指南——部署与管理

    转载请注明:@ni掌柜 nileader@gmail.com 本文以ZooKeeper3.4.3版本的官方指南为基础:http://zookeeper.apache.org/doc/r3.4.3/zo ...

  4. ZooKeeper管理员指南

    ZooKeeper管理员指南 部署和管理指南 部署 系统要求 支持的平台 必备软件 群集(多服务器)安装程序 单服务器和开发人员设置 管理 设计ZooKeeper部署 跨机器要求 单机要求 供应 需要 ...

  5. 部署混合云指南:多云服务商管理的八大要素

    本文讲的是部署混合云指南:多云服务商管理的八大要素[IT168 云计算]混合云时代,服务商管理一直以来都是IT行业中颇为重要的一项需求,即使有些许乏味.混合云模型,特别是在与多重云策略一致时,需要同时 ...

  6. 面向站长和网站管理员的Web缓存加速指南

    2019独角兽企业重金招聘Python工程师标准>>> 原文(英文)地址: http://www.mnot.net/cache_docs/  版权声明:署名-非商业性使用-禁止演绎 ...

  7. 转载:面向站长和网站管理员的Web缓存加速指南

    转载地址: http://www.chedong.com/tech/cache_docs.html 这是一篇知识性的文档,主要目的是为了让Web缓存相关概念更容易被开发者理解并应用于实际的应用环境中. ...

  8. 部署与管理ZooKeeper

    2019独角兽企业重金招聘Python工程师标准>>> 部署与管理ZooKeeper 博客分类: zookeeper 本文以ZooKeeper3.4.3版本的官方指南为基础:http ...

  9. 系统集成资质培训 - 标准系列 -软件文档管理指南

    软件文档管理指南GB/T16680-1996 <GB/T16680-1996软件文档管理指南>(由原国家技术监督局于1996年12月18日发布,1997年7月1日起实施,该标准为那些对软件 ...

最新文章

  1. 智能交通大数据及云应用平台解决方案
  2. [RGEOS]空间拓扑关系
  3. 创建私有CA详细图解
  4. 数据库弱一致性四个隔离级别
  5. 5G NR — 密集组网和异构组网
  6. mysql无法创建存储过程问题 ERROR 1307 (HY000)
  7. spring mvc学习(16)Could not publish server configuration for Tomcat v8.0 Server at localhost.
  8. plt.errorbar画误差曲线
  9. java 判断顺序_通过指令码来判断Java代码的执行顺序(++问题与return和finally的问题)...
  10. [ARM] [linux master] 调试技术001 GDB-Advanced-001 Code Dump 的调试
  11. 美国知名DJ 3LAU以1160万美元出售全球首套音乐专辑NFT藏品
  12. android 添加个人标签,android – 如何在标签标签上添加填充?
  13. windows下使用mahout|Taste实现协同过滤算法
  14. vivado 2017.4安装教程
  15. 如何使用分区工具实现无损分区大小调整?
  16. python读取excel文件数据并且画折线图(入门级)
  17. 太极图计算机,如何使用CAD快速画一个太极图?
  18. 【洛谷】UVA437 巴比伦塔 The Tower of Babylon
  19. IDEA集成Gerrit插件
  20. Udacity机器学习入门笔记——数据集与问题

热门文章

  1. Magento去除前台URL中显示的index.php
  2. Objective-C 语法快速参考(附:Learning_Objective-C_A_Primer_中文版)
  3. 悟透JavaScript
  4. 事务(注解声明式事务管理)
  5. Linux(debian7)操作基础(十二)之文件加密使用指南
  6. 每日一题(C语言基础篇)3
  7. 挖掘建模-关联规则-Apriori算法
  8. 【C++面向对象】类的大小以及虚继承
  9. DirectoryInfo类 c# 1614534016
  10. 接收用户的输入 Scanner类