zookeeper配置

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

clientPort:侦听客户端连接的端口; 也就是客户端尝试连接的端口。
secureClientPort:使用SSL侦听安全客户端连接的端口。clientPort指定明文连接的端口,而secureClientPort指定SSL连接的端口。指定两者都启用混合模式,而忽略将禁用该模式。请注意,当用户将zookeeper.serverCnxnFactory,zookeeper.clientCnxnSocket作为Netty插件时,将启用SSL功能。
dataDir:ZooKeeper将存储内存数据库快照的位置,除非另有说明,否则为数据库更新的事务日志。注意:放置事务日志的位置要小心。专用的事务日志设备是始终如一的良好性能的关键。将日志置于繁忙的设备上会对性能产生负面影响。
tickTime:单个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决定。为了防止仲裁中的所有计算机同时拍摄快照,每个ZooKeeper服务器将在事务日志中的事务数达到[snapCount / 2 + 1]中的运行时生成的随机值时拍摄快照,snapCount] range。默认snapCount为100,000。
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系统属性:zookeeper.fsync.warningthresholdms)3.3.4中的新增内容:只要事务日志(WAL)中的fsync花费的时间超过此值,就会向日志输出警告消息。值以毫秒为单位指定,默认为1000.此值只能设置为系统属性。
autopurge.snapRetainCount :(无Java系统属性)3.4.0中的新增功能:启用后,ZooKeeper自动清除功能分别在dataDir和dataLogDir中保留autopurge.snapRetainCount最新快照和相应的事务日志,并删除其余日志。默认为3.最小值为3。
autopurge.purgeInterval :(无Java系统属性)3.4.0中的新增内容:必须触发清除任务的时间间隔(以小时为单位)。设置为正整数(1和更高)以启用自动清除。默认为0。
syncEnabled :( Java系统属性:zookeeper.observer.syncEnabled)3.4.6,3.5.0中的新增内容:观察者现在默认记录事务并将快照写入磁盘,就像参与者一样。这减少了重启时观察者的恢复时间。设置为“false”以禁用此功能。默认为“true”
zookeeper.extendedTypesEnabled :(仅限Java系统属性:zookeeper.extendedTypesEnabled)3.5.4中的新增内容:定义为“true”以启用扩展功能,例如创建TTL节点。它们默认是禁用的。重要信息:由于内部限制,启用的服务器ID必须小于255。
zookeeper.emulate353TTLNodes :(仅限Java系统属性:zookeeper.emulate353TTLNodes)3.5.4中的新功能:由于ZOOKEEPER-2901,3.5.4 / 3.6.0版不支持在3.5.3版中创建的TTL节点。但是,通过zookeeper.emulate353TTLNodes系统属性提供了一种解决方法。如果您在ZooKeeper 3.5.3中使用了TTL节点,并且除了zookeeper.extendedTypesEnabled之外,还需要将兼容性设置zookeeper.emulate353TTLNodes设置为“true” 。注意:由于该错误,服务器ID必须为127或更少。此外,最大支持TTL值为1099511627775,小于3.5.3(1152921504606846975)中允许的值
serverCnxnFactory :( Java系统属性:zookeeper.serverCnxnFactory)指定ServerCnxnFactory实现。应将其设置为NettyServerCnxnFactory使用基于TLS的服务器通信。默认是NIOServerCnxnFactory。

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

electionAlg :(没有Java系统属性)要使用的选举实现。值“1”对应于未经认证的基于UDP的快速领导者选举版本,“2”对应于经认证的基于UDP的快速领导者选举版本,“3”对应于基于TCP的快速领导者选举版本选举。目前,算法3是默认值。注意领导者选举1和2的实施现已弃用。我们打算在下一个版本中删除它们,此时只有FastLeaderElection可用。
initLimit :(无Java系统属性)允许关注者连接并同步到领导者的时间量(以tick为单位)(请参阅tickTime)。如果ZooKeeper管理的数据量很大,则根据需要增加此值。
leaderServes :( Java系统属性:zookeeper。** leaderServes **)Leader接受客户端连接。默认值为“是”。领导者协调更新。为了获得更高的更新吞吐量,只需稍微花费读取吞吐量,就可以将领导者配置为不接受客户端并专注于协调。此选项的默认值为yes,这表示领导者将接受客户端连接。注意:如果集合中有三个以上的ZooKeeper服务器,强烈建议启用领导者选择。
server.x = [hostname]:nnnnn [:nnnnn]等 :(没有Java系统属性)服务器构成ZooKeeper集合。当服务器启动时,它通过在数据目录中查找文件myid来确定它是哪个服务器。该文件包含了服务器数量,在ASCII,它应该与X在server.x在此设置的左侧。组成客户端使用的ZooKeeper服务器的服务器列表必须与每个ZooKeeper服务器所具有的ZooKeeper服务器列表相匹配。有两个端口号nnnnn。第一批追随者用来连接领导者,第二个追随者用于领导者选举。如果要在一台计算机上测试多个服务器,则可以为每个服务器使用不同的端口。
syncLimit :(无Java系统属性)允许关注者与ZooKeeper同步的时间量(以tick为单位)(请参阅tickTime)。如果粉丝落后于领导者,他们就会被淘汰。
group.x = nnnnn [:nnnnn] :(无Java系统属性)启用分层仲裁构造。“x”是组标识符,“=”符号后面的数字对应于服务器标识符。赋值的左侧是以冒号分隔的服务器标识符列表。请注意,组必须是不相交的,并且所有组的并集必须是ZooKeeper集合。你会在这里找到一个例子
weight.x = nnnnn :(无Java系统属性)与“group”一起使用时,它在形成仲裁时为服务器分配权重。这样的值对应于投票时服务器的权重。ZooKeeper的一些部分需要投票,例如领导者选举和原子广播协议。默认情况下,服务器的权重为1.如果配置定义组而不是权重,则将为所有服务器分配值1。你会在这里找到一个例子
cnxTimeout :( Java系统属性:zookeeper。** cnxTimeout **)设置打开领导者选举通知连接的超时值。仅适用于您使用electionAlg 3的情况。注意默认值为5秒。
standaloneEnabled :(无Java系统属性)3.5.0中的新功能:当设置为false时,可以在复制模式下启动单个服务器,单个参与者可以使用观察者运行,并且群集可以重新配置为一个节点,并且从一个节点。对于向后兼容性,默认值为true。可以使用QuorumPeerConfig的setStandaloneEnabled方法或通过将“standaloneEnabled = false”或“standaloneEnabled = true”添加到服务器的配置文件来设置它。
reconfigEnabled :(无Java系统属性)3.5.3中的新增功能:它控制动态重新配置功能的启用或禁用。启用此功能后,用户可以通过ZooKeeper客户端API或ZooKeeper命令行工具执行重新配置操作,前提是用户有权执行此类操作。禁用此功能后,任何用户(包括超级用户)都无法执行重新配置。任何重新配置​​的尝试都将返回错误。“reconfigEnabled”选项可以设置为“reconfigEnabled = false”或“reconfigEnabled = true”到服务器的配置文件,或使用QuorumPeerConfig的setReconfigEnabled方法。默认值为false。如果存在,则该值应该在整个集合中的每个服务器上保持一致。在某些服务器上将值设置为true而在其他服务器上将其设置为false将导致不一致的行为,具体取决于哪个服务器被选为leader。如果领导者的设置为“reconfigEnabled = true”,则整体将启用重新配置功能。如果领导者的设置为“reconfigEnabled = false”,则整体将禁用重新配置功能。因此,建议在整体中的服务器之间具有“reconfigEnabled”的一致值。
4lw.commands.whitelist :( Java系统属性:zookeeper.4lw.commands.whitelist)3.5.3中的新功能:用户想要使用的逗号分隔的四字母单词命令列表。必须在此列表中放入有效的Four Letter Words命令,否则ZooKeeper服务器将不启用该命令。默认情况下,白名单仅包含zkServer.sh使用的“srvr”命令。默认情况下,禁用其余的四个字母单词命令。以下是启用stat,ruok,conf和isro命令的配置示例,同时禁用其余的Four Letter Words命令:4lw.commands.whitelist=stat, ruok, conf, isro如果您确实需要默认启用所有四个字母单词命令,则可以使用星号选项,这样您就不必在列表中逐个包含每个命令。例如,这将启用所有四个字母单词命令:4lw.commands.whitelist=*
tcpKeepAlive :( Java系统属性:zookeeper.tcpKeepAlive)3.5.4中的新增内容:将此设置为true会在仲裁成员用于执行选举的套接字上设置TCP keepAlive标志。这将允许仲裁成员之间的连接在存在可能以其他方式破坏它们的网络基础结构时保持不变。对于长时间运行或空闲连接,某些NAT和防火墙可能会终止或丢失状态。启用此选项依赖于操作系统级别设置才能正常工作,请查看操作系统有关TCP keepalive的选项以获取更多信息。默认为false。

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

