设为首页 收藏本站
查看: 838|回复: 0

[经验分享] Zookeeper简介(三)

[复制链接]

尚未签到

发表于 2019-1-8 09:04:49 | 显示全部楼层 |阅读模式
一、zookeeper的安装

1、单机模式
  zookeeper目录下的conf子目录, 创建zoo.cfg
  

tickTime=2000  
dataDir=/Users/apple/zookeeper/data
  
dataLogDir=/Users/apple/zookeeper/logs
  
clientPort=4180
  

  bin/zkServer.sh start  //启动服务
  bin/zkCli.sh -server localhost:4180

2、伪集群模式
  伪集群, 是指在单台机器中启动多个zookeeper进程, 并组成一个集群. 以启动3个zookeeper进程为例.
  将zookeeper的目录拷贝2份:
  

|--zookeeper0  
|--zookeeper1
  
|--zookeeper2
  

  更改zookeeper0/conf/zoo.cfg文件为:
  

tickTime=2000  
initLimit=5
  
syncLimit=2
  
dataDir=/Users/apple/zookeeper0/data
  
dataLogDir=/Users/apple/zookeeper0/logs
  
clientPort=4180
  
server.0=127.0.0.1:8880:7770
  
server.1=127.0.0.1:8881:7771
  
server.2=127.0.0.1:8882:7772
  

  参照zookeeper0/conf/zoo.cfg, 配置zookeeper1/conf/zoo.cfg, 和zookeeper2/conf/zoo.cfg文件. 只需更改dataDir, dataLogDir, clientPort参数即可.
  在之前设置的dataDir中新建myid文件, 写入一个数字, 该数字表示这是第几号server. 该数字必须和zoo.cfg文件中的server.X中的X一一对应.
  /Users/apple/zookeeper0/data/myid文件中写入0, /Users/apple/zookeeper1/data/myid文件中写入1, /Users/apple/zookeeper2/data/myid文件中写入2.
  分别进入/Users/apple/zookeeper0/bin, /Users/apple/zookeeper1/bin, /Users/apple/zookeeper2/bin三个目录, 启动server.
  任意选择一个server目录, 启动客户端:

3、集群模式
  集群模式的配置和伪集群基本一致.
  

tickTime=2000  
initLimit=5
  
syncLimit=2
  
dataDir=/home/zookeeper/data
  
dataLogDir=/home/zookeeper/logs
  
clientPort=4180
  
server.43=10.1.39.43:2888:3888
  
server.47=10.1.39.47:2888:3888
  
server.48=10.1.39.48:2888:3888
  

  注意:各server的dataDir目录下的myid文件中的数字必须不同.
  10.1.39.43 server的myid为43, 10.1.39.47 server的myid为47, 10.1.39.48 server的myid为48.

