1. 程式人生 > >zookeeper 叢集安裝(單點與分散式成功安裝)摘錄

zookeeper 叢集安裝(單點與分散式成功安裝)摘錄

ZooKeeper是一個分散式開源框架,提供了協調分散式應用的基本服務,它向外部應用暴露一組通用服務——分散式同步(Distributed Synchronization)、命名服務(Naming Service)、叢集維護(Group Maintenance)等,簡化分散式應用協調及其管理的難度,提供高效能的分散式服務。ZooKeeper本身可以以Standalone模式安裝執行,不過它的長處在於通過分散式ZooKeeper叢集(一個Leader,多個Follower),基於一定的策略來保證ZooKeeper叢集的穩定性和可用性,從而實現分散式應用的可靠性。

有關ZooKeeper的介紹,網上很多,也可以參考文章後面,我整理的一些相關連結。

下面,我們簡單說明一下ZooKeeper的配置。

ZooKeeper Standalone模式

從Apache網站上(zookeeper.apache.org)下載ZooKeeper軟體包,我選擇了3.3.4版本的(zookeeper-3.3.4.tar.gz),在一臺Linux機器上安裝非常容易,只需要解壓縮後,簡單配置一下即可以啟動ZooKeeper伺服器程序。

將zookeeper-3.3.4/conf目錄下面的 zoo_sample.cfg修改為zoo.cfg,配置檔案內容如下所示:

  1. tickTime=2000  
  2. dataDir=/home/hadoop/storage/zookeeper  
  3. clientPort=2181  
  4. initLimit=5  
  5. syncLimit=2  
上面各個配置引數的含義也非常簡單,引用如下所示:
  1. tickTime —— the basic time unit in milliseconds used by ZooKeeper. It is used to do heartbeats and the minimum session timeout will be twice the tickTime.  
  2. dataDir —— the location to store the in-memory database snapshots and, unless specified otherwise, the transaction log of updates to the database.  
  3. clientPort —— the port to listen for client connections  
下面啟動ZooKeeper伺服器程序:
  1. cd zookeeper-3.3.4/  
  2. bin/zkServer.sh start  
通過jps命令可以檢視ZooKeeper伺服器程序,名稱為QuorumPeerMain。

在客戶端連線ZooKeeper伺服器,執行如下命令:

  1. bin/zkCli.sh -server dynamic:2181  
上面dynamic是我的主機名,如果在本機執行,則執行如下命令即可:
  1. bin/zkCli.sh  
客戶端連線資訊如下所示: 接著,可以使用help檢視Zookeeper客戶端可以使用的基本操作命令。



ZooKeeper Distributed模式

ZooKeeper分散式模式安裝(ZooKeeper叢集)也比較容易,這裡說明一下基本要點。

首先要明確的是,ZooKeeper叢集是一個獨立的分散式協調服務叢集,“獨立”的含義就是說,如果想使用ZooKeeper實現分散式應用的協調與管理,簡化協調與管理,任何分散式應用都可以使用,這就要歸功於Zookeeper的資料模型(Data Model)和層次名稱空間(Hierarchical Namespace)結構,詳細可以參考http://zookeeper.apache.org/doc/trunk/zookeeperOver.html。在設計你的分散式應用協調服務時,首要的就是考慮如何組織層次名稱空間。

下面說明分散式模式的安裝配置,過程如下所示:

第一步:主機名稱到IP地址對映配置

ZooKeeper叢集中具有兩個關鍵的角色:Leader和Follower。叢集中所有的結點作為一個整體對分散式應用提供服務,叢集中每個結點之間都互相連線,所以,在配置的ZooKeeper叢集的時候,每一個結點的host到IP地址的對映都要配置上叢集中其它結點的對映資訊。

例如,我的ZooKeeper叢集中每個結點的配置,以slave-01為例,/etc/hosts內容如下所示:

  1. 192.168.0.179   slave-01  
  2. 192.168.0.178   slave-02  
  3. 192.168.0.177   slave-03  

ZooKeeper採用一種稱為Leader election的選舉演算法。在整個叢集執行過程中,只有一個Leader,其他的都是Follower,如果ZooKeeper叢集在執行過程中Leader出了問題,系統會採用該演算法重新選出一個Leader。因此,各個結點之間要能夠保證互相連線,必須配置上述對映。

第二步:修改ZooKeeper配置檔案

在其中一臺機器(slave-01)上,解壓縮zookeeper-3.3.4.tar.gz,修改配置檔案conf/zoo.cfg,內容如下所示:

  1. tickTime=2000  
  2. dataDir=/home/hadoop/storage/zookeeper  
  3. clientPort=2181  
  4. initLimit=5  
  5. syncLimit=2  
  6. server.1=slave-01:2888:3888  
  7. server.2=slave-02:2888:3888  
  8. server.3=slave-03:2888:3888  