DigestAuthenticationProvider.superDigest :( Java系统属性:zookeeper.DigestAuthenticationProvider.superDigest)默认情况下,此功能被禁用 3.2中的新功能:允许ZooKeeper集合管理员以“超级”用户身份访问znode层次结构。特别是对于经过身份验证的用户,不会进行ACL检查。org.apache.zookeeper.server.auth.DigestAuthenticationProvider可以用来生成superDigest,用一个参数“super:”调用它:“。提供生成的”超级:“当启动整体的每个服务器时作为系统属性值。当对ZooKeeper服务器(来自ZooKeeper客户端)进行身份验证时,传递”digest“的方案和”super:“的authdata:“。请注意,摘要auth以明文形式将authdata传递给服务器,仅在localhost(不是通过网络)或通过加密连接使用此身份验证方法是明智的。
X509AuthenticationProvider.superUser :( Java系统属性:zookeeper.X509AuthenticationProvider.superUser)支持SSL的方法,使ZooKeeper集合管理员能够以“超级”用户身份访问znode层次结构。当此参数设置为X500主体名称时,只有具有该主体的经过身份验证的客户端才能绕过ACL检查并拥有所有znode的完全权限。
zookeeper.superUser :( Java系统属性:zookeeper.superUser)与zookeeper.X509AuthenticationProvider.superUser类似,但对于基于SASL的登录是通用的。它存储可以作为“超级”用户访问znode层次结构的用户的名称。
ssl.authProvider :( Java系统属性:zookeeper.ssl.authProvider)指定org.apache.zookeeper.auth.X509AuthenticationProvider的子类,以用于安全客户端身份验证。这在不使用JKS的证书密钥基础结构中很有用。可能需要扩展javax.net.ssl.X509KeyManager和javax.net.ssl.X509TrustManager以从SSL堆栈获取所需的行为。要将ZooKeeper服务器配置为使用自定义提供程序进行身份验证,请为自定义AuthenticationProvider选择方案名称,并设置属性zookeeper.authProvider。[scheme]到自定义实现的完全限定类名。这会将提供程序加载到ProviderRegistry中。然后设置此属性zookeeper.ssl.authProvider = [scheme],该提供程序将用于安全身份验证。
sslQuorum :( Java系统属性:zookeeper.sslQuorum)3.5.5中的新增功能:启用加密的仲裁通信。默认是false。
ssl.keyStore.location和ssl.keyStore.password和ssl.quorum.keyStore.location和ssl.quorum.keyStore.password :( Java系统属性:zookeeper.ssl.keyStore.location和zookeeper.ssl.keyStore.password和zookeeper .ssl.quorum.keyStore.location和zookeeper.ssl.quorum.keyStore.password)3.5.5中的新增内容:指定Java密钥库的文件路径,该密钥库包含用于客户端和仲裁TLS连接的本地凭据以及密码解锁文件。
ssl.keyStore.type和ssl.quorum.keyStore.type :( Java系统属性:zookeeper.ssl.keyStore.type和zookeeper.ssl.quorum.keyStore.type)3.5.5中的新增内容:指定客户端的文件格式和仲裁密钥库。值:JKS,PEM或null(通过文件名检测)。默认值:null
ssl.trustStore.location和ssl.trustStore.password和ssl.quorum.trustStore.location和ssl.quorum.trustStore.password :( Java系统属性:zookeeper.ssl.trustStore.location和zookeeper.ssl.trustStore.password和zookeeper .ssl.quorum.trustStore.location和zookeeper.ssl.quorum.trustStore.password)3.5.5中的新增内容:指定Java信任库的文件路径,该信任库包含用于客户端和仲裁TLS连接的远程凭据以及密码解锁文件。
ssl.trustStore.type和ssl.quorum.trustStore.type :( Java系统属性:zookeeper.ssl.trustStore.type和zookeeper.ssl.quorum.trustStore.type)3.5.5中的新增内容:指定客户端的文件格式和仲裁信任商店。值:JKS,PEM或null(通过文件名检测)。默认值:null
ssl.protocol和ssl.quorum.protocol :( Java系统属性:zookeeper.ssl.protocol和zookeeper.ssl.quorum.protocol)3.5.5中的新增内容:指定要在客户端和仲裁TLS协商中使用的协议。默认值:TLSv1.2
ssl.enabledProtocols和ssl.quorum.enabledProtocols :( Java系统属性:zookeeper.ssl.enabledProtocols和zookeeper.ssl.quorum.enabledProtocols)3.5.5中的新增功能:指定客户端和仲裁TLS协商中启用的协议。默认值:protocol属性值
ssl.ciphersuites和ssl.quorum.ciphersuites :( Java系统属性:zookeeper.ssl.ciphersuites和zookeeper.ssl.quorum.ciphersuites)3.5.5中的新增内容:指定要在客户端和仲裁TLS协商中使用的已启用密码套件。默认值:启用的密码套件取决于所使用的Java运行时版本。
ssl.context.supplier.class和ssl.quorum.context.supplier.class :( Java系统属性:zookeeper.ssl.context.supplier.class和zookeeper.ssl.quorum.context.supplier.class)3.5.5中的新功能:指定用于在客户端和仲裁SSL通信中创建SSL上下文的类。这允许您使用自定义SSL上下文并实现以下方案:1.使用硬件密钥库,使用PKCS11或类似的东西加载。2.您无权访问软件密钥库,但可以从其容器中检索已构建的SSLContext。默认值:null
ssl.hostnameVerification和ssl.quorum.hostnameVerification :( Java系统属性:zookeeper.ssl.hostnameVerification和zookeeper.ssl.quorum.hostnameVerification)3.5.5中的新增内容:指定是否在客户端和仲裁TLS协商过程中启用主机名验证。禁用它仅建议用于测试目的。默认值:true
ssl.crl和ssl.quorum.crl :( Java系统属性:zookeeper.ssl.crl和zookeeper.ssl.quorum.crl)3.5.5中的新增功能:指定是否在客户端和仲裁TLS协议中启用证书吊销列表。默认值:false
ssl.ocsp和ssl.quorum.ocsp :( Java系统属性:zookeeper.ssl.ocsp和zookeeper.ssl.quorum.ocsp)3.5.5中的新增内容:指定是否在客户端和仲裁TLS协议中启用联机证书状态协议。默认值:false
ssl.clientAuth和ssl.quorum.clientAuth :( Java系统属性:zookeeper.ssl.clientAuth和zookeeper.ssl.quorum.clientAuth)3.5.5中的新功能:待定
ssl.handshakeDetectionTimeoutMillis和ssl.quorum.handshakeDetectionTimeoutMillis :( Java系统属性:zookeeper.ssl.handshakeDetectionTimeoutMillis和zookeeper.ssl.quorum.handshakeDetectionTimeoutMillis)3.5.5中新增: TBD
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