二、zk的配置指令
  globalOutstandingLimit
  这个配置指定了等待处理的最大请求数量的限制(zookeeper.globalOutstandingLimit)。
  client发送请求的速度可能会比server端处理的速度快,会导致请求在server端排队,最终(在若干秒内)会使server的内存耗尽。为了避免这一点,如果等待的请求数量达到了globalOutstandingLimit,server端会拒绝client的请求。但是这个限制不是hard限制。每一个client至少能有一个outstanding请求,否则连接会开始出现超时。所以,当达到globalOutstandingLimit之后,只有在没有任何的pending请求时,server才会从client连接读取数据。
  为了决定某一台确定的server的限制,可以简单的用这个配置项的值除以server的数量。现在没有一种聪明的方式来决定这个值来进行限制,总的说来,这个配置项的值就是outstanding请求的上限。实际上,负载无法在server间进行均衡,总有一些server的负载会高一些,即使没有达到上限。
  默认的限制为1000个请求。通常不需要改变这个配置,如果有很多client会发送非常大的请求,你需要调低这个值,但是在实践中通常不需要改变这个值。
  //最大请求堆积数。默认是1000。ZK运行的时候, 尽管server已经没有空闲来处理更多的客户端请求了,但是还是允许客户端将请求提交到服务器上来,以提高吞吐性能。当然,为了防止Server内存溢出,这个请求堆积数还是需要限制下的。
  (Java system property:zookeeper.globalOutstandingLimit. )
  maxClientCnxns
  决定了每个IP地址可以发起的socket连接个最大个数。
  ZooKeeper使用了flow control和limit来避免连接过载。建立连接消耗的资源远远超过普通的操作消耗的资源。一瞬间过多的请求会造成拒绝服务的问题,所以加上了这个限制,当某个IP的连接超过了这个限制,server会拒绝连接。默认值为60。
  clientPortAddress
  默认server会监听所有的网络接口提供client来连接。有一些服务器会有多个网络接口,通常一些为内网接口一些为外网接口。如果不想开放外网接口,可以将此配置项设为内网接口。
  minSessionTimeout
  这是session过期的最小超时时间,单位为毫秒。当client发起连接时,它会请求一个特定的超时时间,但是实际的超时时间并能小于这个配置项。
  开发者喜欢立即并准确的检测到client端的失败。但不幸的是,系统不能实时的检测到,实际上是使用心跳和超时来做的。超时的使用依赖于client端和server端的网络延迟和可靠性。超时时间必须至少等于网络的round trip time,但是偶尔会有丢包的情况,在这种情况下接收响应的时间会增加,因为会发送发送丢失的包。
  默认minSessionTimeout是tickTime的2倍。把这个值设置得过低的话会导致错误的检测client的失败。设置得太高的话会导致检测client的失败的延迟。
  maxSessionTimeout
  这是最大的session超时时间,单位为毫秒。当client发起连接时,它会请求一个特定的超时时间,但是实际的超时时间并能大于这个配置项。
  尽管这个配置不会影响系统性能,但会限制client消耗系统资源的时间。默认是tickTime的20倍。
  clientPort
  客户端连接server的端口,即对外服务端口,一般设置为2181吧。
  dataDir
  存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir, 事务日志的写性能直接影响zk性能。
  tickTime
  ZK中的一个时间单元。ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的。例如,session的最小超时时间是2*tickTime。
  dataLogDir
  事务日志输出目录。尽量给事务日志的输出配置单独的磁盘或是挂载点,这将极大的提升ZK性能。 (No Java system property)
  preAllocSize
  预先开辟磁盘空间,用于后续写入事务日志。默认是64M,每个事务日志大小就是64M。如果ZK的快照频率较大的话,建议适当减小这个参数。(Java system property:zookeeper.preAllocSize )
  snapCount
  每进行snapCount次事务日志输出后,触发一次快照(snapshot), 此时,ZK会生成一个snapshot.文件,同时创建一个新的事务日志文件log.。默认是100000.(真正的代码实现中,会进行一定的随机数处理,以避免所有服务器在同一时间进行快照而影响性能)(Java system property:zookeeper.snapCount )
  traceFile
  用于记录所有请求的log,一般调试过程中可以使用,但是生产环境不建议使用,会严重影响性能。(Java system property:? requestTraceFile )
  maxClientCnxns
  单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,如果设置为0,那么表明不作任何限制。请注意这个限制的使用范围,仅仅是单台客户端机器与单台ZK服务器之间的连接数限制,不是针对指定客户端IP,也不是ZK集群的连接数限制,也不是单台ZK对所有客户端的连接数限制。指定客户端IP的限制策略,这里有一个patch,可以尝试一下:http://rdc.taobao.com/team/jm/archives/1334(No Java system property)
  clientPortAddress
  对于多网卡的机器,可以为每个IP指定不同的监听端口。默认情况是所有IP都监听 clientPort 指定的端口。  New in 3.3.0
  minSessionTimeoutmaxSessionTimeout
  Session超时时间限制,如果客户端设置的超时时间不在这个范围,那么会被强制设置为最大或最小时间。默认的Session超时时间是在2   tickTime ~ 20 tickTime 这个范围 New in 3.3.0
  fsync.warningthresholdms
  事务日志输出时,如果调用fsync方法超过指定的超时时间,那么会在日志中输出警告信息。默认是1000ms。(Java system property:  fsync.warningthresholdms )New in 3.3.4
  autopurge.purgeInterval
  3.4.0及之后版本,ZK提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要配置一个1或更大的整数,默认是0,表示不开启自动清理功能。(No Java system property)  New in 3.4.0
  autopurge.snapRetainCount
  这个参数和上面的参数搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。(No Java system property)  New in 3.4.0
  electionAlg
  在3.4之前的版本中, 这个参数配置是允许我们选择leader选举算法,但是由于在以后的版本中,只会留下一种“TCP-based version of fast leader election”算法,所以这个参数目前看来没有用了,这里也不详细展开说了。(No Java system property)
  initLimit
  Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。Leader允许F在 initLimit 时间内完成这个工作。通常情况下,我们不用太在意这个参数的设置。如果ZK集群的数据量确实很大了,F在启动的时候,从Leader上同步数据的时间也会相应变长,因此在这种情况下,有必要适当调大这个参数了。(No Java system property)
  syncLimit
  在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果L发出心跳包在syncLimit之后,还没有从F那里收到响应,那么就认为这个F已经不在线了。注意:不要把这个参数设置得过大,否则可能会掩盖一些问题。(No Java system property)
  leaderServes
  默认情况下,Leader是会接受客户端连接,并提供正常的读写服务。但是,如果你想让Leader专注于集群中机器的协调,那么可以将这个参数设置为no,这样一来,会大大提高写操作的性能。(Java system property: zookeeper. leaderServes )。
  server.x=[hostname]:nnnnn[:nnnnn]
  这里的x是一个数字,与myid文件中的id是一致的。右边可以配置两个端口,第一个端口用于F和L之间的数据同步和其它通信,第二个端口用于Leader选举过程中投票通信。
  (No Java system property)
  server.X=A:B:C 其中X是一个数字, 表示这是第几号server. A是该server所在的IP地址. B配置该server和集群中的leader交换消息所使用的端口. C配置选举leader时所使用的端口. 由于配置的是伪集群模式, 所以各个server的B, C参数必须不同.
  group.x=nnnnn[:nnnnn]weight.x=nnnnn
  对机器分组和权重设置,可以  参见这里(No Java system property)
  cnxTimeout
  Leader选举过程中,打开一次连接的超时时间,默认是5s。(Java system property: zookeeper.  cnxTimeout )
  zookeeper.DigestAuthenticationProvider.superDigest
  ZK权限设置相关,具体参见  《  使用super  身份对有权限的节点进行操作 》  和  《 ZooKeeper   权限控制 》
  skipACL
  对所有客户端请求都不作ACL检查。如果之前节点上设置有权限限制,一旦服务器上打开这个开头,那么也将失效。(Java system property:  zookeeper.skipACL )
  forceSync
  这个参数确定了是否需要在事务日志提交的时候调用 FileChannel .force来保证数据完全同步到磁盘。(Java system property: zookeeper.forceSync )
  jute.maxbuffer
  每个节点最大数据量,是默认是1M。这个限制必须在server和client端都进行设置才会生效。(Java system property: jute.maxbuffer )