上述配置內容說明,可以參考http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html#sc_RunningReplicatedZooKeeper

第三步:遠端複製分發安裝檔案

上面已經在一臺機器slave-01上配置完成ZooKeeper,現在可以將該配置好的安裝檔案遠端拷貝到叢集中的各個結點對應的目錄下:

  1. cd /home/hadoop/installation/  
  2. scp -r zookeeper-3.3.4/ [email protected]:/home/hadoop/installation/  
  3. scp -r zookeeper-3.3.4/ [email protected]:/home/hadoop/installation/  
第四步:設定myid

在我們配置的dataDir指定的目錄下面,建立一個myid檔案,裡面內容為一個數字,用來標識當前主機,conf/zoo.cfg檔案中配置的server.X中X為什麼數字,則myid檔案中就輸入這個數字,例如:

  1. [email protected]:~/installation/zookeeper-3.3.4$ echo "1" > /home/hadoop/storage/zookeeper/myid  
  2. [email protected]:~/installation/zookeeper-3.3.4$ echo "2" > /home/hadoop/storage/zookeeper/myid  
  3. [email protected]:~/installation/zookeeper-3.3.4$ echo "3" > /home/hadoop/storage/zookeeper/myid  
按照上述進行配置即可。

第五步:啟動ZooKeeper叢集

在ZooKeeper叢集的每個結點上,執行啟動ZooKeeper服務的指令碼,如下所示:

  1. [email protected]:~/installation/zookeeper-3.3.4$ bin/zkServer.sh start  
  2. [email protected]:~/installation/zookeeper-3.3.4$ bin/zkServer.sh start  
  3. [email protected]:~/installation/zookeeper-3.3.4$ bin/zkServer.sh start  
