1.创建maven工程
2.添加pom.xml文件下的依赖
3.拷贝log4j.properties文件到项目根目录
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
4创建zookeeper客户端
private static String connectString = "hadoop102:2181,hadoop103:2181,hadoop104:2181";
private static int sessionTimeout = 2000;
private ZooKeeper zkClient = null;
@Before
//如果需要在每个@Test方法执行之前,先执行一部分初始化代码,可以将初始化代码写到@Before
public void init() throws Exception {
//1:连接到zk
//ZooKeeper(String connectString , int sessionTimeout, Watcher watcher)
// 参1 连接信息
// 参2 超时
// 参3 监听器 负责监听重要的对象或者数据的变化 。如果出现变化,立马执行处理方法。
zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
public void process(WatchedEvent watchedEvent) {
System.out.println("发送短信");
try {
print();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
5.创建一个测试类,创建子节点
6.在创建一个不需要监听测试,判断是否存在此节点
7.查询sanguo下的子节点
public void print() throws Exception {
List<String> list = zkClient.getChildren("/sanguo", true);
System.out.println(list);
}
8.获取子节点并监听节点变化,将Watch的值改为true
public void print() throws Exception {
List<String> list = zkClient.getChildren("/sanguo", true);
System.out.println(list);
}
@Test
public void test03() throws Exception {
print();
Thread.sleep(Long.MAX_VALUE);
}
9.先在集群上创建/servers节点
create /servers "servers"
10.客户端监听代码编写
11.服务器端向Zookeeper写操作实现
创建节点
private void createNode(String hostname) throws KeeperException, InterruptedException {
//create /servers/server1 "server1"
System.out.println(hostname+" 上线了");
zk.create(parentNode+"/"+hostname,hostname.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
}
创建hadoop102节点
12.总结
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的
Zookeeper中的角色主要有以下三类:
ZooKeeper的部署方式有哪几种?集群中的角色有哪些?集群最少需要几台机器?
(1)部署方式单机模式、集群模式
(2)角色:Leader和Follower
(3)集群最少需要机器数:3
ZooKeeper的部署方式有哪几种?集群中的角色有哪些?集群最少需要几台机器?
(1)部署方式单机模式、集群模式
(2)角色:Leader和Follower
(3)集群最少需要机器数:3
Zookeeper的监听:
Zookeeper 中的监视是轻量级的,因此容易设置、维护和分发。当客户端与 Zookeeper 服务器端失去联系时,客户端并不会收到监视事件的通知,只有当客户端重新连接后,若在必要的情况下,以前注册的监视会重新被注册并触发,对于开发人员来说 这通常是透明的。只有一种情况会导致监视事件的丢失,即:通过 exists() 设置了某个 znode 节点的监视,但是如果某个客户端在此 znode 节点被创建和删除的时间间隔内与 zookeeper 服务器失去了联系,该客户端即使稍后重新连接 zookeeper服务器后也得不到事件通知。