zookeeper 管理员笔记

zookeeper须要java1.6以上java

调整好jvm大小,别放在引发swap环境,zookeeper的及时性,不容许swapnode

#################################################################################数据库

zookeeper数据目录包含由服务器存储的持久化拷贝文件,包括:快照和事务日志文件apache

事务日志:znode的变化追加到事务日志vim

快照:事务日志达到必定大小后,写入系统,这个快照取代全部的以往日志缓存

默认zookeeper配置不会删除老版本快照和日志文件,须要管理员手动删除安全

dataDir version目录下,log开头的是事务日志文件,snapshot开头的是快照bash


清理日志 dataDir存储快照snapshot目录,默认状况下,事物日志也在这个,能够给事物日志单独设置一个挂载点或者磁盘,提升zk性能(dataLogDir)服务器

autopurge.snapRetainCount和autopurge.purgeInterval网络

能够在配置文件启用这两个参数来定时清理事务日志和快照

autopurge.purgeInterval  这个参数指定了清理频率,单位是小时,须要填写一个1或更大的整数,默认是0,表示不开启本身清理功能。

autopurge.snapRetainCount 这个参数和上面的参数搭配使用,这个参数指定了须要保留的文件数目。默认是保留3个。



监管进程,当zookeeper宕掉后,能够从新启动,加入集群

##################################################################################

1.安装daemontools 守护进程


mkdir /package

chmod 755 /package

cd /package

wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz

tar zxf daemontools-0.76.tar.gz

cd admin/daemontools-0.76

vim src/error.h 找到:extern int errno; 改为:#include <errno.h>

package/install


 


2.监控zookeeper

cd /service

mkdir zookeeper

cd zookeeper

vim run

chmod 755 run



run内容以下:


#!/bin/bash

exec 2>&1

exec  /root/zookeeper/zookeeper-3.4.5/bin/zkServer.sh start


3.运行supervise

亲测这个仍是要一直输出日志,因此我启动的时候, supervise /service/zookeeper >>/dev/null &

nohup supervise /service/zookeeper & 这样启动,会在当前目录输出nohup.out日志

#####################################################################################


监控zookeeper

使用4字符命令或jmx,额,我用的4字符命令,我的感受方便点╮(╯▽╰)╭

conf

输出相关服务配置的详细信息。


cons

列出全部链接到服务器的客户端的彻底的链接 / 会话的详细信息。包括“接受 / 发送”的包数量、会话 id 、操做延迟、最后的操做执行等等信息。


dump

列出未经处理的会话和临时节点。


envi

输出关于服务环境的详细信息(区别于 conf 命令)。


reqs

列出未经处理的请求


ruok

测试服务是否处于正确状态。若是确实如此,那么服务返回“ imok ”,不然不作任何相应。


stat

输出关于性能和链接的客户端的列表。


wchs

列出服务器 watch 的详细信息。


wchc

经过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。


wchp

经过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径。


#################################################################################

故障排除

zookeeper集群,其中一个服务器里面的事务日志文件损坏,可能不能读取数据,在加载

Zookeeper数据库时你会看到一些IOException,这个用四字符命令,nc stat|nc ip port

查看其它节点是否正常, 若是正常,清理事物日志文件和快照,而后重启服务器便可


##################################################################################

最小配置

clientPort 监听客户端链接的端口


dataDir,存储内存数据库快照的位置,若是不配置dataLogDir的话,更新的事物日志也会存在这里

存放事物日志的地方,保持好良好的新能,否则储存到忙碌的地方,会下降性能


tikeTime,它是zookeeper使用的基本时间单位,毫秒,用于控制心跳和超时,如最小session超时是两倍的ticks


initLimit从leader那里同步数据的时间,不用特地在乎,只有zookeeper比较大的时候,须要调整大一点


syncLimit检测心跳的时间,leander服务器发出心跳包,在超过这个时间尚未收到F服务器的反馈信息,那么就链接失败,不用设置过大,会掩盖一些问题


