zookeeper分布式協調服務的使用一


Zookeeper是一個高性能,分布式的應用協調服務。


提供服務:

1、集群成員的管理(Group Membership)

2、分布式鎖(Locking)

3、選主(Leader Election)

4、同步(Synchronization)

5、發布/訂閱(Publisher/Subsriber)


一、數據模型

  • 分層結構
  • 屬性結構的中的每個節點叫做Znode
  •  每個Znode都有數據(byte[]類型),也可以有子節點
  • 節點路徑: 斜線分割(/zoo/duck);沒有相對路徑
  • 通過數據結構stat類存儲數據的變化,ACL的變化和時間戳
  • 數據發生變化時,版本號遞增
  • 可以對Znode中的數據進行讀寫操作


二、應用場景

1、數據發布/訂閱

      發布者將數據發布到zk的一個或者一系列的節點上,訂閱者進行數據訂閱,當有數據變化時,可以及時的得到數據變化的通知。


2、負載均衡

      本質是利用zookeeper的配置管理功能,步驟為:
      服務提供者把自己的域名及IP端口的映射注冊到zk中
      服務消費者通過域名從zk中獲取到對應的IP及端口,這個IP及端口有多個,只是獲取其中一個
      當服務這當及時,對於的域名與IP的對於就會減少一個映射


3、命名服務

      在分布式系統中,命名服務(Name Service)也就是重要的應用場景,zk命名服務提供的是資源定位,其本質也是通過zk的集中配置管理和查找


4、分布式協調/通知

      通過watcher的通知機制實現

      分布式鎖

      分布式事務


5、集群管理

      當前集群中的機器數量

      集群中機器的運行時狀態

      集群中節點的上下線操作

      集群節點的統一配置


6、Master選舉

      臨時節點

      順序節點

 

7、分布式鎖

       排它鎖

      共享鎖

 

8、分布式隊列

      FIFO機制


三、Zookeeper的機制

1、集群角色

      Leader:為客戶端提供讀寫服務

      Follow:提供讀服務,所有寫服務需要交給Leader角色,參與選舉

      Observe:提供讀服務,不參與選舉過程,一般是為了增強zk集群的讀請求的並發能力


2、會話(session)

      zk的客戶端與zk服務器之間的連接

      通過心跳檢測保持客戶端連接的存活度

      接受來自服務端的watch事件通知

      可以設置超時間


3、數據節點(Znode)

      zk樹形結構中的數據節點,用於存儲數據

      持久節點:一旦創建,除非主動調用刪除操作,否者一直存儲在zk上

      臨時節點:與客戶端的回話綁定,一旦客戶端回話消失,這個客戶端創建的臨時節點都會被移除

      SEQUENTIAL Znode:創建節點時,如果設置屬性SEQUENTIAL,則會自動在節點名后面追加一個整型數字


4、版本

      Version:當前Znode的版本

      Gversion:當前Znode的子節點的版本

      Aversion:當前Znode的ACL(訪問控制)版本


5、Watcher

      作用於Znode節點上

      多種事件通知:數據更新,子節點狀態等


6、ACL(Access Control Lists)權限控制

      CREATE:創建子節點的權限

      READ:獲取節點數據和子節點列表的權限

      WRITE:更新節點數據的權限

      DELETE:刪除子節點的權限

      ADMIN:設置節點ACL的權限

      其中:CREATE和DELETE是針對子節點的權限控制


四、zookeeper的配置部署(單機配置)

1、配置環境變量

      在/etc/profile文件中配置zk的環境變量

 

[html] view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. export JAVA_HOME=/usr/andy/jdk/jdk1.7.0_79  
  2. export ZOOKEEPER_HOME=/usr/andy/zookeeper/zookeeper-3.4.8  
  3. export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$ZOOKEEPER_HOME/bin:$PATH  
  4. export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar:$ZOOKEEPER_HOME/lib  

      生效配置:  source /etc/profile 

       

2、zookeeper配置

 

[html] view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. # The number of milliseconds of each tick  
  2. tickTime=2000  
  3. # The number of ticks that the initial   
  4. # synchronization phase can take  
  5. initLimit=10  
  6. # The number of ticks that can pass between   
  7. # sending a request and getting an acknowledgement  
  8. syncLimit=5  
  9. # the directory where the snapshot is stored.  
  10. # do not use /tmp for storage, /tmp here is just   
  11. # example sakes.  
  12. dataDir=/usr/andy/zookeeper/zookeeper-3.4.8/data  
  13. dataLogDir=/usr/andy/zookeeper/zookeeper-3.4.8/logs  
  14. # the port at which the clients will connect  
  15. clientPort=2181  
  16. # the maximum number of client connections.  
  17. # increase this if you need to handle more clients  
  18. #maxClientCnxns=60  
  19. #  
  20. # Be sure to read the maintenance section of the   
  21. # administrator guide before turning on autopurge.  
  22. #  
  23. # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance  
  24. #  
  25. # The number of snapshots to retain in dataDir  
  26. #autopurge.snapRetainCount=3  
  27. # Purge task interval in hours  
  28. # Set to "0" to disable auto purge feature  
  29. #autopurge.purgeInterval=1  

 

      1、將conf下的zoo_sample.cfg修改配置為zoo.cfg

      2、tickTime:默認2000ms,作為基本單元,用它的配屬來表示系統內部的時間間隔配置,比如:

             2*tickTime是客戶端回話的超時時間

             1*tickTime是客戶端與zk服務器端的心跳時間

      dataDir:用於配置存儲快照文件的目錄,如果沒有配置dataLogDir,事務日志也會存儲在該目錄【需要配置】,一般創建data文件夾

      dataLogDir:事務日志母了路徑,一般在zookeeper下創建logs文件夾

      clientPort:zk的運行端口,默認2181

 

3、啟動與關閉

       cd zookeeper-3.4.8/bin

      ./zkServer.sh  [start|start-foreground|stop|restart|status|upgrade|print-cmd]

 

 

[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. [root@localhost bin]# ./zkServer.sh  start  
  2. ZooKeeper JMX enabled by default  
  3. Using config: /usr/andy/zookeeper/zookeeper-3.4.8/bin/../conf/zoo.cfg  
  4. Starting zookeeper ... STARTED  
  5. [root@localhost bin]# netstat -anp | grep 2181  
  6. tcp6       0      0 :::2181                 :::*                    LISTEN      14562/java            
  7. [root@localhost bin]#   

啟動成功。


五、zookeeper集群的配置

      暫略。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM