亚洲成a人片在线观看69,中文字幕免费无线观看,日韩精品无码一区二区三区四区,92精品国产自产在线观看直播,亚洲精品无码不卡在线观看屁,亚洲成av人片在www色猫咪

Zookeeper啟動(dòng)源碼詳解

簡(jiǎn)介

啟動(dòng)源碼分析

Zookeeper啟動(dòng)的主類(lèi)為QuorumPeerMain.java 。入口函數文為initializeAndRun,如下所示,在往下的核心函數為runFromConfig。

 QuorumPeerMain main = new QuorumPeerMain();
 try {
     main.initializeAndRun(args);
} catch (IllegalArgumentException e) {
// 啟動(dòng)異常處理。
 }
LOG.info("Exiting normally");
ServiceUtils.requestSystemExit(ExitCode.EXECUTION_FINISHED.getValue());

runFromConfig函數里面主要做了下面幾件事:

  • 初始化log4j相關(guān)的jmx。
  • 初始化監控相關(guān)組件。
  • 初始化認證相關(guān)組件。
  • 設置基礎配置信息。
  • 啟動(dòng)Zookeeper。由quorumPeer.start(); 開(kāi)始。相關(guān)的類(lèi)為:QuorumPeer.java
public void runFromConfig(QuorumPeerConfig config) throws IOException, AdminServerException {
        try {
            // 注冊和log4j相關(guān)的jmx監控
            ManagedUtil.registerLog4jMBeans();
        } catch (JMException e) {
            LOG.warn("Unable to register log4j JMX control", e);
        }

        LOG.info("Starting quorum peer, myid=" + config.getServerId());
        final MetricsProvider metricsProvider;
        try {
            metricsProvider = MetricsProviderBootstrap.startMetricsProvider(
                config.getMetricsProviderClassName(),
                config.getMetricsProviderConfiguration());
        } catch (MetricsProviderLifeCycleException error) {
            throw new IOException("Cannot boot MetricsProvider " + config.getMetricsProviderClassName(), error);
        }
        try {
            // 初始化監控相關(guān)
            ServerMetrics.metricsProviderInitialized(metricsProvider);
            // 初始化認證相關(guān)信息
            ProviderRegistry.initialize();
            // 省略部分

            quorumPeer = getQuorumPeer();
            // 設置基礎配置文件
            quorumPeer.setTxnFactory(new FileTxnSnapLog(config.getDataLogDir(), config.getDataDir()));
            quorumPeer.enableLocalSessions(config.areLocalSessionsEnabled());
            quorumPeer.enableLocalSessionsUpgrading(config.isLocalSessionsUpgradingEnabled());
            // 省略部分

            // sets quorum sasl authentication configurations
            quorumPeer.setQuorumSaslEnabled(config.quorumEnableSasl);
            if (quorumPeer.isQuorumSaslAuthEnabled()) {
                // 開(kāi)啟sasl之后,設置相關(guān)參數
                quorumPeer.setQuorumServerSaslRequired(config.quorumServerRequireSasl);
                quorumPeer.setQuorumLearnerSaslRequired(config.quorumLearnerRequireSasl);
                quorumPeer.setQuorumServicePrincipal(config.quorumServicePrincipal);
                quorumPeer.setQuorumServerLoginContext(config.quorumServerLoginContext);
                quorumPeer.setQuorumLearnerLoginContext(config.quorumLearnerLoginContext);
            }
            quorumPeer.setQuorumCnxnThreadsSize(config.quorumCnxnThreadsSize);
            quorumPeer.initialize();

            if (config.jvmPauseMonitorToRun) {
                quorumPeer.setJvmPauseMonitor(new JvmPauseMonitor(config));
            }

            // 開(kāi)始啟動(dòng)
            quorumPeer.start();
            ZKAuditProvider.addZKStartStopAuditLog();
            quorumPeer.join();
        } catch (InterruptedException e) {
            // warn, but generally this is ok
            LOG.warn("Quorum Peer interrupted", e);
        } finally {
            try {
                metricsProvider.stop();
            } catch (Throwable error) {
                LOG.warn("Error while stopping metrics", error);
            }
        }
    }