高级配置:

如下配置可选,可优化zookeeper的性能

dataLogDir,这个选项是把事物日志写到这个配置文件路径下,这就容许使用单独的日志设备,避免快照和日志之间竞争

注意:

专用日志设备对吞吐量和稳定的延迟有不少影响,建议使用专业的日志设备,并确保dataDir不在这个日志设备上


globalOutstandingLimit

客户端提交的请求速度快于zookeeper的处理速度,若是有不少客户端的时候,为了不排队请求过多消耗内存,对客户端未完成的排队

请求不超过1千个(默认)


preAllocSize

为了不在preAllocSize kb的块的事务日志里寻找分配的空间。默认此配置项是64M。

若是日志文件不会变得更大的话,能够减小这个配置项的值。由于在每个快照结束时会开始生成一个新的日志文件,

若是在两次快照的间隔期间的那个事务日志大小达不到64M的话,那么须要调低这个值,以避免形成空间浪费。

例如,若是咱们每执行1000个事务就生成一次快照,一个事务的大小 平均为100字节,那么把preAllocSize配置成100KB就更合适。

默认的preAllocSize的值对于“默认的snapCount值,事务大小 平均值大于512字节”的状况是适用的。


snapCount

zookeeper记录事物到事物日志,到了snapCount个事物日志以后,会启动一个快照的建立

并新建一个事务日志,默认snapCount参数是100000


traceFile

会把操做打印调试信息,会影响性能,不建议和事物日志一个盘


maxClientCnxns

单个客户端并发数链接数,经过ip识别,默认限制数是60,若是设置为0,不对并发数作限制

测试:我设置我1的时候,只能链接两个客户端,当链接第三个的时候失败


maxSessionTimeout

最大session超时时间,默认是20倍的tickTime


fsync.warningthresholdms

事物日志所用的时间大于这个值的时候,会输入警告信息,单位毫秒,默认1000


autopurge.snapRetainCount

保留多少个最近的快照和各类对应的事物日志,并删除之前的,默认值是3,最小是3


syncEnabled

观察者记录事务和快照到硬盘。这下降观察者重启的恢复时间。设置"false"禁用这个功能。默认是"true"


#######################################################################################

集群选项

electionAlg

用于选举实现。"0"表明原始的UDP版本,"1"表明快速领导者选举的不受权的UDP版本,

"2"表明受权的快速领导者选举的UDP版本,"3"表明快速领导者选举的TCP版本。当前,默认值是3.

注意

领导者选举0,1,2的实现如今是弃用的。咱们计划在下个发布版本里移除他们,到那时只有FastLeaderElection可用(只有3可用)。


initLimit

时间数量,单位是ticks,容许追随者链接和同步leader。根据须要增长这个值,若是Zookeeper管理的数据量很是大

和leader同步数据的时间,若是数据量比较大,能够设置大一些,默认为10,即10个ticktime


leaderServers

leader接收客户端链接,默认是yes

注意

Zookeeper集群大于3台机器时强烈建议开启领导者选举。

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

(没有Java系统属性)

组成Zookeeper机器的服务器。当服务启动时,经过查找数据目录里的myid文件肯定它是哪一个服务器。

那个文件包含服务器号,ASCII的形式,而且应该匹配左边server.x里的x。

使用Zookeeper服务的服务器的客户端必须匹配每一个Zookeeper服务。

有两个端口号nnnnn。第一个用于链接领导者,第二个用于领导者选举。


领导者选举端口只在electionAlg是一、二、3时必要。若是electionAlg是0,第二个端口就不必。

若是你想在单机上测试多服务,每一个服务要使用不一样的端口。


syncLimit

检测心跳。若是leader没有在这个时间内收到fllower的应答,则移除集群,全部

链接这个fllower的客户端所有转移到其它成员上


group.x=nnnnn[:nnnnn]


(没有Java系统属性)


