zookeeper大多用于做分布式环境下的注册中心或者监控中心 一开始是用于分布式系统下资源的同步访问 在分布式事务场景下也多作为 协调者 是一个中心化管理的分布式同步技术 zk上的数据和redis类似,存在于内存,保存快照、数据日志等文件
需要安装jdk环境——jdk1.8的u211以上版本 下载zookeeper压缩包并解压——3.5.5
复制zoo.cfg.sample为zoo1.cfg作为第一台的配置文件 复制多个配置文件作为多台zk启动的不同配置 编辑不同配置文件,使用不同客户端连接端口、数据同步端口和选举端口 server.1=127.0.0.1:2881:3881——第一个端口代表数据同步端口,第二个代表选举端口 dataDir配置到不同目录,不同服务器存放数据的快照文件到不同文件夹,还要存放不同的myid文件 myid文件中只保存一个数字代表当前服务器的id dataLogDir配置到不同目录,使得数据的日志分开存储(不包括运行时的日志,运行时日志在log4j配置文件里配置)
dataDir=/tmp/zookeeper01 clientPort=2181 server.1=127.0.0.1:2881:3881 server.2=127.0.0.1:2882:3882 server.3=127.0.0.1:2883:38833.5.5版本的zookeeper需要最少jdk1.8 u211版本,并且默认是没有编译class文件的 需要进入zookeeper-server目录,使用maven命令 mvn package -Dmaventestskip=true 跳过测试程序并打包编译
我们配置有三台zk,假设第一个的配置文件为conf目录下的zoo1.cfg,依次类推 运行过程为 使用zk的bin下的zkServer.sh命令运行
./zkServer.sh start conf/zoo1.cfg启动成功后,这时使用命令查看状态
./zkServer.sh start conf/zoo1.cfg应该是提示有错误,可能没有运行成功的 那是因为集群里只有一台机器无法选举(因为zk是中心化的,必须有一个协调者),不用管继续启动剩下的机器
./zkServer.sh start conf/zoo2.cfg这时查看状态会发现两台机器都启动成功了 并且一台成为了follower一台成为leader zookeeper集群下的机器有三种角色,leader、follower和observer leader负责事务请求(增删改),任意节点都可处理查询请求,follower参与选举,observer不参与选举只做数据同步 接着启动最后一台
./zkServer.sh start conf/zoo3.cfg使用zkCli命令
sh bin/zkCli.sh -server host:porthost为zkServer的ip或者域名,port为配置的client端口
创建时添加参数 -s 指定,所有有序节点会在节点,排序从0开始,每次创建有序节点会使序号加一 有序节点会在输入名称后加上序号作为节点名称创建节点
create -s sortNode aaa没有指定为临时节点的节点默认都是持久节点
临时节点在会话结束时就会被删除,通过创建时添加参数 -e 指定
create -e tmpNode tmp临时节点也可以是有序节点
create -s -e sortTmpNode sortTmpls命令与linux类似,展示给定路径的所有子节点 根路径为/
ls / ls -w /-w参数代表开启该路径的一次watch,下一次且仅一次该路径下的子节点的增删事件会被监听到
absPath—节点的绝对路径值,root为/
set [absPath] value [version]version值可不传,用于并发控制,代表要求的为dataversion,即该节点被修改过几次,如果不符合,本次修改失败
absPath—节点的绝对路径值,root为/
get -w [absPath] get -s [absPath]-w参数代表开启一次watch,下一次且仅一次对该节点的set事件将会被监听到 -s参数代表获取节点值并展示包括版本号、子节点个数等信息 -s输出格式如下
cZxid = 0x10000001d //create node时分配的id ctime = Tue Jul 16 07:22:54 PDT 2019// 创建时间 mZxid = 0x10000001f //set修改过以后变更的id mtime = Wed Jul 17 08:43:33 PDT 2019 //最后一次修改时间 pZxid = 0x10000001d //一开始为cZxid,子节点修改时变更 cversion = 0 //子节点版本号,一开始为0,子节点修改时变更 dataVersion = 2 //数据版本号,一开始为0,每修改一次+1 aclVersion = 0 //acl权限版本号,一开始为0[create,read,write,delete,admin] ephemeralOwner = 0x0 //临时节点才会有,持有者会话id dataLength = 1 //数据的字符串长度 numChildren = 0 //子节点个数absPath—节点的绝对路径值,root为/
delete [absPath]更多文章,请搜索公众号歪歪梯Club