场景 安装及配置
-
解压
tar -zxvf apache-zookeeper-3.6.0-bin.tar.gz
-
重命名
mv apache-zookeeper-3.6.0-bin zookeeper
-
在/opt/zookeeper/这个目录上创建zkData和zkLog目录
mkdir zkData mkdir zkLog
-
进入/opt/zookeeper/conf这个路径,复制一份 zoo_sample.cfg 文件并命名为 zoo.cfg
cd conf cp zoo_sample.cfg zoo.cfg
-
编辑zoo.cfg文件,修改dataDir路径:
dataDir=/opt/zookeeper/zkData dataLogDir=/opt/zookeeper/zkLog
-
zoo.cfg配置文件中的参数详解
tickTime =2000:通信心跳数,Zookeeper服务器与客户端心跳时间,单位毫秒Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。 initLimit =10:LF初始通信时限,集群中的Follower跟随者服务器与Leader领导者服务器之间,启动时能容忍的最多心跳数 10 * tickTime(10个心跳时间)如果领导和跟随者没有发出心跳通信,就视为失效的连接,领导和跟随者彻底断开。 syncLimit =5:LF同步通信时限,集群启动后,Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime->10秒,Leader就认为Follwer已经死掉,会将Follwer从服务器列表中删除。 dataDir:数据文件目录+数据持久化路径,主要用于保存Zookeeper中的数据。 dataLogDir:日志文件目录。 clientPort =2181:客户端连接端口,监听客户端连接的端口。
-
启动Zookeeper
./zkServer.sh start
-
查看进程是否启动(QuorumPeerMain:是zookeeper集群的启动入口类,是用来加载配置启动QuorumPeer线程的)
jps
-
查看状态
./zkServer.sh status
-
启动客户端
./zkCli.sh
-
退出客户端
quit
-
查看根节点下的一级节点
ls /
-
查看节点的详细数据
老版本:ls2 / 新版本:ls -s /
- cZxid:创建节点的事务
每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。
事务ID是ZooKeeper中所有修改总的次序。
每个修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前发生。 - ctime:被创建的毫秒数(从1970年开始)
- mZxid:最后更新的事务zxid
- mtime:最后修改的毫秒数(从1970年开始)
- pZxid:最后更新的子节点zxid
- cversion:创建版本号,子节点修改次数
- dataVersion:数据变化版本号
- aclVersion:权限版本号
- ephemeralOwner:如果是临时节点,这个是znode拥有者的session id。如果不是临时节点
则是0。 - dataLength:数据长度
- numChildren:子节点数
- cZxid:创建节点的事务
-
创建节点
创建节点:create /xx 创建节点并赋值:create /xx xxx 创建多级节点:create /xx/xx 创建短暂节点:create -e /xx 创建排序节点:create -s /xx 创建短暂并排序节点:create -e -s /xx
-
查看节点的值
get /xx
-
修改节点的值
set /xx xxx
-
删除节点
删除节点:delete /xx 递归删除存在子节点的节点:deleteall /xx
-
监听节点变化
addwatch /xxx 如果被监听的节点修改内容后则:WatchedEvent state:SyncConnected type:NodeDataChanged path:/xxx 如果被监听的节点创建子节点后则:WatchedEvent state:SyncConnected type:NodeCreated path:/xxx/yyy
假设有三台服务器,集群部署Zookeeper(先搞定一台,再克隆两台)
-
在/zkData目录下创建myid文件
vim myid 1(编号,其余两台机器分别写2和3)
-
配置zoo.cfg文件
vim zoo.cfg #######################cluster########################## server.1=192.168.126.134:2888:3888 server.2=192.168.126.137:2888:3888 server.3=192.168.126.131:2888:3888
- 解读配置的内容 server.A=B:C:D
- A:一个数字,表示第几号服务器
集群模式下配置的/opt/zookeeper/zkData/myid文件里面的数据就是A的值 - B:服务器的ip地址
- C:与集群中Leader服务器交换信息的端口
- D:选举时专用端口,万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选
出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口
- A:一个数字,表示第几号服务器
- 解读配置的内容 server.A=B:C:D
-
克隆其余两台服务器
- 在虚拟机数据目录vms下,创建zk02
- 将本台服务器数据目录下的.vmx文件和所有的.vmdk文件分别拷贝zk02下
- 虚拟机->文件->打开 (选择zk02下的.vmx文件)
- 开启此虚拟机,弹出对话框,选择“我已复制该虚拟机”
- 进入系统后,修改linux中的ip,修改/opt/zookeeper/zkData/myid中的数值为2
- 第三台服务器重复如上步骤 -
关闭每台机器的防火墙
临时关闭 systemctl stop firewalld.service
- 启动第一台并检查状态
./zkServer.sh start ./zkServer.sh status 得到结果: ZooKeeper JMX enabled by default Using config: /opt/zookeeper/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Error contacting service. It is probably not running. 因为没有超过半数以上的服务器,所以集群失败 (防火墙没有关闭也会导致失败)
- 当启动第2台服务器时
查看第1台的状态:Mode: follower 查看第2台的状态:Mode: leader
关联Java 生产者消费者模型 分布式锁安装
tar
命名
zoo.cfg
配置
zoo.cfg
端口
指定Dir和Log
mkDir
pid 序号
mkLog
bin
./zkServer.sh start
./zkServer.sh status
./zkServer.sh stop
./zkCli.sh
jps
运行命令
ls /
ls /某某
ls /某某/某某某
create /某某
create -e /某某
create -? /某某
delete
deleteAll
get
set
exists
关联Java