启用分层的法定人数构造。"x"是group标识符,"="后面的数字对应服务标识符。

左边的任务是冒号分隔的服务标识符。注意groups必须是不相交的而且全部groups联盟必须是Zookeeper全体。


weight.x=nnnnn

兼用"group",当造成法定人数时它给服务分配一个权重。投票时这个值对应服务的权重。Zookeeper的一些部分要求投票如领导者选举和自动广播协议。

默认服务器的权重是1.若是配置定义了groups,但不是权重,将会给全部的服务器权重设置为1.

cnxTimeout

设置领导者选举通知打开链接的超时值。只适用于electionAlg3。

注意

默认值是5秒


##########################################################################

使用Netty框架通讯


3.4新加入:Netty是一个基于NIO的客户端/服务端通讯框架,它简化了Java应用不少复杂的网络层通讯。此外Netty框架支持数据加密(SSL)和身份验证(证书)。还有可选择的功能能够独立的开启或关闭。


在版本3.4以前Zookeeper一直直接使用NIO,然而在版本3.4和之后的版本支持NIO选择Netty。NIO仍然是默认值,然而基于Netty的通讯能够经过设置环境变量"zookeeper.serverCnxnFactory"为"org.apache.zookeeper.server.NettyServerCnxnFactory"使用。能够在客户端或服务端设置这个选项,通常两边都设置,这个由你决定。


TBD - netty的调优选项


TBD - 怎么管理数据加密


TBD - 怎么管理证书


###############################################################################

不安全选项


下面的选项能够用,但用的时候要当心。每一个的风险说明和变量一块儿。

forceSync

(Java系统属性:zookeeper.forceSync)

在完成处理更新以前要求经过更新事务日志的媒介。若是这个选项设置为no,Zookeeper将不要求同步更新媒介。


jute.maxbuffer:

(Java系统属性:jute.maxbuffer)

此选择系能够经过Java系统属性设置。没有zookeeper前缀。它指定znode中能够存储的数据的最大值。默认是0xffffff,或低于1M。若是这个选项变了,系统属性必须在全部服务器和客户端上设置,不然会出现问题。这确实是一个合理性检查。Zookeeper用来存储数据大约在KB大小。


skipACL

(Java系统属性:zookeeper.skipACL)

跳过ACL检查。这会增长吞吐量,可是会像全部人打开完整的访问权限

quorumListenOnAllIPs

设置为true时,Zookeeper服务器将监听全部同行可用IP地址的链接,而且不仅是服务器里配置的地址。它影响链接处理ZAB协议和快速领导者选举协议。默认是false。


##################################################################################

要避免的事情

下面的问题能够经过Zookeeper正确的配置避免:

不一致的服务器清单

客户端使用的Zookeeper服务器清单必须和每一个Zookeeper服务的一致。每一个Zookeeper服务配置文件的服务器清单应该和其余的一致。


不正确的事务日志放置

Zookeeper性能的关键部分是事务日志。Zookeeper在响应以前同步事务到媒介。一个专用的事务日志装置是保持良好性能的关键。将日志放置在繁忙的装置上会严重影响性能。若是你只有一个存储设备,将跟踪文件放置在NFS上并增长snapshotCount;这不能解决问题,但能改善。


不正确的Java堆大小

你应该特别注意正确的设置Java最大堆大小。特别的是,你不该该营造Zookeeper交换磁盘的状况。磁盘可以让Zookeeper死亡。每一个事情都是有序的,因此若是处理一个请求交换磁盘,全部其余队列里的请求极可能会作一样的事情。磁盘,不要SWAP。

保守估计:若是你有4G的RAM,不用设置Java最大堆大小为6G或4G。

例如,4G的机器更建议你使用3G的堆,由于操做系统和缓存也须要内存。

堆大小的最佳推荐,你的系统须要运行负载测试,而后确保使用在引发系统交换的限制如下。

相关文章
相关标签/搜索