三、zk命令行的使用
  [zookeeper, node_2]
  [zk: localhost:3218(CONNECTED) 43] h
  

ZooKeeper -server host:port cmd args  stat path [watch]
  set path data [version]
  ls path [watch]
  delquota [-n|-b] path
  ls2 path [watch]
  setAcl path acl
  setquota -n|-b val path
  history
  redo cmdno
  printwatches on|off
  delete path [version]
  sync path
  listquota path
  rmr path
  get path [watch]
  create [-s] [-e] path data acl
  addauth scheme auth
  quit
  getAcl path
  close
  connect host:port
  

1、create
  创建新的Znode节点 (-s : 顺序节点 -e :临时数据节点(重启会消失)) path:路径 data:数据 acl:权限,不指定默认为world:anyone:cdwra,可参考Zookeeper的ACL access control list
  [zk: 192.168.0.23:2181(CONNECTED) 10] create /node_1 "test"
  Created /node_1
  权限主要有:
  

CREATE : 创建子节点  
READ : 获取节点数据和子节点列表
  
WRITE : 更新节点数据
  
DELETE : 删除子节点
  
ADMIN : 设置节点ACL的权限
  

  与授权相关的几个概念:
  shchema:权限模式,有IP和digest两种
  ID:授权对象
  schema为IP时,该值为具体的IP地址
  scheme为digest时,该值为 userName:base64(sha1(userName:password))
  zookeeper的javaAPI提供了一个工具类org.apache.zookeeper.server.auth.DigestAuthenticationProvider 可以快速生成加密的密文
  permission:权限,指的就是上面所说的五种权限

  最终的组合为: schema +>  [zk: localhost:2181(CONNECTED) 35] create /mpcapp/mpc8  88888 ip:192.168.174.139:crwda

