ZK实现HA和负载均衡
思路:
zk做路由,client从zk那里拿到可用的server地址(最好这里做个缓存),通过自己的负载均衡算法得到要连接的地址,client去连接指定server,
server要做的是,当server启动后去zk注册自己(创建临时文件),子节点变化
当某台server宕机,server与zk的链接会断掉,zk会自动删除该临时文件,子节点变化
zk的watcher会通知client更新可用地址
关键代码:
zooKeeper.getChildren(PUB_PATH, new Watcher() { public void process(WatchedEvent watchedEvent) { if (watchedEvent.getType()== Event.EventType.NodeChildrenChanged){ //当子节点变化时触动,做HA时,在这里从新遍历子节点,选择可用Server } } });
负载均衡算法:轮询法、随机法、源地址哈希法、加权轮询法、加权随机法、最小连接数法