zookeeper集群搭建


欢迎查看Eetal的第二十三篇博客–zookeeper集群搭建

zookeeper简介

zookeeper大多用于做分布式环境下的注册中心或者监控中心
一开始是用于分布式系统下资源的同步访问
在分布式事务场景下也多作为 协调者
是一个中心化管理的分布式同步技术
zk上的数据和redis类似,存在于内存,保存快照、数据日志等文件

安装zookeeper

需要安装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:3883

使用mvn打包

3.5.5版本的zookeeper需要最少jdk1.8 u211版本,并且默认是没有编译class文件的
需要进入zookeeper-server目录,使用maven命令
mvn package -Dmaventestskip=true
跳过测试程序并打包编译

运行zk集群

我们配置有三台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:port

host为zkServer的ip或者域名,port为配置的client端口

结束会话

quit

创建节点

持久节点

有序节点

创建时添加参数 -s 指定,所有有序节点会在节点,排序从0开始,每次创建有序节点会使序号加一
有序节点会在输入名称后加上序号作为节点名称创建节点

create -s sortNode aaa

普通节点

create node bbb

没有指定为临时节点的节点默认都是持久节点

临时节点。

临时节点在会话结束时就会被删除,通过创建时添加参数 -e 指定

create -e tmpNode tmp

临时节点也可以是有序节点

create -s -e sortTmpNode sortTmp

ls命令

ls命令与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
更多资料,请搜索公众号编程宝可梦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值