2、get
  查看节点数据path:路径
  

[zk: 192.168.0.23:2181(CONNECTED) 11] get /node_1  
test
  
cZxid = 0x13
  
ctime = Thu Feb 16 13:19:40 CST 2017
  
mZxid = 0x13
  
mtime = Thu Feb 16 13:19:40 CST 2017
  
pZxid = 0x13
  
cversion = 0
  
dataVersion = 0
  
aclVersion = 0
  
ephemeralOwner = 0x0
  
dataLength = 4
  
numChildren = 0
  

test 为节点存储的数据内容  
CZxid:表示该节点在那个事务中创建的事务id。
  
ctime:表示该节点的创建时间
  
mZxid:表示该节点更新时的事务id
  
mtime:表示该节点的修改时间
  
pZxid:表示该节点的子节点列表最后一次被修改的事务id
  
cversion:子节点版本号
  
dataversion:数据版本号
  
aclversion:权限版本号
  
ephemeralOwner:专门用于临时节点,表示创建该临时节点的事务id(如果当前节点是持久节点,该值固定为0)
  
dataLength:当前节点存放数据的长度
  
numChildren:当前节点的子节点数目
  

3、stat
  查看数据节点的状态信息 path:路径
  [zk: 192.168.0.23:2181(CONNECTED) 12] stat /node_1
  

cZxid = 0x13  
ctime = Thu Feb 16 13:19:40 CST 2017
  
mZxid = 0x13
  
mtime = Thu Feb 16 13:19:40 CST 2017
  
pZxid = 0x13
  
cversion = 0
  
dataVersion = 0
  
aclVersion = 0
  
ephemeralOwner = 0x0
  
dataLength = 4
  
numChildren = 0
  

4、set
  设置数据节点的值,path:路径,data:数据,可以带版本号,可以不带版本号
  

[zk: 192.168.0.23:2181(CONNECTED) 19] set /node_1 "11114"  
cZxid = 0x13
  
ctime = Thu Feb 16 13:19:40 CST 2017
  
mZxid = 0x18
  
mtime = Thu Feb 16 13:32:59 CST 2017
  
pZxid = 0x17
  
cversion = 4
  
dataVersion = 1
  
aclVersion = 0
  
ephemeralOwner = 0x0
  
dataLength = 5
  
numChildren = 3
  
[zk: 192.168.0.23:2181(CONNECTED) 20] get /node_1
  
11114
  
cZxid = 0x13
  
ctime = Thu Feb 16 13:19:40 CST 2017
  
mZxid = 0x18
  
mtime = Thu Feb 16 13:32:59 CST 2017
  
pZxid = 0x17
  
cversion = 4
  
dataVersion = 1
  
aclVersion = 0
  
ephemeralOwner = 0x0
  
dataLength = 5
  
numChildren = 3
  

  在node_1下建立了三个节点,node_1_1,node_1_2以及node_1_3
  set:添加上版本号(乐观锁)
  

[zk: 192.168.0.23:2181(CONNECTED) 27] get /node_1/node_1_3  
333
  
cZxid = 0x30
  
ctime = Fri Feb 17 10:11:45 CST 2017
  
mZxid = 0x33
  
mtime = Fri Feb 17 10:29:37 CST 2017
  
pZxid = 0x30
  
cversion = 0
  
dataVersion = 2
  
aclVersion = 0
  
ephemeralOwner = 0x0
  
dataLength = 3
  
numChildren = 0
  
[zk: 192.168.0.23:2181(CONNECTED) 28] set /node_1/node_1_3 332 2
  
cZxid = 0x30
  
ctime = Fri Feb 17 10:11:45 CST 2017
  
mZxid = 0x34
  
mtime = Fri Feb 17 10:31:51 CST 2017
  
pZxid = 0x30
  
cversion = 0
  
dataVersion = 3
  
aclVersion = 0
  
ephemeralOwner = 0x0
  
dataLength = 3
  
numChildren = 0
  
[zk: 192.168.0.23:2181(CONNECTED) 29] set /node_1/node_1_3 332 2
  
version No is not valid : /node_1/node_1_3
  
通过get,我们知道了node_1_3,的数据值和版本号,然后修改node_1_3的数据值和版本号,版本号一致会修改成功,版本号不一致,抛出版本号无效的异常。
  

