zookeeper
// 启动zookeeper
zkServer.sh start
// 查看zookeeper状态
zkServer.sh status
1、角色 状态
-
leader leading
follower following
observer observering
looking–观望(leader挂掉了或者集群刚启动) -
2、原子广播 1
- 通过投票确定某一件事能不能做 (过半原则—zookeeper最好是奇数)
- 提交请求到follower,follower会将请求发送给leader
- leader将请求下发给所有的follower,follower来判断,并将结果返回给leader
- leader将请求写入的文件分发到所有的follower------(最终一致性–及时在写入的过程中有节点连接不上,当恢复的时候还会把节点上写入数据,保证最终的数据各个节点都一样)
- 通过投票确定某一件事能不能做 (过半原则—zookeeper最好是奇数)
3、zab协议
广播模式–选举出来leader,对外提供服务
恢复模式—选举leader,也就是4大状态存在
4、选举机制 2
- id----serverid(设置的myid)
zxid-----(股份)
逻辑时钟------每个一个周期回加1(根据逻辑时钟判断我当前选举的状态)
5、
- 因为zookeeper是不接受写请求—他有自己的文件系统
znode
持久、临时、持久顺序、临时顺序(-e 临时, -s顺序, 默认是持久)
启动
zkCli.sh -server ip:port(2181默认端口)
help查看相应的操作命令
quit 退出
6、通过eclipse创建连接
// timeout是设置过期时间,watcher是监听器
Zookeeper zk=new zookeeper("ip:2181" ,timeout,watcher)
// /name指定在"/"下创建一个znode节点name,节点初始内容是abc
zk.create("/name", "abc".getBytes(),
// 是将所要ADMIN之外的权限授予每个人 指定创建的节点是持久节点
Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
// 查看指定节点的内容
byte[] data = zk.getData("/name", true, null);
// 将获取的内容转换为字符串
String db = new String(data);
System.out.println(db);
// 删除指定节点
//client.delete("/name", 1);
Thread.sleep(Long.MAX_VALUE);
}
设置监听机制:(当的znode发生变化的时候,监听一下,但是只能监听一次)
- 1、设置 setData getChildren
2、启动 delete exits create、getData
7、zookeeper的特性:
- 最终一致性
原子
可靠
实时
顺序
单一视图
注意点:
- 1、在启动集群时候关闭防火墙
2、myid对应
3、三台节点同时启动,启动之后再有节点挂掉无所谓