ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # Zookeeper工作机制 Zookeeper集群角色 Zookeeper集群的角色: Leader 和 follower (Observer) Observer: http://damacheng009.iteye.com/blog/2086625 zk集群最好配成奇数个节点 只要集群中有半数以上节点存活,集群就能提供服务 # 机器准备 1. 安装到3台虚拟机上 2. 安装好JDK 3. 上传安装包。上传用工具。 4. 解压 下载链接:http://archive.apache.org/dist/zookeeper/ ~~~ su - hadoop(切换到hadoop用户) tar -zxvf zookeeper-3.4.5.tar.gz(解压) ~~~ 5. 重命名 ~~~ mv zookeeper-3.4.5 zookeeper(重命名文件夹zookeeper-3.4.5为zookeeper) ~~~ 可以删除里面一些源码工程相关的文件,剩下的是这些: ![](https://box.kancloud.cn/f00c99c2d0931856290ec9387f5317ec_639x191.png) # 修改环境变量 (注意:3台zookeeper都需要修改) 1. su – root(切换用户到root) 2. vi /etc/profile(修改文件) 3. 添加内容: ~~~ export ZOOKEEPER_HOME=/home/hadoop/zookeeper export PATH=$PATH:$ZOOKEEPER_HOME/bin ~~~ 4. 加载环境配置: ~~~ source /etc/profile ~~~ 5. 修改完成后切换回hadoop用户: ~~~ su - hadoop ~~~ # 修改Zookeeper配置文件 1. 用root用户操作 ~~~ cd zookeeper/conf mv zoo_sample.cfg zoo.cfg ~~~ 2. vi zoo.cfg ~~~ # The number of milliseconds of each tick # 基本事件单元,以毫秒为单位。它用来控制心跳和超时,默认情况下最小的会话超时时间为两倍的 tickTime # 心跳的周期多少毫秒 tickTime=2000 # The number of ticks that the initial # synchronization phase can take # 允许 follower (相对于 leader 而言的“客户端”)连接并同步到 leader 的初始化连接时间,它以 tickTime 的倍数来表示。当超过设置倍数的 tickTime 时间,则连接失败 # 初始化可以花去心跳的个数,初始通信时限 initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement # leader 与 follower 之间发送消息,请求和应答时间长度。如果 follower 在设置的时间内不能与 leader 进行通信,那么此 follower 将被丢弃 # 发送到一个请求到获得响应所最大时差,同步通信时限 syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. # 数据存放的目录 # 数据目录. 可以是任意目录,其中的dataDir目录和dataLogDir需要提前建立好 # 注意 应该谨慎地选择日志存放的位置,使用专用的日志存储设备能够大大地提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会在很大程度上影响系统的性能 # 数据文件目录+数据持久化路径 dataDir=/usr/local/var/run/zookeeper/data # log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置,其中的dataDir目录和dataLogDir需要提前建立好 # 注意 应该谨慎地选择日志存放的位置,使用专用的日志存储设备能够大大地提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会在很大程度上影响系统的性能。 #dataLogDir=/export/servers/logs/zookeeper # the port at which the clients will connect # 客户端连接的端口 clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients # 这个操作将限制连接到 ZooKeeper 的客户端的数量,限制并发连接的数量,它通过 IP 来区分不同的客户端。此配置选项可以用来阻止某些类别的 Dos 攻击。将它设置为 0 或者忽略而不进行设置将会取消对并发连接的限制。 #maxClientCnxns=60 #最小的会话超时时间以及最大的会话超时时间。 #其中,最小的会话超时时间默认情况下为 2 倍的 tickTme 时间 #最大的会话超时时间默认情况下为 20 倍的会话超时时间 # minSessionTimeout=4000 # maxSessionTimeout=10000 # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1 # server.X=A:B:C 其中X是一个数字, 表示这是第几号server. A是该server所在的IP地址. B配置该server和集群中的leader交换消息所使用的端口. C配置选举leader时所使用的端口. #在之前设置的dataDir中新建myid文件, 写入一个数字, 该数字表示这是第几号server. 该数字必须和zoo.cfg文件中的server.X中的X一一对应. # zookeeper那几台机器,前面端口是心跳端口,后面是选举端口 # server.1是自己定的,不要重复 server.1=192.168.33.12:2888:3888 server.2=192.168.33.22:2888:3888 ~~~ 3. 添加内容: ~~~ dataDir=/root/apps/zookeeper/zkdata dataLogDir=/home/hadoop/zookeeper/log server.1=mini1:2888:3888 ## (心跳端口、选举端口) server.2=mini2:2888:3888 server.3=mini3:2888:3888 ~~~ 4. 创建文件夹: ~~~ cd /root/apps/zookeeper mkdir zkdata mkdir -m 755 log ~~~ 5. 在data文件夹下新建myid文件,myid的文件内容为: ~~~ cd zkdata echo 1 > myid ~~~ echo的数字要和配置文件中server后面对应 # 分发安装包到其他机器 ~~~ scp -r /root/apps root@mini2:/root/ scp -r /root/apps root@mini3:/root/ ~~~ # 修改其他机器的配置文件 1、修改myid文件 到mini2上:修改myid为:2 到mini3上:修改myid为:3 # 启动(每台机器) 注: 1. 事先将三台服务器的防火墙都关掉 2. 全网统一hosts映射 先配好一台上的hosts 然后: ~~~ scp /etc/hosts mini2:/etc scp /etc/hosts mini3:/etc ~~~ 3. 然后一台一台地启动 ~~~ ./zkServer.sh start ~~~ 启动失败,会在当前运行启动命令位置有个.out文件,查看这个文件就行 或者编写一个脚本来批量启动所有机器: ~~~ for host in mini1 mini2 mini3 do ssh $host "source /etc/profile;/root/apps/zookeeper/bin/zkServer.sh start" done ~~~ # 查看集群状态 1. jps(查看进程) 2. ./zkServer.sh status(查看集群状态,主从信息) 启动成功会有这样的 ~~~ [root@22 bin]# ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /root/zookeeper/bin/../conf/zoo.cfg Mode: leader ~~~ ~~~ [root@12 bin]# ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /root/zookeeper/bin/../conf/zoo.cfg Mode: follower ~~~ # 可视化 ## zkui zkui为zookeeper提供了一个web管理界面,可以对zookeepr的节点值进行CRUD操作,同时也提供了安全认证。 github地址:https://github.com/DeemOpen/zkui **安装** 执行前需要安装 java和maven环境 ~~~ $ git clone https://gitee.com/ilanni/zkui.git $ cd zkui/ # 进入工程界面 $ mvn clean install # 进行maven打包,执行成功后会生成target文件夹,其中有jar文件。 ~~~ 执行结束后在zkui文件夹下生成一个target文件夹 **启动** 1. 将config.cfg文件复制到target文件夹下: ~~~ $ cp config.cfg target/ ~~~ target文件夹中有两个jar包,我们只需要启动zkui-2.0-SNAPSHOT-jar-with-dependencies.jar就可以了(但是在启动之前需要配置config.cfg文件) 修改 config.cfg文件: ~~~ $ vim target/config.cfg ~~~ 修改如下配置: ~~~ # zkui web页面访问端口 serverPort=9090 # zookeeper集群的IP地址和端口 zkServer=localhost:2181,localhost:2182 # 设置登录zkui的用户名和密码,这里我们将用户名和密码都设置为admin userSet = {"users": [{ "username":"admin" , "password":"admin","role": "ADMIN" },{ "username":"appconfig" , "password":"appconfig","role": "USER" }]} ~~~ 启动zkui服务 ~~~ cd target $ java -jar zkui-2.0-SNAPSHOT-jar-with-dependencies.jar ~~~ 访问`http://localhost:9090`即可看到以下界面:输入刚刚设置的用户名密码:admin/admin即可登录 ## idea中zk idea中plugin下载zookeeper 然后配置下 ![](https://box.kancloud.cn/f1da3a6e38f71a222eef844c44ebdeb0_1288x824.png) 然后apply->ok 在页面中command+e就会出现