5、delete
  删除node_1_3节点,此时它没有子节点,否则会报错,也可以携带版本
  rmr 循环删除有子节点的父节点,例如删除node_1
  [zk: 192.168.0.23:2181(CONNECTED) 6] rmr /node_1
  [zk: 192.168.0.23:2181(CONNECTED) 7] ls /
  [zookeeper]

6、quota
  (配额):增加一些节点的限制,必须在一定的范围内
  setquota :设置子节点的个数(-n:子节点个数的限制,-b:数据数据节点数据长度的限制)
  listquota,查看数据节点配额的情况
  delquota,删除数据节点配额的情况
  

[zk: 192.168.0.23:2181(CONNECTED) 33] create /node_1 1  
Created /node_1
  
[zk: 192.168.0.23:2181(CONNECTED) 40] setquota -n 2 /node_1
  
Comment: the parts are option -n val 2 path /node_1
  
[zk: 192.168.0.23:2181(CONNECTED) 47] create /node_1/node_1_1 11
  
Created /node_1/node_1_1
  
[zk: 192.168.0.23:2181(CONNECTED) 48] create /node_1/node_1_2 12
  
Created /node_1/node_1_2
  
[zk: 192.168.0.23:2181(CONNECTED) 49] create /node_1/node_1_3 13
  
Created /node_1/node_1_3
  
创建node_1节点,并给它设置节点数为2的限制,但是我们成功了创建子节点,node_1_3,并没有给我们抛出异常,它仅仅是在跟目录下的zookeeper.out的输出了一个警告。
  
[localhost zookeeper-3.4.9]$ tail zookeeper.out
  
....省略
  
2017-02-17 10:45:32,472 [myid:] - WARN  [SyncThread:0:DataTree@301] - Quota exceeded: /node_1 count=3 limit=2
  
[zk: 192.168.0.23:2181(CONNECTED) 50] listquota /node_1
  
absolute path is /zookeeper/quota/node_1/zookeeper_limits
  
Output quota for /node_1 count=2,bytes=-1
  
Output stat for /node_1 count=4,bytes=7
  

  删除节点的配置之后,我们验证一下,看到此时node_1节点的子节点个数没有限制,数据长度没有限制了。

7、其他命令
  ls2 是ls的超级指令,不仅可以列出当前节点的子节点,还可以输出节点的状态信息,不再演示。
  history 打印出最近执行的十个命令
  redo cmdno 根据命令编号(可用history查询编号)重新执行以前执行过的命令
  close关闭当前连接,可用connect 再次连接,不会退出客户端
  quit 关闭连接并退出连接客户端
  connect连接服务器

8、常用四字命令
  conf    输出相关服务配置的详细信息
  cons    列出所有连接到服务器的客户端的完全的连接/会话的详细信息.包括“接受/发送”的包数量,会话,id,操作延迟,最后的操作执行等等信息
  dump    列出未经处理的会话和临时节点.
  envi    输出关于服务环境的详细信息
  reqs    列出未经处理的请求
  ruok    测试服务是否处于正确状态.如果确实如此,那么服务返回”imok”,否则不做任何响应
  stat    输出关于性能和连接的客户端的列表
  wchs    列出服务器watch的详细信息
  wchc    通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表
  wchp    通过路径列出服务器watch的详细信息.它输出一个与session相关的路径
  conf)
  [localhost zookeeper-3.4.9]$ echo conf | nc 192.168.0.23 2181
  clientPort=2181
  dataDir=/home/yinpeng/yuliang/data/version-2
  dataLogDir=/home/yinpeng/yuliang/data/version-2
  tickTime=2000
  maxClientCnxns=60
  minSessionTimeout=4000
  maxSessionTimeout=40000
  serverId=0
  cons)
  [localhost zookeeper-3.4.9]$ echo cons | nc 192.168.0.23 2181
  /192.168.0.23:389680
  ruok
  测试服务是否处于正确状态.如果确实如此,那么服务返回” imok”,否则不做任何相应.
  [localhost zookeeper-3.4.9]$ echo ruok | nc 192.168.0.23 2181
  imok
  回复imok表示已经启动
  stat)
  [localhost zookeeper-3.4.9]$ echo stat | nc 192.168.0.23 2181
  Zookeeper version: 3.4.9-1757313, built on 08/23/2016 06:50 GMT
  Clients:
  /192.168.0.23:389720
  Latency min/avg/max: 0/0/32
  Received: 5425
  Sent: 5424
  Connections: 1
  Outstanding: 0
  Zxid: 0x4a
  Mode: standalone
  Node count: 11

