码迷,mamicode.com
首页 > 其他好文 > 详细

nacos 的 cp 和 ap

时间:2019-06-18 12:22:07      阅读:1006      评论:0      收藏:0      [点我收藏+]

标签:cti   param   lib   map   status   ring   无法   临时   div   

如果只有一个 nacos 节点,可以直接以单机模式启动,naming 功能是完全正常的。

也可以以集群模式启动,配置文件中只配一个节点即可。但是,因为此时 nacos 的 raft 实现中,一个节点是选不了主的,所以 cp 模式的 raft 协议就不可用,即持久化的服务是无法注册的。但是,临时服务是可以注册的。

com.alibaba.nacos.naming.consistency.persistent.raft.RaftCore.MasterElection#sendVote

因为没法给自己投票,所以一个节点,无法选主。

public void sendVote() {

        RaftPeer local = peers.get(NetUtils.localServer());
        Loggers.RAFT.info("leader timeout, start voting,leader: {}, term: {}",
            JSON.toJSONString(getLeader()), local.term);

        peers.reset();

        local.term.incrementAndGet();
        local.voteFor = local.ip;
        local.state = RaftPeer.State.CANDIDATE;

        Map<String, String> params = new HashMap<String, String>(1);
        params.put("vote", JSON.toJSONString(local));
        for (final String server : peers.allServersWithoutMySelf()) {
            final String url = buildURL(server, API_VOTE);
            try {
                HttpClient.asyncHttpPost(url, null, params, new AsyncCompletionHandler<Integer>() {
                    @Override
                    public Integer onCompleted(Response response) throws Exception {
                        if (response.getStatusCode() != HttpURLConnection.HTTP_OK) {
                            Loggers.RAFT.error("NACOS-RAFT vote failed: {}, url: {}", response.getResponseBody(), url);
                            return 1;
                        }

                        RaftPeer peer = JSON.parseObject(response.getResponseBody(), RaftPeer.class);

                        Loggers.RAFT.info("received approve from peer: {}", JSON.toJSONString(peer));

                        peers.decideLeader(peer);

                        return 0;
                    }
                });
            } catch (Exception e) {
                Loggers.RAFT.warn("error while sending vote to server: {}", server);
            }
        }
    }
}

 

目前为止,我还不知道,怎样注册持久化的服务,走 raft 协议。

nacos 的 cp 和 ap

标签:cti   param   lib   map   status   ring   无法   临时   div   

原文地址:https://www.cnblogs.com/allenwas3/p/11044367.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!