zookeeper是什么?
zookeeper是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等
zookeeper集群创建:
①上传zookeeper包,解压:tar -xf zookeeper-3.4.6.tar.gz,移动zookeeper到/opt/sxt目录下:mv zookeeper-3.4.6 /opt/sxt
②配置zookeeper的环境变量: vi /etc/profile 一定要在Path里面引入
③配置zookeeper的配置文件:
进入zookeeper家目录中conf目录下,可看到一个zoo_sample.cfg文件
拷贝重命名:cp zoo_sample.cfg zoo.cfg
配置zoo.cfg: vi zoo.cfg
2888端口:提供zookeeper对外通信
3888端口:当leader挂掉之后,重新选择leader的时候提供对外通信
④进入数据目录/var/sxt/zk
执行:echo 1 > myid echo 2 > myid echo 3 > myid 分别在node02 node03 node04操作
(就是创建myid文件在服务器1,2,3分别追加1,2, 3, 代表各自zookeeper的id,跟上边zookeeper配置文件一一对应)
⑤从node02向node03/node04分发:scp -r zookeeper-3.4.6/ node04:`pwd` (发动到当前目录,即目标目录与源目录相同;也 可以自定,以"/"开始)
还需要注意,分发的目录后一定要加(zookeeper-3.4.6/),否则就是把该目录的内容发过去,目录名称不会分发!!!
⑥上一步操作主要是在集群的其他服务器上把已经弄好的zookeeper发过去,也可以在XShell上同时配置3个服务器
⑦启动zookeeper集群:
在每台服务器上分别执行:zkServer.sh start
⑧查看zookeeper集群个节点的启动状态:zkServer.sh status
如果显示一个leader,两个follower,代表集群搭建成功
zookeeper的几个机制:
①选举机制 ②原子广播和zab协议 ③监听机制(watch)
zookeeper的3个角色:
leader:领导者,发起一个请求,并且投票
follower:跟从者,响应leader的请求并发起投票
observer:监视leader,并将leader的状态告诉follower
Znode是zookeeper存储数据的数据单元:
它有3种类型:
持久:永远存在,zookeeper几遍重启也不会丢失
临时:当客户端创建了Znode,只被这个客户端占有使用;一旦客户端停止,断开,临时的znode会被删除
顺序:防止名字冲突;节点后会跟随一个10位数字的顺序号
持久节点---默认
临时节点: -e
持久顺序节点: -s
临时顺序节点: -e -s
Zookeeper特点:
最终一致性:为客户端展示同一个视图
可靠性:如果消息被一台服务器接受,那么它将被所有的服务器接受
实时性:Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口
独立性:各个Client之间互不干预
原子性:更新只能成功或者失败,没有中间状态
顺序性:所有Server,同一消息发布顺序一致
zab协议:
广播模式---已经选举出来的leader,开始对外提供服务--------原子广播
恢复模式---还没有leader(集群刚启动/leader死了新的还没起来)
LOOKING:当前Server不知道leader是谁,正在搜寻
LEADING:当前Server即为选举出来的leader
FOLLOWING:leader已经选举出来,当前Server与之同步
原则:过半原则(一半以上通过),所以我们的zookeeper节点最好是单数,<=255
注意点:
①、在启动集群时候关闭防火墙
②、myid对应
③、三台节点同时启动,启动之后再有节点挂掉无所谓
zookeeper的命令操作:
启动客户端命令:zkCli.sh -server 192.168.xxx.xxx:2181
ls / : 列出“/”下面的其它的节点
create -e /name1 xiaozhang 创建临时节点,用quit命令退出或结束,会话节点消失
create -s /name2 xiaowang 创建顺序节点
creae -e -s /name3 xiaoli 创建临时数据节点
get /name 通过名字获取节点
rmr /name 删除指定名字的节点
set /name3 xiaoxiao 设置节点内容
通过eclipse与zookeeper集群创建连接:
Zookeeper zk=new zookeeper("IP:端口号" ,timeout,watcher);