作者:超顶顶my.oschina.net/mHUMTSy9311/blog/29605441。没有安全验证如何搭建单机就不说了。堆。下面我就说说如何搭建Zookeeper集群,在生产环境可用Zookeeper3.4.13下载地址http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13。柏油。不推荐使用gzDocker方法。有很多事情需要考虑。如果要使用Docker方式,建议自己构建镜像。如果你是Docker专家,你可以忽略这句话。下面的介绍都是在Linux服务器下搭建的(Winserver服务器也类似)。先操作单机,再复制到其他机器。下载Zookeeper(以下简称zk)后,进入zk解压目录下的conf文件夹。zoo_sample.cfg是zk的配置文件示例。复制一份并将其命名为zoo.cfg。zk默认会读取这个配置。详细配置:tickTime:发送心跳的间隔时间,用于判断客户端是否断开连接(默认2000ms)dataDir:zk数据文件存放目录,zk是根据文件来存放配置的连接到zk服务器,zk会监听这个端口,接受客户端的访问请求。initLimit:初始化Client时的重试次数(默认5次)。判断Client是否连接成功,发送initLimit个心跳,每个tickTime发送一次,如果都失败,说明Client连接失败。syncLimit:该配置项标识了Leader和Follower发送消息、请求和响应之间的时间长度,最长的时间长度不能超过多少个tickTimes,总时间长度为2*2000=4秒server.n=ip:port:electPort:n代表每个实例的序号,ip是实例的ip地址,port是实例间交互的端口,electPort是重新选举Leader的端口(只在集群模式下使用,而且单机可以评论这个配置,之前问过师傅,师傅说zk至少建了3个实例比较稳定,这个和自己的选举机制有关)maxClientCnxns:最大数量客户端连接数,业务需求是并发的,机器比较强大,设置一个较大的值(默认60)autopurge.snapRetainCount:自动清理快照和事务日志。Numberoffiles(default3)autopurge.purgeInterval:清除频率(以小时为单位,默认为0表示不启用,大于0表示启用`)如果需要使用Hosts,请将Hosts(/etc/hosts)设置为on每个实例所在的机器例如:zk1127.0.0.1这里是我的简单配置:#每个ticktickTime=2000的毫秒数#初始#同步阶段可以采取的ticks数量initLimit=10#ticks数量可以在#发送请求和获得确认之间传递syncLimit=5#存储快照的目录。#不要使用/tmp进行存储,/tmp这里只是#examplesakes.dataDir=/data/zookeeper/data#客户端连接的端口clientPort=2181server.1=zk1:2888:3888server.2=zk2:2888:3888server.3=zk2:2888:38882。启动zk的脚本放在zk/bin目录下zkServer.sh服务运行脚本(只介绍常用命令)#后台启动./zkServer.shstart#前台启动./zkServer.shstart-foreground#stop./zkServer.shstop#restart./zkServer.shrestart#查看状态(其中Mode表示是Leader节点还是Follow节点)/zkServer.shstatuszkCli.sh是zk的客户端,它默认连接到本地实例。进入ZkCli后可以执行ZooKeeper-serverhost:portcmdargs操作其他远程实例#进入zkclient命令行操作./zkCli.sh列出一些常用的命令(其他命令也可以)#查看根目录下的节点ls/pathget/path#查看节点状态/属性stat/path#删除节点rmr/path#删除节点Nextdatadelete/path[version]3.权限验证zk的权限验证有3种方式。这里只介绍两种常用的方法(先搭建集群,权限设置会同步到整个集群):第一步:创建一个新的Node(如果对现有节点添加权限,可以忽略)create/path"test"#创建节点和别名1.通过IP限制#进入zkCli后的权限验证设置命令权限参数setAcl/pathip:192.168.1.1后面会介绍:[permissions]#也可以是ip段setAcl/pathip:192.168.0.0/16:[permissions]#Verification本地验证通过您可以使用另一个ip段来验证ls/path2。user+password控制的密码是BASE64的密文(SHA1(原密码)),如何生成保证成功的密文#通过这个类计算输出密文(对应的版本可以在zk/lib目录下看到)java-cp./zookeeper-3.4.13.jar:./lib/log4j-1.2.17.jar:./lib/slf4j-log4j12-1.7.25.jar:./lib/slf4j-api-1.7.25.jarorg.apache.zookeeper.server.auth.DigestAuthenticationProvidertest:123456#test是用户名password是密码BASE64(SHA1(originalpassword))setAcl/pathdigest:test:password:[permission]#验证是否是successful,现在肯定是成功了,但是重新进入zkCli会失败ls/path#EnterzkCli执行addAuth命令,这是一个类似login的功能。test是一个用户名,123456是原文addauthdigesttest:123456#然后执行ls命令,此时会成功ls/pathpermission介绍权限用cdrwa表示,如:setAcl/pathdigest:test:password:cdw每个字母分别代表是:CREATE(c):创建权限,可以在当前节点下创建子节点DELETE(d):删除权限,可以删除当前节点READ(r):读权限,你可以获取当前节点的数据,可以列出当前节点的所有子节点WRITE(w):写权限,可以向当前节点写入数据ADMIN(a):管理权限,可以设置当前节点的权限欢迎大家关注我的微信公众号【移民哥技术之路】,最新整理2TB技术干货:包括架构师实战教程、大数据、Docker容器、系统运维、数据库、redis、MogoDB、e-书籍、Java基础课程、Java实战项目、ELKStack、机器学习、BAT面试精讲视频等。只需在“打工哥技术之路”的微信公众号对话框中回复关键字:1024即可获取全部信息。
