Zookeeper实现分布式应用的(主节点HA)及客户端动态更新主节点状态
来源:互联网 发布:60级魔兽数据库 编辑:程序博客网 时间:2024/05/22 03:27
某分布式系统中,主节点可以有多台,可以动态上下线
任意一台客户端都能实时感知到主节点服务器的上下线
服务端逻辑:
服务端启动时在zookeeper集群中 /services节点写入一个临时节点,该临时节点内容为该节点的名称。当服务端下线或者宕机时zookeeper会将该节点删除
客户端逻辑
客户端启动时会查找/services 下所有节点 并将节点名输出,当节点变化时,会重新查找所有节点,并将节点名输出
import org.apache.zookeeper.CreateModeimport org.apache.zookeeper.Watcherimport org.apache.zookeeper.ZooDefsimport org.apache.zookeeper.ZooKeeper/** * 服务端 */object DistributedServer { //逗号分隔主机:端口对,每个对应一个ZooKeeper 主机名/IP 与配置文件相同 private val CONNECT_STRING: String = "192.168.84.132:2181,192.168.84.133:2181,192.168.84.134:2181" //会话超时(毫秒) private val SESSION_TIMEOUT: Int = 2000 //获取zooKeeper客户端连接 private val zooKeeper: ZooKeeper by lazy { ZooKeeper(CONNECT_STRING, SESSION_TIMEOUT, Watcher { event -> //Watch回调 println("${event?.type}-->${event?.path}") //创建监听节点变化,非数据 zooKeeper.getChildren("/", true) }) } @JvmStatic fun main(args: Array<String>) { val serviceName = args[0] zooKeeper.create("/services/service", serviceName.toByteArray(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL) println("serviceName --> $serviceName create") println("$serviceName start working.....") Thread.sleep(Long.MAX_VALUE) }}
import org.apache.zookeeper.Watcherimport org.apache.zookeeper.ZooKeeperimport org.apache.zookeeper.data.Stat/** * 客户端 */object DistributedClient { //逗号分隔主机:端口对,每个对应一个ZooKeeper 主机名/IP 与配置文件相同 private val CONNECT_STRING: String = "192.168.84.132:2181,192.168.84.133:2181,192.168.84.134:2181" //会话超时(毫秒) private val SESSION_TIMEOUT: Int = 2000 private val zooKeeper: ZooKeeper by lazy { ZooKeeper(CONNECT_STRING, SESSION_TIMEOUT, Watcher { event -> println("${event?.type}-->${event?.path}") getServiceList() }) } //Volatile @Volatile private lateinit var services: ArrayList<String> @JvmStatic fun main(args: Array<String>) { getServiceList() println("client start working.....") Thread.sleep(Long.MAX_VALUE) } private fun getServiceList() { //每次/services子节点变化都会调用watch val serviceList = zooKeeper.getChildren("/services", true) //设置临时集合存储所有service 信息 val tempList = arrayListOf<String>() serviceList //取每个service的信息并存入临时集合 .map { zooKeeper.getData("/services/" + it, false, Stat())} .mapTo(tempList) { String(it) } services = tempList println(services) }}
服务端
客户端
服务端上下线 客户端更新
阅读全文
0 0
- Zookeeper实现分布式应用的(主节点HA)及客户端动态更新主节点状态
- Zookeeper应用案例-实现分布式应用的(主节点HA)及客户端动态更新主节点状态
- Zookeeper中的主节点-从节点应用(master-worker)
- zookeeper客户端读取子节点的信息
- 分布式系统笔记:利用zookeeper实现分布式leader节点选举
- zookeeper客户端创建节点数据
- Zookeeper的节点znode
- ZooKeeper 节点的类型
- Zookeeper客户端基本操作java实现——创建连接、创建节点、添加修改节点内容、获取子节点、获取节点数据、删除节点
- zookeeper 客户端 zkCli.sh 的使用 查看节点
- ZooKeeper客户端脚本zkCli.sh的节点操作
- MySQL Group Replication HA with ProxySQL [主节点故障切换对应用无感知]
- 分布式服务管理框架-Zookeeper节点ACL
- zookeeper实时感知到主节点服务器的上下线
- Zookeeper 节点管理 Java实现
- Spark集群master节点实现HA配置
- 使用zookeeper来解决在分布式系统中单节点维护微信token生命周期的容灾demo【已抽象分离】[分布式锁][9.28更新]
- Zookeeper(五)Java客户端节点操作
- bootstrap学习(1)
- Java包的定义及使用
- [LeetCode]83. Remove Duplicates from Sorted List
- Java访问控制权限
- 文章标题
- Zookeeper实现分布式应用的(主节点HA)及客户端动态更新主节点状态
- Java泛型
- ztree使用
- 用c语言制作简单的成绩判断系统
- Java注解Annotation
- cocos2dx第一个游戏项目helloworld(一)
- [hdu5285]wyh2000 and pupil
- if else
- Java8新特性