<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      轉(zhuǎn)載和引用,請注明原文出處! Fork me on GitHub
      結(jié)局很美妙的事,開頭并非如此!

      Zookeeper系列五:Master選舉、ZK高級特性:基本模型

      一、Master選舉

      1. master選舉原理:

      有多個master,每次只能有一個master負責主要的工作,其他的master作為備份,同時對負責工作的master進行監(jiān)聽,一旦負責工作的master掛掉了,其他的master就會收到監(jiān)聽的事件,從而去搶奪負責工作的權(quán)利,其他沒有爭奪到負責主要工作的master轉(zhuǎn)而去監(jiān)聽負責工作的新master。

      本質(zhì)其實是利用zookeeper的臨時節(jié)點的特性:臨時節(jié)點隨著會話的消亡二消亡,同一個臨時節(jié)點只能創(chuàng)建一個,創(chuàng)建失敗的節(jié)點(從master)對創(chuàng)建成功節(jié)點(主master)進行監(jiān)控,一旦創(chuàng)建成功的節(jié)點(主master)會話消失,之前創(chuàng)建失敗的節(jié)點(從master)就會監(jiān)聽到去搶奪創(chuàng)建臨時節(jié)點

      2. 代碼實現(xiàn)-兩個tomcat模擬master選舉

      2.1 準備工作:

      1)首先在新建一個maven項目ZK-Demo,然后在pom.xml里面引入zk的依賴

              <dependency>
                  <groupId>org.apache.zookeeper</groupId>
                  <artifactId>zookeeper</artifactId>
                  <version>3.4.10</version>
              </dependency>
              <dependency>
                  <groupId>org.apache.curator</groupId>
                  <artifactId>curator-framework</artifactId>
                  <version>4.0.0</version>
              </dependency>
              <dependency>
                  <groupId>org.apache.curator</groupId>
                  <artifactId>curator-recipes</artifactId>
                  <version>4.0.0</version>
              </dependency>
              
              <dependency>
                  <groupId>javax.servlet</groupId>
                  <artifactId>javax.servlet-api</artifactId>
                  <version>3.1.0</version>
              </dependency>
              <dependency>
                  <groupId>org.apache.tomcat</groupId>
                  <artifactId>tomcat-catalina</artifactId>
                  <version>7.0.39</version>
              </dependency>

       2)在eclipse里面配置兩個tomcat,具體方法百度

      注意:這里的兩個tomcat的命名不規(guī)范,端口分別為8080,8081

      2.2 編寫選舉master的業(yè)務(wù)類

      package com.study.demo.election;
      
      import java.io.IOException;
      
      import javax.servlet.ServletException;
      
      import org.apache.catalina.connector.Request;
      import org.apache.catalina.connector.Response;
      import org.apache.catalina.valves.ValveBase;
      import org.apache.curator.framework.CuratorFramework;
      import org.apache.curator.framework.CuratorFrameworkFactory;
      import org.apache.curator.framework.recipes.cache.TreeCache;
      import org.apache.curator.framework.recipes.cache.TreeCacheEvent;
      import org.apache.curator.framework.recipes.cache.TreeCacheListener;
      import org.apache.curator.retry.ExponentialBackoffRetry;
      import org.apache.zookeeper.CreateMode;
      
      /**
      * 
      * @Description: 兩個tomcat模擬master選舉
      * @author liguangsheng
      * @date 2018年9月6日
      *
      */
      public class ZkTomcatMaster extends ValveBase {
      
          private static CuratorFramework client;
          // zk臨時節(jié)點路徑(主master)
          private final static String zkPath = "/Tomcat/ActiveLock";
          //Curator事件監(jiān)聽
          private static TreeCache cache;
      
          @Override
          public void invoke(Request request, Response response) throws IOException, ServletException {
              client = CuratorFrameworkFactory.builder().connectString("192.168.152.130:2181").connectionTimeoutMs(1000)
                      .retryPolicy(new ExponentialBackoffRetry(1000, 3)).build();
              client.start();
      
              try {
                  createZKNode(zkPath);
              } catch (Exception e1) {
                  System.out.println("=========== 搶奪成為master失敗,對master進行監(jiān)控!");
                  try {
                      addZKNodeListener(zkPath);
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              }
          }
      
          //創(chuàng)建臨時節(jié)點zkPath = "/Tomcat/ActiveLock"
          private void createZKNode(String path) throws Exception {
              client.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath(path);
              System.out.println("=========== 創(chuàng)建成功,節(jié)點當選為master");
          }
      
          //創(chuàng)建臨時節(jié)點zkPath = "/Tomcat/ActiveLock"失敗時對創(chuàng)建成功的節(jié)點(主master)進行監(jiān)聽
          private void addZKNodeListener(final String path) throws Exception {
              cache = new TreeCache(client, path);
              cache.start();
              cache.getListenable().addListener(new TreeCacheListener() {
                  public void childEvent(CuratorFramework client, TreeCacheEvent event) throws Exception {
                      if (event.getData() != null && event.getType() == TreeCacheEvent.Type.NODE_REMOVED) {
                          System.out.println("=========== master掛了,趕緊搶master權(quán)限!");
                          createZKNode(path);
                      }
                  }
              });
              
              System.out.println("=========== 已經(jīng)對master進行監(jiān)控");
          }
      }

      2.3  在eclipse里面將ZkTomcatMaster.java打包成zkTomcatMaster.jar放到兩個tomcat的lib目錄下

      E:\apache-tomcat-8.5.33\lib

      E:\software\apache-tomcat-7.0.63\lib

      同時還要向lib目錄下放入相關(guān)依賴的包:

      zkTomcatMaster.jar
      
      相關(guān)依賴的包:
      curator-client-4.0.0.jar
      curator-framework-4.0.0.jar
      curator-recipes-4.0.0.jar
      zookeeper-3.4.10.jar
      jline-0.9.94.jar
      netty-3.10.5.Final.jar
      slf4j-api-1.6.1.jar
      slf4j-log4j12-1.6.1.jar
      selenium-server-standalone-2.44.0.jar
      javax.servlet-api-3.1.0.jar
      tomcat-catalina-7.0.39.jar
      log4j-1.2.14.jar

       需要這些包的朋友私聊我哈!

      2.4 在兩個tomcat的server.xml里面加入如下配置:

      <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
          此處省略n行配置.....
          <Valve className="com.study.demo.election.ZkTomcatMaster"/>
       </Host>

       2.5 分別運行兩個tomcat查看效果

      先運行Tomcat8.5 8080

      再運行tomcat8080

      2.6 停掉Tomcat8.5 8080觀察tomcat8080的情況

      說明:這里是之前對Tomcat8.5 8080(主master的監(jiān)聽器作用了)

       2.7 再次啟動Tomcat8.5 8080

       

      二、ZK高級特性:基本模型

      1. Zookeeper的數(shù)據(jù)模型—節(jié)點

      樹模型(采用文件系統(tǒng)的形式,只不過去掉文件和目錄),叫數(shù)據(jù)節(jié)點。

      2. ACL—權(quán)限控制

      2.1 對于一個節(jié)點可操作的權(quán)限有5種

      READ(只讀)
      WRITE(只寫)
      CREATE(創(chuàng)建)
      DELETE(刪除)
      ADMIN(節(jié)點管理權(quán)限)
      All = READ|WRITE|CREATE|DELETE|ADMIN(所有權(quán)限)

      ACL機制:權(quán)限模式(Schema)、授權(quán)對象(ID)、權(quán)限(Permission)

      1)world:開放模式。意思所有人都可以訪問。
      2)IP: 針對某個IP開放權(quán)限
      3)digest:用戶/密碼模式
      4)Super:超級用戶模式

      2.2 設(shè)置節(jié)點權(quán)限

      使用密文語法:setAcl path digest|ip:username:password:c|d|r|w|a

      示例:
      1)用戶名和加密密碼的方式:

      創(chuàng)建test節(jié)點:

      create /test 123

      設(shè)置權(quán)限前先對密碼進行加密(執(zhí)行目錄在zk根目錄):

      cd /software/zookeeper-3.4.6
      java -cp ./zookeeper-3.4.6.jar:./lib/log4j-1.2.16.jar:./lib/slf4j-api-1.6.1.jar:./lib/slf4j-log4j12-1.6.1.jar org.apache.zookeeper.server.auth.DigestAuthenticationProvider user1:123456

      加密后的密文:

      user1:123456->user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s=

      設(shè)置權(quán)限:

      setAcl /test digest:user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s=:crwa

      使用明文增加認證才可以訪問:
      語法:

      addauth digest username:password

      eg:

      addauth digest user1:123456

      2)IP的方式 setAcl /test ip:192.168.152.1:cdra

      設(shè)置以后,只有192.168.152.1才能訪問

      3)使用明文設(shè)置權(quán)限(設(shè)置完以后可以直接使用 ls /test查看,不會像密文設(shè)置時查看提示沒有權(quán)限):

      語法:

      setAcl /path auth:username:password:cdrwa

      eg:

      刪除直接的/test節(jié)點并重新創(chuàng)建

      delete /test
      create /test 123

      設(shè)置權(quán)限

      setAcl /test auth:user1:123456:cdrwa

      說明:

      這里的刪除得使用delete命令,rmr命令刪除不了,會提示沒有權(quán)限

      2.3 查看節(jié)點的權(quán)限

      語法:

      getAcl path

      2.4 節(jié)點的版本

      執(zhí)行l(wèi)s2  /test可看到如下信息

      cversion 當前節(jié)點的權(quán)限
      dataversion 當前節(jié)點數(shù)據(jù)內(nèi)容的版本號
      aclVersion  就是ACL版本號

      說明:

      zookeeper版本的含義:版本指的是變更的次數(shù)。
      CAS(compare and swap)比較然后交換。-》比較數(shù)據(jù)的版本號以后交換數(shù)據(jù)

       

      posted @ 2018-09-11 19:19  小不點啊  閱讀(3840)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 同性男男黄gay片免费| 国产欧美日韩亚洲一区二区三区| 国产女人18毛片水真多1| 国产一区二区日韩经典| 民和| 成熟女人特级毛片www免费| 国产一区二区三区综合视频 | 五月天国产成人av免费观看| 起碰免费公开97在线视频| 房产| 久热99热这里只有精品| 亚洲欧美综合在线天堂| 鄂托克旗| 国产精品国三级国产专区| 国产一国产精品免费播放| 欧美性xxxxx极品| 4480yy亚洲午夜私人影院剧情| 一日本道伊人久久综合影| 欧美自拍另类欧美综合图片区| 亚洲 制服 丝袜 无码| 久久综合国产色美利坚| 成在线人永久免费视频播放| 午夜国产理论大片高清| av色蜜桃一区二区三区| 国产精品国产三级国AV| 欧美牲交a免费| 亚洲精品一区国产精品| 亚洲国产av一区二区| 亚洲丶国产丶欧美一区二区三区| 中国少妇人妻xxxxx| 成年男女免费视频网站| 人妻丝袜AV中文系列先锋影音| 公天天吃我奶躁我的在线观看| 国产成人理论在线视频观看| 中文字幕在线观看一区二区| 国产av午夜精品福利| 日韩成人高精品一区二区| 国产粉嫩美女一区二区三| 国产精品二区中文字幕| 伊人av超碰伊人久久久| 国产精品亚洲аv无码播放|