四、基于ZK的ACL进行znode控制

1、zk提供的认证方式
  Zookeeper对权限的控制是znode级别的,不继承即对父节点设置权限,其子节点不继承父节点的权限。
  world:有个单一的ID,anyone,表示任何人。
  auth:不使用任何ID,表示任何通过验证的用户(验证是指创建该znode的权限)。
  digest:使用 用户名:密码 字符串生成MD5哈希值作为ACL标识符ID。权限的验证通过直接发送用户名密码字符串的方式完成,
  ip:使用客户端主机ip地址作为一个ACL标识符,ACL表达式是以 addr/bits 这种格式表示的。ZK服务器会将addr的前bits位与客户端地址的前bits位来进行匹配验证权限。

2、简单认证
  [zk: 127.0.0.1:3218(CONNECTED) 55] create /auth auth auth:127.0.0.1:rw  //127.0.0.1需要登录,
  [zk: 127.0.0.1:3218(CONNECTED) 6] ls /auth   //另外一个终端
  Authentication is not valid : /auth
  [zk: 192.168.2.113:3218(CONNECTED) 2] addauth digest tom:tom  //添加完认证后就可以ls查看了,127.0.0.1也要登录才能查看
  [zk: 192.168.2.113:3218(CONNECTED) 3] ls /auth
  []
  [zk: 127.0.0.1:3218(CONNECTED) 1] getAcl /auth
  'digest,'tom:GcSMsIa2MmdW+zdSJKAv8gcnrpI=
  : rw
  [zk: 127.0.0.1:3218(CONNECTED) 6] create /tom "test" digest:tom:GcSMsIa2MmdW+zdSJKAv8gcnrpI=:rwdca
  [zk: 127.0.0.1:3218(CONNECTED) 7] getAcl /tom
  'digest,'tom:GcSMsIa2MmdW+zdSJKAv8gcnrpI=
  : cdrwa

3、zk提供的权限信息
  write   能够设置znode的值 w
  read    能够读取znode的值和列出它的children znode  r
  create  能够创建children znode  c
  delete  能够删除children znode  d
  admin   能够执行setAcl即设置访问控制列表 a
  all 所有权限    wrcda

4、注意问题:
  1.通过zkCli.sh设置acl的格式是scheme:id:perm,perm的写法是简写字母连接,如读写权限rw和Linux的文件系统的权限相似。有些版本可能是:READ|WRITE, 所以需要注意命令行提示信息。
  2.通过zkCli.sh设置acl时,scheme是digest的时候,id需要密文
  生成方式:
  java -cp $ZK_CLASSPATH \
  org.apache.zookeeper.server.auth.DigestAuthenticationProvider amy:secret
  ....
  amy:secret->amy:Iq0onHjzb4KyxPAp8YWOIC8zzwY=
  3.通过Zookeeper的客户端编码方式添加认证,digest对应的auth数据是明文
  4.Zookeeper认证的扩展
  org.apache.zookeeper.server.auth.AuthenticationProvider  // 实现AuthenticationProvider接口提供自定义的认证方式。
  比如自定义实现AuthenticationProvider类是secondriver.MyProvier,可以通过两种方式注册Zookeeper认证体系中去。
  第一种:启动Zookeeper服务是通过-Dzookeeper.authPorivder.X=secondriver.MyProvider
  第二种:添加到配置文件(zoo.conf)中如:
  zookeeper.authProvider.1=secondriver.MyProvider
  注:上面X是对authProvider实现提供编号用来区别不同的authProvider。
  参考博客:
  http://zookeeper.apache.org/doc/r3.4.3/zookeeperHierarchicalQuorums.html
  https://blog.csdn.net/jiuqiyuliang/article/details/55213517
  http://coolxing.iteye.com/blog/1871009
  http://blog.运维网.com/aiilive/1686132



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-660579-1-1.html 上篇帖子: ZooKeeper监控(taokeeper) 下篇帖子: 【ZooKeeper Notes 29】 修复“ZooKeeper客户端打印当前连接的服务器地址为null”的Bug
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表