对于Zookeeper的认知

说一下zookeeper
zookeeper是分布式协调服务
其中配置有
zoo.cfg
datadir=
cd /etc/profile ----->

server.1=bin02:2888:3888
server.2=bin03:2888:3888
server.3=bin04:2888:3888

其中2888端口提供zookeeper对外通信,
3888端口:当leader挂掉之后,重新选择leader的时候提供对外通信;

切记 :关闭防火墙!!!!!


角色:
leader 领导者,发起一个请求,并且开始投票
follower 是跟从者,响应leader的请求并发起投票
observer 监视leader 并将leader的状态告诉follower

有:–》选举机制、原子广播和zab协议、监听机制
如下:
1:一个外部客户端写入请求,将请求传给follower
2:follower将请求转发给leader
3:leader将请求发到各个follower,进行投票
4:follower将自己的想法返回给leader
原则 (少数服从多数)过半原则:节点数最好是单数;
3+4是原子广播

 zab协议:
 		广播模式-------已经选举出来的leader,开始对外提供服务------------原子广播
 		恢复模式----还没有leader(这个情况可能是集群刚启动或者是leader挂掉了新的还没有起来)
 					-------looking  观望
 					-------following----跟从但是有想法
 					-----leading   继承人(准备被继承)leader
 					observing--------observer

监听机制
follower 查看leader的状态。然后将状态信息进行更新和发送

zookeeper的文件节点----------znode
启动客户端: zkCli.sh -server 192.168.35.125:2181

文件节点操作文件的命令
在这里插入图片描述

上手操作:

[zk: 192.168.35.125:2181(CONNECTED) 21] ls /
[name, zookeeper, name20000000002, name10000000001]
[zk: 192.168.35.125:2181(CONNECTED) 22] rmr /name 
[zk: 192.168.35.125:2181(CONNECTED) 23] ls /
[zookeeper, name20000000002, name10000000001]

[zk: 192.168.35.125:2181(CONNECTED) 19] set /name buzhiushi123
cZxid = 0x200000004
ctime = Tue Jun 18 01:45:41 CST 2019
mZxid = 0x200000008
mtime = Tue Jun 18 01:51:03 CST 2019
pZxid = 0x200000004
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x16b66d95ad00001
dataLength = 12
numChildren = 0
[zk: 192.168.35.125:2181(CONNECTED) 20] get /name
buzhiushi123
cZxid = 0x200000004
ctime = Tue Jun 18 01:45:41 CST 2019
mZxid = 0x200000008
mtime = Tue Jun 18 01:51:03 CST 2019
pZxid = 0x200000004
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x16b66d95ad00001
dataLength = 12
numChildren = 0

[zk: 192.168.35.125:2181(CONNECTED) 2] create -e /name "123"
Created /name
[zk: 192.168.35.125:2181(CONNECTED) 3] ls /
[name, zookeeper]
[zk: 192.168.35.125:2181(CONNECTED) 4] create -s /name1 xiaopengyou
Created /name10000000001
[zk: 192.168.35.125:2181(CONNECTED) 5] create -s /name2 xiaojiejie 
Created /name20000000002
[zk: 192.168.35.125:2181(CONNECTED) 6] ls /
[name, zookeeper, name20000000002, name10000000001]

在eclipse中使用zookeeper

public class TestZ {
	public static void main(String[] args) throws Exception {
		ZooKeeper zooKeeper = new ZooKeeper("192.168.35.125", 1000, null);
		//创建主节点
		//String create = zooKeeper.create("/name", "dididididi".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
		
		//创建子节点
		/*String create = zooKeeper.create("/name/sex", "didididadada".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
		System.out.println(create);*/
		//获取节点内容
		/*byte[] data = zooKeeper.getData("/name", true, null);	
		String string = new String(data);
		System.out.println(string);//dididididi
*/		//删除节点
		//zooKeeper.delete("/name/sex", -1);
		
		//设置节点内容
		//zooKeeper.setData("/name", "2222222222".getBytes(), zooKeeper.exists("/name", true).getAversion());
		byte[] data = zooKeeper.getData("/name", true, null);
		String string = new String(data);
		System.out.println(string);
		
	}

}

public class TestWatcher implements Watcher{
	
	private static final int SESSION_TIMEOUT=1000;
	private ZooKeeper zk=null;
	/**
	 * @throws Exception 
	 * @throws Exception 
	 * 
	 */
	public static void main(String[] args) throws Exception {
		ZooKeeper zooKeeper = new ZooKeeper("192.168.35.125", 1000, null);
		byte[] data = zooKeeper.getData("/learning", new TestWatcher(), null);
		System.out.println(new String(data));
		Thread.sleep(Long.MAX_VALUE);
	}
	

	@Override
	public void process(WatchedEvent event) {

		System.out.println(event.getPath());
	}

}

猜你喜欢

转载自blog.csdn.net/sincere_love/article/details/92772320