以結點slave-01為例,日誌如下所示:
  1. [email protected]:~/installation/zookeeper-3.3.4$ tail -500f zookeeper.out   
  2. 2012-01-08 06:51:19,117 - INFO  [main:[email protected]] - Reading configuration from: /home/hadoop/installation/zookeeper-3.3.4/bin/../conf/zoo.cfg  
  3. 2012-01-08 06:51:19,133 - INFO  [main:[email protected]] - Defaulting to majority quorums  
  4. 2012-01-08 06:51:19,167 - INFO  [main:[email protected]] - Starting quorum peer  
  5. 2012-01-08 06:51:19,227 - INFO  [main:[email protected]] - binding to port 0.0.0.0/0.0.0.0:2181  
  6. 2012-01-08 06:51:19,277 - INFO  [main:[email protected]] - tickTime set to 2000  
  7. 2012-01-08 06:51:19,278 - INFO  [main:[email protected]] - minSessionTimeout set to -1  
  8. 2012-01-08 06:51:19,279 - INFO  [main:[email protected]] - maxSessionTimeout set to -1  
  9. 2012-01-08 06:51:19,281 - INFO  [main:[email protected]] - initLimit set to 5  
  10. 2012-01-08 06:51:19,347 - INFO  [Thread-1:[email protected]] - My election bind port: 3888  
  11. 2012-01-08 06:51:19,393 - INFO  [QuorumPeer:/0:0:0:0:0:0:0:0:2181:[email protected]] - LOOKING  
  12. 2012-01-08 06:51:19,396 - INFO  [QuorumPeer:/0:0:0:0:0:0:0:0:2181:[email protected]] - New election. My id =  1, Proposed zxid = 0  
  13. 2012-01-08 06:51:19,400 - INFO  [WorkerReceiver Thread:[email protected]] - Notification: 1 (n.leader), 0 (n.zxid), 1 (n.round), LOOKING (n.state), 1 (n.sid), LOOKING (my state)  
  14. 2012-01-08 06:51:19,416 - WARN  [WorkerSender Thread:[email protected]] - Cannot open channel to 2 at election address slave-02/192.168.0.178:3888  
  15. java.net.ConnectException: Connection refused  
  16.         at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)  
  17.         at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)  
  18.         at sun.nio.ch.SocketAdaptor.connect(SocketAdaptor.java:100)  
  19.         at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:371)  
  20.         at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:340)  
  21.         at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:360)  
  22.         at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:333)  
  23.         at java.lang.Thread.run(Thread.java:662)  
  24. 2012-01-08 06:51:19,420 - WARN  [WorkerSender Thread:[email protected]] - Cannot open channel to 3 at election address slave-03/192.168.0.177:3888  
  25. java.net.ConnectException: Connection refused  
  26.         at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)  
  27.         at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)  
  28.         at sun.nio.ch.SocketAdaptor.connect(SocketAdaptor.java:100)  
  29.         at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:371)  
  30.         at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:340)  
  31.         at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:360)  
  32.         at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:333)  
  33.         at java.lang.Thread.run(Thread.java:662)  
  34. 2012-01-08 06:51:19,612 - WARN  [QuorumPeer:/0:0:0:0:0:0:0:0:2181:[email protected]] - Cannot open channel to 2 at election address slave-02/192.168.0.178:3888  
  35. java.net.ConnectException: Connection refused  
  36.         at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)  
  37.         at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)  
  38.         at sun.nio.ch.SocketAdaptor.connect(SocketAdaptor.java:100)  
  39.         at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:371)  
  40.         at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:404)  
  41.         at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:688)  
  42.         at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:622)  
  43. 2012-01-08 06:51:19,615 - WARN  [QuorumPeer:/0:0:0:0:0:0:0:0:2181:[email protected]] - Cannot open channel to 3 at election address slave-03/192.168.0.177:3888  
  44. java.net.ConnectException: Connection refused  
  45.         at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)  
  46.         at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)  
  47.         at sun.nio.ch.SocketAdaptor.connect(SocketAdaptor.java:100)  
  48.         at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:371)  
  49.         at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:404)  
  50.         at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:688)  
  51.         at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:622)  
  52. 2012-01-08 06:51:19,616 - INFO  [QuorumPeer:/0:0:0:0:0:0:0:0:2181:[email protected]] - Notification time out: 400  
  53. 2012-01-08 06:51:20,019 - WARN  [QuorumPeer:/0:0:0:0:0:0:0:0:2181:[email protected]] - Cannot open channel to 2 at election address slave-02/192.168.0.178:3888  
  54. java.net.ConnectException: Connection refused  
  55.         at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)  
  56.         at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)  
  57.         at sun.nio.ch.SocketAdaptor.connect(SocketAdaptor.java:100)  
  58.         at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:371)  
  59.         at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:404)  
  60.         at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:688)  
  61.         at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:622)  
  62. 2012-01-08 06:51:20,021 - WARN  [QuorumPeer:/0:0:0:0:0:0:0:0:2181:[email protected]] - Cannot open channel to 3 at election address slave-03/192.168.0.177:3888  
  63. java.net.ConnectException: Connection refused  
  64.         at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)  
  65.         at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)  
  66.         at sun.nio.ch.SocketAdaptor.connect(SocketAdaptor.java:100)  
  67.         at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:371)  
  68.         at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:404)  
  69.         at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:688)  
  70.         at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:622)  
  71. 2012-01-08 06:51:20,022 - INFO  [QuorumPeer:/0:0:0:0:0:0:0:0:2181:[email protected]] - Notification time out: 800  
  72. 2012-01-08 06:51:20,825 - WARN  [QuorumPeer:/0:0:0:0:0:0:0:0:2181:[email protected]] - Cannot open channel to 2 at election address slave-02/192.168.0.178:3888  
  73. java.net.ConnectException: Connection refused  
  74.         at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)  
  75.         at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)  
  76.         at sun.nio.ch.SocketAdaptor.connect(SocketAdaptor.java:100)  
  77.         at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:371)  
  78.         at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:404)  
  79.         at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:688)  
  80. 相關推薦

    zookeeper 叢集安裝分散式成功安裝摘錄

    ZooKeeper是一個分散式開源框架,提供了協調分散式應用的基本服務,它向外部應用暴露一組通用服務——分散式同步(Distributed Synchronization)、命名服務(Naming Service)、叢集維護(Group Maintenance)等,簡

    hdu 1166 敵兵佈陣 更新線段樹模板

    題目連結:哆啦A夢傳送門 題解:   參考連結:https://www.cnblogs.com/TenosDoIt/p/3453089.html #include<cstdio> #include<algorithm> #include<c

    二維樹狀陣列模板更新,區間求和以HDU 2642為例

    題目:點選開啟連結 題意:輸入B後輸入座標,表示對應的點的燈變亮,輸入D後輸入座標表示對應的點燈滅,輸入Q後輸入一個矩形的左下角和右上角 輸出矩形內亮著的等的個數,注意燈亮過不能再亮,燈關了不能再關,所以用陣列標記,樹狀陣列模板中元素下標均從1開始,題目從0開始所以加1。

    樹狀陣列專題 更新、區間求和 + 區間更新、查詢 + 區間更新、區間求和差分思想)

                                                                                                樹狀陣列專題 一直感覺樹狀陣列用處比較小而且侷限、因為最基本的用法就是單點更新和區間求和、

    線段樹版更新,區間查詢

    #define lid (id << 1) #define rid (id << 1 | 1) const int N = 100005; struct Segtree {

    Intellij IDEA下載、註冊、安裝、外掛安裝scala外掛SBT外掛安裝和建立scala專案

    文中參考部落格: http://blog.csdn.net/u014273195/article/details/70854522 http://blog.csdn.net/spider_zhcl/article/details/48737413 http://blog.c

    線段樹修改,區間查詢

    /* * 線段樹模板 * 單點修改,區間查詢 */ #include<iostream> #include<cstdio> using namespace std; typedef long long LL; const int M

    線段樹詳解更新成段更新\區間更新操作

          本文純屬原創,轉載請註明出處,謝謝。         距離第一次接觸線段樹已經一年多了,再次參加ACM暑假集訓,這一次輪到我們這些老傢伙們給學弟學妹們講解線段樹了,所以就自己重新把自己做過的題目看

    HDU 1166 敵兵佈陣【線段樹更新區間求和

    C國的死對頭A國這段時間正在進行軍事演習,所以C國間諜頭子Derek和他手下Tidy又開始忙乎了。A國在海岸線沿直線佈置了N個工兵營地,Derek和Tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數C國都掌握的一清二楚,每個工兵營地的人數都有可能發生

    在Linux安裝Memcached基於記憶體的快取及加速叢集部署防止現象

    關於實現 memcached 快取叢集可以有多種方式,一種是使用 Repcached(memcached同步補丁),Repcached 優點主要是資料冗餘,兩臺 memcached 都可以進行讀寫操作,缺點是隻支援單對單,指支援 1.2.x 版本,所以受到的侷限性

    elasticsearch的節點和分散式安裝及其操作使用命令和使用程式碼

    關於安裝是在另一個部落格上面寫的 不知道怎麼同步 有興趣的可以點選連結去看下 在文章開始之前、先明確三個概念 1、索引 2、型別 3、文件 對比於資料庫中,索引就是一個數據庫、型別就是資料庫中的某張表、文件也就是表中具體的記錄。抽象點來看,索引抽象成一個人、人又分為男人和女人(就是型別)、然後男人有姓名、年

    分散式安裝HADOOP

    安裝 建立檔案儲存目錄 先切換到hadoopAdmin,然後建立資料夾儲存Hadoop的臨時檔案 $su hadoopAdmin $sudo mkdir -p /app/hadoop/tmp $sudo mkdir -p /app/hadoop/data/na

    rabbitMQ叢集安裝機器多例項

     一、緣由        因為資源的有限等原因,可能無法使用多個機器來搭建叢集,所以需要使用在一臺機器上搭建一個多例項rabbitMQ服務節點。  二、操作    1、前期準備    

    線段樹更新區域更新

    線段樹 實在不好意思不寫了哈哈哈啊哈。 線段樹主要是解決一些大量操作區間並且維護區間的題目(維護的區間要有加和性)。 線段樹核心函式有以下幾個 pushup()(主要用來向上跟新節點資訊) pushdown()(用來向下更新來不及更新的節點) quer

    zookeeper叢集部署分散式

    描述 ZooKeeper可以用來保證資料在zookeeper叢集之間的資料的事務一致性。 如何搭建ZooKeeper叢集 1.         Zookeeper服務叢集規模不小於三個節點,要求各

    序【2】zookeeper節點搭建節點模式 || docker搭建zookeeper叢集 [bridge模式|host模式]

    分散式理論知識 CAP原理 C(Consistency):一致性,這裡指的是有效時間內資料的強一致性。 A(Availability):可用性,要求即便系統故障,也能在有效的時間內返回結果(成功或失敗) P(Partition tolera

    Redis分布式緩存安裝節點

    redis分布式緩存安裝(單節點)Redis分布式緩存安裝(單節點)Redis官網:http://redis.io獨立緩存服務器:IP:xxx.xxx.xxx.xxx安裝環境:CentOS 6.6Redis 版本:redis-3.0(因為 Redis3.0 在集群和性能提升方面的特性,rc 版為正式版的候選版

    洛谷 P3374 【模板】樹狀數組 1 如題修改+區間查詢

    ace hold reg gif sticky too aps urn cnblogs P3374 【模板】樹狀數組 1 時空限制1s / 128MB 題目描述 如題,已知一個數列,你需要進行下面兩種操作: 1

    Buy Tickets線段樹更新,逆向思維

    fin eve lang sum free orz cst ssi -s 題目大意:有n個的排隊,每一個人都有一個val來對應,每一個後來人都會插入當前隊伍的某一個位置pos。要求把隊伍最後的狀態輸出。 個人心得:哈哈,用鏈表寫了下,果不其然超時了,後面轉念一想要用靜態數組

    線段樹,樹狀數組操作

    容易 當前 AI CA src http 開始 搜索 異或運算 考慮一個無限完整的二叉搜索樹(參見下圖),節點中的數字是1,2,3,....在根節點為X的子樹中,我們可以通過重復獲得該子樹中的最小數量沿著左邊的節點往下走,直到最後一層,我們也可以通過沿著右邊的節點找到最大數