從zookeeper的下載安裝到環境配置,輕松入門zookeeper!

      網友投稿 894 2025-04-03

      ZooKeeper技術介紹


      關于ZooKeeper的知識點總結了一個思維導圖分享給大家

      ZooKeeper的目標就是封裝好復雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。

      ZooKeeper包含一個簡單的原語集提供Java和C的接口。2021面試題整理

      ZooKeeper代碼版本中,提供了分布式獨享鎖、選舉、隊列的接口,代碼在zookeeper-3.4.3\src\recipes。其中分布鎖和隊列有Java和C兩個版本,選舉只有Java版本。

      主要作用是用來解決分布式應用中經常遇到的一些數據管理問題,如集群管理、統一命名管理、分布式配置管理、分布式消息隊列、分布式鎖、分布式通知協調

      官方網站:https://zookeeper.apache.org/

      zookeeper體系結構

      zk的集群中有一個Leader,有一個或多個follower,它們之間是相互通信的,然后還存在一個客戶端用來訪問zk服務器。

      服務器端具有fast fail特性,一旦主故障后,會選舉從成為新的主,主從模式是目前最常見的模式。

      zookeeper名字空間由節點NODE構成,類似于文件系統,其中各個節點相當于目錄和文件,通過路徑作為唯一標識,與文件系統不同的是,每個節點具有與之對應的數據內容,同時也可以具有子節點,它用來存儲協調數據,如狀態、配置、位置信息、每個節點存儲的數據量很小,KB級別.

      watches介紹

      zk對節點的增、刪、改、查都可以觸發監聽

      watch事件是一次性觸發器,當它監視的數據發生變化時,通知設置了該客戶端

      Zookeeper安裝布署

      四臺服務器

      zk-001 10.0.0.8

      zk-002 10.0.0.9

      zk-003 10.0.0.10

      zk-client 10.0.0.100

      下載安裝JDK環境

      tar zxf jdk-8u60-linux-x64.tar.gz

      mv jdk1.8.0_60 /usr/local/jdk

      export JAVA_HOME=/usr/local/jdk

      export CLASSPATH=.: J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAH OME/lib/dt.jar:JAVA_HOME/lib/tools.jar

      export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAH OME/bin:PATH

      source /etc/profile

      java -version

      [root@zk-001 ~]# java -version

      java version “1.8.0_60”

      Java? SE Runtime Environment (build 1.8.0_60-b27)

      Java HotSpot? 64-Bit Server VM (build 25.60-b23, mixed mode)

      下載安裝zookeeper

      wget http://www.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

      tar zxf zookeeper-3.4.6.tar.gz

      mv zookeeper-3.4.6 /usr/local/zookeeper

      [root@zk-001 ~]# cd /usr/local/zookeeper/

      配置環境變量

      export ZOOKEEPER_HOME=/usr/local/zookeeper

      export PATH= Z O O K E E P E R H O M E / b i n : ZOOKEEPER_HOME/bin: ZOOKEEPERH OME/bin:PATH

      source /etc/profile

      Zookeeper的配置

      三種配置模式

      1、偽分布模式

      2、完全分布式

      3、獨立模式

      獨立模式配置

      [root@zk-001 zookeeper]# cd conf/

      [root@zk-001 conf]# ll

      total 12

      -rw-rw-r-- 1 1000 1000 535 Feb 20 2014 configuration.xsl

      -rw-rw-r-- 1 1000 1000 2161 Feb 20 2014 log4j.properties

      從zookeeper的下載安裝到環境配置,輕松入門zookeeper!

      -rw-rw-r-- 1 1000 1000 922 Feb 20 2014 zoo_sample.cfg

      [root@zk-001 conf]# cp zoo_sample.cfg zoo.cfg

      [root@zk-001 conf]#vim zoo.cfg

      The number of milliseconds of each tick

      tickTime=2000 #心跳檢查周期(單位毫秒)

      the directory where the snapshot is stored.

      do not use /tmp for storage, /tmp here is just

      example sakes.

      dataDir=/tmp/zookeeper #存放數據目錄

      the port at which the clients will connect

      clientPort=2181 #供客戶端連接的端口

      集群模式配置

      tickTime=2000

      initLimit=10

      syncLimit=5

      //server.n=host:port1:port2

      數字N必須是myid中的值,Myid文件位于dataDIR目錄下,只能是一個n值

      //port1:leader端口,作為leader時,供follower連接的端口

      //port2:選舉端口,選舉leader時,供follower連接的端口

      server.1=s1:2888:3888

      server.2=s2:2888:3888

      server.3=s3:2888:3888

      zk處理集群故障的算法是2n+1,最好在奇數機器數布署,如果同臺服務器配置多實例就要注意端口沖突問題,可以寫成如下

      server.1=s1:2888:3888

      server.2=s2:2889:3889

      server.3=s3:2887:3887

      配置過程如下

      配置hosts文件

      vim /etc/hosts

      10.0.0.8 zk-001

      10.0.0.9 zk-002

      10.0.0.10 zk-003

      配置各服務器配置文件

      [root@zk-001 conf]# mkdir /tmp/zookeeper

      [root@zk-001 conf]# cd /tmp/zookeeper/

      [root@zk-001 zookeeper]# echo 8 >myid

      [root@zk-001 conf]# egrep -v “#|$” zoo.cfg

      tickTime=2000

      initLimit=10

      syncLimit=5

      dataDir=/tmp/zookeeper

      clientPort=2181

      server.8=zk-001:2888:3888

      server.9=zk-002:2888:3888

      server.10=zk-003:2888:3888

      [root@zk-002 ~]# mkdir /tmp/zookeeper

      [root@zk-002 ~]# cd /tmp/zookeeper/

      [root@zk-002 zookeeper]# echo 9 >myid

      [root@zk-002 zookeeper]# ll

      total 4

      -rw-r–r-- 1 root root 2 May 13 15:51 myid

      [root@zk-002 zookeeper]# cd /usr/local/zookeeper/conf/

      [root@zk-002 conf]# cp zoo_sample.cfg zoo.cfg

      [root@zk-002 conf]# vim zoo.cfg

      tickTime=2000

      initLimit=10

      syncLimit=5

      dataDir=/tmp/zookeeper

      clientPort=2181

      server.8=zk-001:2888:3888

      server.9=zk-002:2888:3888

      server.10=zk-003:2888:3888

      [root@zk-003 ~]# mkdir /tmp/zookeeper

      [root@zk-003 ~]# cd /tmp/zookeeper/

      [root@zk-003 zookeeper]# echo 10 >myid

      [root@zk-003 zookeeper]# cd /usr/local/zookeeper/conf/

      [root@zk-003 conf]# cp zoo_sample.cfg zoo.cfg

      [root@zk-003 conf]# vim zoo.cfg

      tickTime=2000

      initLimit=10

      syncLimit=5

      dataDir=/tmp/zookeeper

      clientPort=2181

      server.8=zk-001:2888:3888

      server.9=zk-002:2888:3888

      server.10=zk-003:2888:3888

      啟動服務

      [root@zk-001 bin]# zkServer.sh start

      JMX enabled by default

      Using config: /usr/local/zookeeper/bin/…/conf/zoo.cfg

      Starting zookeeper … STARTED

      [root@zk-002 bin]# zkServer.sh start

      JMX enabled by default

      Using config: /usr/local/zookeeper/bin/…/conf/zoo.cfg

      Starting zookeeper … STARTED

      [root@zk-003 bin]# zkServer.sh start

      JMX enabled by default

      Using config: /usr/local/zookeeper/bin/…/conf/zoo.cfg

      Starting zookeeper … STARTED

      查看狀態

      [root@zk-001 conf]# zkServer.sh status

      JMX enabled by default

      Using config: /usr/local/zookeeper/bin/…/conf/zoo.cfg

      Mode: follower

      [root@zk-002 conf]# zkServer.sh status

      JMX enabled by default

      Using config: /usr/local/zookeeper/bin/…/conf/zoo.cfg

      Mode: follower

      [root@zk-003 conf]# zkServer.sh status

      JMX enabled by default

      Using config: /usr/local/zookeeper/bin/…/conf/zoo.cfg

      Mode: leader

      可以看出已經選舉leader出來了,表明配置是正確的

      測試leader故障后切換情況

      [root@zk-003 conf]# jps

      2694 Jps

      2430 QuorumPeerMain

      [root@zk-003 conf]# kill 2430

      [root@zk-003 conf]# jps

      2724 Jps

      [root@zk-002 conf]# zkServer.sh status

      JMX enabled by default

      Using config: /usr/local/zookeeper/bin/…/conf/zoo.cfg

      Mode: follower

      [root@zk-001 conf]# zkServer.sh status

      JMX enabled by default

      Using config: /usr/local/zookeeper/bin/…/conf/zoo.cfg

      Mode: leader

      可以看出zk-001這臺服務器被選舉成新的leader了

      Zookeeper客戶端四字符指令

      conf 配置信息

      cons 連接信息

      dump 未處理會話節點

      envi 環境信息

      reqs 未處理請求

      stat 統計信息

      wchs 服務器watch的詳細信息

      wchp 列出指定路徑下服務器信息

      [root@zk-003 ~]# echo conf | nc 10.0.0.8 2181

      clientPort=2181

      dataDir=/tmp/zookeeper/version-2

      dataLogDir=/tmp/zookeeper/version-2

      tickTime=2000

      maxClientCnxns=60

      minSessionTimeout=4000

      maxSessionTimeout=40000

      serverId=8

      initLimit=10

      syncLimit=5

      electionAlg=3

      electionPort=3888

      quorumPort=2888

      peerType=0

      [root@zk-003 ~]# echo envi | nc 10.0.0.8 2181

      Environment:

      zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT

      host.name=zk-001

      java.version=1.8.0_121

      java.vendor=Oracle Corporation

      java.home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el6_8.x86_64/jre

      java.class.path=/usr/local/zookeeper/bin/…/build/classes:/usr/local/zookeeper/bin/…/build/lib/.jar:/usr/local/zookeeper/bin/…/lib/slf4j-log4j12-1.6.1.jar:/usr/local/zookeeper/bin/…/lib/slf4j-api-1.6.1.jar:/usr/local/zookeeper/bin/…/lib/netty-3.7.0.Final.jar:/usr/local/zookeeper/bin/…/lib/log4j-1.2.16.jar:/usr/local/zookeeper/bin/…/lib/jline-0.9.94.jar:/usr/local/zookeeper/bin/…/zookeeper-3.4.6.jar:/usr/local/zookeeper/bin/…/src/java/lib/.jar:/usr/local/zookeeper/bin/…/conf:

      java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

      java.io.tmpdir=/tmp

      java.compiler=

      os.name=Linux

      os.arch=amd64

      os.version=2.6.32-504.el6.x86_64

      user.name=root

      user.home=/root

      user.dir=/usr/local/zookeeper/conf

      [root@zk-003 ~]# echo stat | nc 10.0.0.8 2181

      Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMT

      Clients:

      /10.0.0.10:411920

      Latency min/avg/max: 0/0/0

      Received: 4

      Sent: 3

      Connections: 1

      Outstanding: 0

      Zxid: 0x200000000

      Mode: leader

      Node count: 4

      Zookeeper客戶端命令

      通過zkCli.sh 連接服務器

      zkCli.sh -server zk-001:2181

      -server 10.0.0.9:2181

      1

      [root@zk-001 ~]# zkCli.sh -server zk-002:2181

      Connecting to zk-002:2181

      WATCHER::

      WatchedEvent state:SyncConnected type:None path:null

      [zk: zk-002:2181(CONNECTED) 0] h ##幫助命令

      ZooKeeper -server host:port cmd args

      stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      [zk: zk-002:2181(CONNECTED) 1] ls /

      列出目錄下內容

      [zookeeper]

      [zk: zk-002:2181(CONNECTED) 2] ls /zookeeper

      [quota]

      [zk: zk-002:2181(CONNECTED) 3] ls /zookeeper/quota

      []

      [zk: zk-002:2181(CONNECTED) 4] create /root testfile

      創建目錄及數據

      Created /root

      [zk: zk-002:2181(CONNECTED)5]get /root #獲取數據

      testfile

      cZxid = 0x200000002

      ctime = Sat May 13 20:09:52 CST 2017

      mZxid = 0x200000002

      mtime = Sat May 13 20:09:52 CST 2017

      pZxid = 0x200000002

      cversion = 0

      dataVersion = 0

      aclVersion = 0

      ephemeralOwner = 0x0

      dataLength = 8

      numChildren = 0

      [zk: zk-002:2181(CONNECTED) 6] set /root testfile-001

      cZxid = 0x200000002

      ctime = Sat May 13 20:09:52 CST 2017

      mZxid = 0x200000003

      mtime = Sat May 13 21:04:17 CST 2017

      pZxid = 0x200000002

      cversion = 0

      dataVersion = 1

      aclVersion = 0

      ephemeralOwner = 0x0

      dataLength = 12

      numChildren = 0

      需要注意的是ZK是不能一次創建多級節點的

      [zk: zk-002:2181(CONNECTED) 7] create /root/s1/s1-1

      [zk: zk-002:2181(CONNECTED) 8] ls /root #提示是空

      []

      [zk: zk-002:2181(CONNECTED) 9] create /root/s1 s1-data

      Created /root/s1

      [zk: zk-002:2181(CONNECTED) 10] create /root/s2 s2-data

      Created /root/s2

      [zk: zk-002:2181(CONNECTED) 11] create /root/s3 s3-data

      Created /root/s3

      [zk: zk-002:2181(CONNECTED) 13] ls /root

      [s3, s1, s2]

      查看狀態

      [zk: zk-002:2181(CONNECTED) 14] stat /root

      cZxid = 0x200000002

      ctime = Sat May 13 20:09:52 CST 2017

      mZxid = 0x200000003

      mtime = Sat May 13 21:04:17 CST 2017

      pZxid = 0x200000006

      cversion = 3

      dataVersion = 1

      aclVersion = 0

      ephemeralOwner = 0x0

      dataLength = 12

      numChildren = 3

      刪除目錄

      [zk: zk-002:2181(CONNECTED) 15] delete /root/s3

      [zk: zk-002:2181(CONNECTED) 16] ls /root

      [s1, s2]

      斷開連接

      [zk: zk-002:2181(CONNECTED) 17] close

      2017-05-13 21:13:00,603 [myid:] - INFO[main:ZooKeeper@684] - Session: 0x95c0122efa50000 closed

      2017-05-13 21:13:00,604 [myid:] - INFO[main-EventThread:ClientCnxn$EventThread@512] - EventThread shut down

      重新連接

      由于ZK服務器間的數據是一致的,因此這次我連接其它服務器

      [zk: zk-002:2181(CLOSED) 18] connect zk-001:2181

      [zk: zk-001:2181(CONNECTED) 19] get /root

      testfile-001

      cZxid = 0x200000002

      ctime = Sat May 13 20:09:52 CST 2017

      mZxid = 0x200000003

      mtime = Sat May 13 21:04:17 CST 2017

      pZxid = 0x200000007

      cversion = 4

      dataVersion = 1

      aclVersion = 0

      ephemeralOwner = 0x0

      dataLength = 12

      numChildren = 2

      [zk: zk-001:2181(CONNECTED) 20] get /root/s1

      s1-data

      cZxid = 0x200000004

      ctime = Sat May 13 21:07:42 CST 2017

      mZxid = 0x200000004

      mtime = Sat May 13 21:07:42 CST 2017

      pZxid = 0x200000004

      cversion = 0

      dataVersion = 0

      aclVersion = 0

      ephemeralOwner = 0x0

      dataLength = 7

      numChildren = 0

      最后

      我這邊整理了一份:zk相關資料文檔、Spring全家桶系列,Java的系統化資料,(包括Java核心知識點、面試專題和20年最新的互聯網真題、電子書等)有需要的朋友可以關注公眾號【程序媛小琬】即可獲取。

      ZooKeeper 分布式

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel2010如何轉換word(怎樣轉換成excel)
      下一篇:寵物管理系統(寵物信息全面掌握)
      相關文章
      亚洲国产精品第一区二区三区| 亚洲精品一卡2卡3卡四卡乱码| 亚洲第一成人在线| 亚洲VA中文字幕无码毛片 | 国产成人亚洲精品无码AV大片| 亚洲国产成人精品激情| 亚洲乱码一二三四区麻豆| 亚洲伊人久久精品影院| 亚洲人成人无码网www电影首页| 国产91精品一区二区麻豆亚洲 | 亚洲最大的成网4438| 亚洲国产美国国产综合一区二区| 久久精品亚洲综合| 久久夜色精品国产噜噜噜亚洲AV| 久久亚洲国产精品一区二区| 在线亚洲97se亚洲综合在线| 亚洲精品无码久久久久| 亚洲乱码无码永久不卡在线| 国产精品亚洲аv无码播放| 亚洲国产精品自在在线观看| 亚洲一本综合久久| 亚洲国产美女福利直播秀一区二区| 亚洲网站免费观看| 亚洲AV无码一区二区三区人| 亚洲白嫩在线观看| 国产91在线|亚洲| 亚洲av无码一区二区三区在线播放| 亚洲精品无码av中文字幕| 亚洲av中文无码字幕色不卡| 国产成人亚洲午夜电影| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲制服中文字幕第一区| 亚洲精品成人图区| 亚洲国产激情在线一区| 亚洲成在人线aⅴ免费毛片| 亚洲精品乱码久久久久久不卡| 国产gv天堂亚洲国产gv刚刚碰| 亚洲爆乳无码一区二区三区| 亚洲美女视频网站| 亚洲综合国产成人丁香五月激情| 亚洲AV永久无码精品放毛片 |