真正啟動(dòng)的函數為QuorumPeer的start函數。主要做了下面事:

  • 加載數據,包括log文件里面和snapshot里面的數據,在數據量較大的情況下,當前步驟可能比較慢。

  • 啟動(dòng)管理服務(wù),主要用于管理Zookeeper服務(wù)端。主要實(shí)現方式包含:

    • JettyAdminServer:提供http方式的servier,通過(guò)CommandServlet實(shí)現管理接口,主要是四字命令。
    • DummyAdminServer:實(shí)際上就是啥也沒(méi)有,不只是管理的意思。
  • 開(kāi)始參與選舉Leader。

  • 啟動(dòng)JVM 延時(shí)檢測線(xiàn)程。

 public synchronized void start() {
        if (!getView().containsKey(myid)) {
            throw new RuntimeException("My id " + myid + " not in the peer list");
        }
        // 加載數據,當前步驟可能比較慢。
        loadDataBase();
        startServerCnxnFactory();
        try {
            adminServer.start();
        } catch (AdminServerException e) {
            LOG.warn("Problem starting AdminServer", e);
        }
        // 開(kāi)始Leader選舉
        startLeaderElection();
        startJvmPauseMonitor();
        super.start();
    }

zookeeper數據加載主要通過(guò)ZKDatabase.java實(shí)現。加載數據的入口函數為loadDataBase。核心還是FileTxnSnapLog.restore函數。

    public long loadDataBase() throws IOException {
        long startTime = Time.currentElapsedTime();
        // 加載snapshot文件和log文件
        long zxid = snapLog.restore(dataTree, sessionsWithTimeouts, commitProposalPlaybackListener);
        initialized = true;
        long loadTime = Time.currentElapsedTime() - startTime;
        ServerMetrics.getMetrics().DB_INIT_TIME.add(loadTime);
        LOG.info("Snapshot loaded in {} ms, highest zxid is 0x{}, digest is {}",
                loadTime, Long.toHexString(zxid), dataTree.getTreeDigest());
        return zxid;
    }

# zookeeper 


標 題:《Zookeeper啟動(dòng)源碼詳解
作 者:zeekling
提 示:轉載請注明文章轉載自個(gè)人博客:浪浪山旁那個(gè)村

評論

取消
亚洲成a人片在线观看69,中文字幕免费无线观看,日韩精品无码一区二区三区四区,92精品国产自产在线观看直播,亚洲精品无码不卡在线观看屁,亚洲成av人片在www色猫咪 亚洲欧美日韩精品专区| 免费点播手机在线播放| 亚洲综合日韩中文| 久久久亚洲国产精品性色| 久久国产乱子伦免费精品无码| 一本大道伊人av久久乱码| 亚洲欧美日韩国产精品专区| 亚洲aV无码兔费综合| 亚洲VA欧美va国产va综合| 国产精品无码中文字幕| 内射中出日韩无国产剧情| 中文字幕无码精品亚洲35| 亚洲av高清一区中文| 亚洲天堂日韩无码高清综合| 永久免费无码网站在线观看| 亚洲天堂网站在线观看| 亚洲欧美日韩国产精品专区| 无码日韩久久精品国产欧中文| 亚洲综合无码久久日日网址| 亚洲欧洲美洲日产国产| 亚洲最新一区二区在线观看| 国产超清无码一区二区不卡| 欧美又大又硬又粗BBBBB| 99久热在线精品国产观看| 又爽又色的视频网站| 亚洲午夜一区二区久久精品| 亚洲精品乱码久久久久久小说| 日韩久久久精品影院| 日本欧美强乱视频在线| 在线综合亚洲欧美自拍| 亚洲天堂视频在线免费| 亚洲免费二区三区| 99精品女人在线观看免费视频| 亚洲国产精品欧美日本在线播放| 天天av天天爽无码中文| 伊人色综合久久天天网| 亚洲色无码国产精品网站可下载| 亚洲图片小说激情综合| 人妻人人揉人人躁人人A片| 亚洲图片日韩视频一区二区| 亚洲αV日韩αV无码污污网站| http://0755renliu.com http://duoyiku.com http://sjh139.com http://chinadicom.com http://632122.com http://kxyinzhang.com