美文网首页Zookeeper
zookeeper 应用场景三、Master选举

zookeeper 应用场景三、Master选举

作者: 泡水鱼干 | 来源:发表于2021-05-22 10:30 被阅读0次

何为 Master 选举?

在分布式系统中,Master往往用来协调集群中其他系统单元,具有对分布式系统状态变更的决定权。当master失效时候需要重新指定实例作为master,这个产生master的过程就为master选举


截屏2021-05-22 10.31.24.png

当 Master 不可用时,如何自动选举出新的 Master?

ZooKeeper 如何来实现 Master 选举?

010.png

争抢主节点方式

  • 实例 1 为Master,会创建临时主节点,并将自己的信息写入Master

  • 当实例 1 宕机,临时主节点消失,此时实例 2 和实例 3 会争抢创建临时主节点。

  • 假如实例 2 创建了临时主节点,实例 2 变为 Master,实例 3 发现主节点已存在,不再创建,获取主节点信息。

最小节点方式

  • 会将所有的节点注册到 servers 中。
  • 此时可以用最小的节点作为主节点。
  • 当主跌点宕机之后,按照顺序产生主节点

举例

import java.util.concurrent.CountDownLatch;
import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.exception.ZkNodeExistsException;

public class MasterElectionDemo {

    static class Server {

        private String cluster, name, address;

        private final String path, value;

        private String master;

        public Server(String cluster, String name, String address) {
            super();
            this.cluster = cluster;
            this.name = name;
            this.address = address;
            path = "/" + this.cluster + "Master";
            value = "name:" + name + " address:" + address;

            ZkClient client = new ZkClient("localhost:2181");
            client.setZkSerializer(new MyZkSerializer());

            new Thread(new Runnable() {

                @Override
                public void run() {
                    electionMaster(client);
                }

            }).start();
        }

        public void electionMaster(ZkClient client) {
            try {
                client.createEphemeral(path, value);
                master = client.readData(path);
                System.out.println(value + "创建节点成功,成为Master");
            } catch (ZkNodeExistsException e) {
                master = client.readData(path);
                System.out.println("Master为:" + master);
            }

            // 为阻塞自己等待而用
            CountDownLatch cdl = new CountDownLatch(1);

            // 注册watcher
            IZkDataListener listener = new IZkDataListener() {

                @Override
                public void handleDataDeleted(String dataPath) throws Exception {
                    System.out.println("-----监听到节点被删除");
                    cdl.countDown();
                }

                @Override
                public void handleDataChange(String dataPath, Object data) throws Exception {

                }
            };

            client.subscribeDataChanges(path, listener);

            // 让自己阻塞
            if (client.exists(path)) {
                try {
                    cdl.await();
                } catch (InterruptedException e1) {
                    e1.printStackTrace();
                }
            }
            // 醒来后,取消watcher
            client.unsubscribeDataChanges(path, listener);
            // 递归调自己(下一次选举)
            electionMaster(client);

        }

    }

    public static void main(String[] args) {
        // 测试时,依次开启多个Server实例java进程,然后停止获取的master的节点,看谁抢到Master
        // Server s = new Server("cluster1", "server1", "192.168.1.11:8991");
        // Server s = new Server("cluster1", "server2", "192.168.1.11:8992");
        Server s = new Server("cluster1", "server3", "192.168.1.11:8993");
        // Server s = new Server("cluster1", "server4", "192.168.1.11:8994");
    }

}

相关文章

  • zookeeper 应用场景三、Master选举

    何为 Master 选举? 在分布式系统中,Master往往用来协调集群中其他系统单元,具有对分布式系统状态变更的...

  • Curator调用实例

    Curator是zookeeper使用最广泛的工具(1)zk的应用场景:分布式锁、Master选举(2)zk的应用...

  • zookeeper总结

    zookeeper的应用案例:Hbase:使用zookeeper进行master选举,服务间协调。Solr:使用z...

  • 分布式-10-Chubby

    应用场景 GFS中,Master选举 BigTable,Master选举;Master感知Slave;客户端定位M...

  • zookeeper系列

    zookeeper系列(一)zookeeper必知 √zookeeper系列(二)实战master选举 √zo...

  • zookeeper Master选举

    简述 在分布式环境中,常常需要遇到这样一个场景:对于一个复杂的任务,需要从集群中选举一台机器进行处理即可。这种分布...

  • zookeeper实现master选举

    zookeeper其中的一个功能就是实现集群master的选举功能,这篇文章就来实现一下这个master选举功能,...

  • Zookeeper1:Zookeeper基本原理

    1.zookeeper选举机制 Zookeeper虽然在配置文件中并没有指定master和slave,但是,zoo...

  • 基于zookeeper搭建sparkHA

    企业中一般都使用zookeeper的高可用搭建Spark。其原理就是通过zookeeper来选举一个Master,...

  • 利用Zookeeper实现 - Master选举

    原文始发于:利用Zookeeper实现 - Master选举 Zookeeper 是一个高可用的分布式数据管理与协...

网友评论

    本文标题:zookeeper 应用场景三、Master选举

    本文链接:https://www.haomeiwen.com/subject/qwenjltx.html