上一篇 <<<Zookeeper的Zab一致性协议原理
下一篇 >>>Zookeeper示例之访问权限控制
原理
多个服务器在启动的时候,会在Zookeeper上创建相同的临时节点,谁能创建成果,谁就是主(因为主节点保证唯一)
如果主服务器宕机后,会话链接也会失效,其他服务器又开始重新选举
引入依赖
<dependencies>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
核心代码
@RestController
public class IndexController {
// 获取服务信息
@RequestMapping("/getServerInfo")
public String getServerInfo() {
return ElectionMaster.isSurvival ? "当前服务器为主节点" : "当前服务器为从节点";
}
}
@Component
public class MyApplicationRunner implements ApplicationRunner {
// 创建zk连接
ZkClient zkClient = new ZkClient("127.0.0.1:2181");
private String path = "/election";
@Value("${server.port}")
private String serverPort;
public void run(ApplicationArguments args) throws Exception {
System.out.println("项目启动完成...");
createEphemeral();
// 创建事件监听
zkClient.subscribeDataChanges(path, new IZkDataListener() {
// 节点被删除
public void handleDataDeleted(String dataPath) throws Exception {
// 主节点已经挂了,重新选举
System.out.println("主节点已经挂了,重新开始选举");
createEphemeral();
}
public void handleDataChange(String dataPath, Object data) throws Exception {
}
});
}
private void createEphemeral() {
try {
zkClient.createEphemeral(path, serverPort);
ElectionMaster.isSurvival = true;
System.out.println("serverPort:" + serverPort + ",选举成功....");
} catch (Exception e) {
ElectionMaster.isSurvival = false;
}
}
}
@Component
public class ElectionMaster {
// 服务器info信息 是否存活
public static boolean isSurvival;
}
推荐阅读:
<<<Zookeeper基础知识及应用场景
<<<Zookeeper如何实现分布式锁
<<<CAP理论和Base理论
<<<Zookeeper选举的策略
<<<为什么Zookeeper集群节点一定要是奇数
<<<Zookeeper在后期新增zk节点时如何提高选举效率问题
<<<Zookeeper如何保证节点一致性问题
<<<Zookeeper的Zab一致性协议原理
<<<Zookeeper示例之访问权限控制
<<<Zookeeper示例之服务发现与治理
<<<Zookeeper示例之分布式锁
<<<Zookeeper示例之节点事件监听
<<<Zookeeper示例之集群请求
<<<Linux环境安装Zookeeper
<<<Zookeeper配置文件介绍
<<<Zookeeper常见问题
<<<Eureka与Zookeeper有啥区别?
<<<Zookeeper常用命令