日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

zookeeper 默认端口_ZooKeeper知识点汇总

發布時間:2024/9/27 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 zookeeper 默认端口_ZooKeeper知识点汇总 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、ZooKeeper簡介

1. ZooKeeper是什么

? Apache ZooKeeper是一個開源的分布式服務框架,為分布式應用提供協調服務,用來解決分布式應用中的數據管理問題,如:配置管理、域名服務、分布式同步、集群管理等

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

ZooKeeper視頻教程 http://edu.51cto.com/course/16190.html

2. ZooKeeper組成

? 主要包括兩部分:文件系統、通知機制

2.1 文件系統

? ZooKeeper維護一個類似Linux文件系統的數據結構,用于存儲數據

  • 數據模型結構是一種樹形結構,由許多節點構成
  • 每個節點叫做ZNode(ZooKeeper Node)
  • 每個節點對應一個唯一路徑,通過該路徑來標識節點,如 /app1/p_2
  • 每個節點只能存儲大約1M的數據

? 節點類型有四種:

  • 持久化目錄節點 persistent
  • 客戶端與服務器斷開連接,該節點仍然存在
  • 持久化順序編號目錄節點 persistent_sequential
  • 客戶端與服務器斷開連接,該節點仍然存在,此時節點會被順序編號,如:000001、000002.....
  • 臨時目錄節點 ephemeral
  • 客戶端與服務器斷開連接,該節點會被刪除
  • 臨時順序編號目錄節點 ephemeral_sequential
  • 客戶端與服務器斷開連接,該節點會被刪除,此時節點會被順序編號,如:000001、000002.....

2.2 通知機制

? ZooKeeper是一個基于觀察者模式設計的分布式服務管理框架

  • ZooKeeper負責管理和維護項目的公共數據,并授受觀察者的注冊(訂閱)
  • 一旦這些數據發生變化,ZooKeeper就會通知已注冊的觀察者
  • 此時觀察者就可以做出相應的反應
  • ? 簡單來說,客戶端注冊監聽它關心的目錄節點,當目錄節點發生變化時,ZooKeeper會通知客戶端

    ? ZooKeeper是一個訂閱中心(注冊中心)

    3. 應用場景

    3.1 配置管理

    ? 場景:集群環境、服務器的許多配置都是相同的,如:數據庫連接信息,當需要修改這些配置時必須同時修改每臺服務器,很麻煩

    ? 解決:把這些配置全部放到ZooKeeper上,保存在ZooKeeper的某個目錄節點中,然后所有的應用程序(客戶端)對這個目錄節點進行監視Watch,一旦配置信息發生變化,ZooKeeper會通知每個客戶端,然后從ZooKeeper獲取新的配置信息,并應用到系統中。

    3.2 集群管理

    ? 場景:集群環境下,如何知道有多少臺機器在工作?是否有機器退出或加入?需要選舉一個總管master,讓總管來管理集群

    ? 解決:在父目錄GroupMembers下為所有機器創建臨時目錄節點,然后監聽父目錄節點的子節點變化,一旦有機器掛掉,該機器與ZooKeeper的連接斷開,其所創建的臨時目錄節點被刪除,所有其他機器都會收到通知。當有新機器加入時也是同樣的道理。

    ? 選舉master:為所有機器創建臨時順序編號目錄節點,給每臺機器編號,然后每次選取編號最小的機器作為master

    3.3 負載均衡

    ? ZooKeeper本身是不提供負載均衡策略的,需要自己實現,所以準確的說,是在負載均衡中使用ZooKeeper來做集群的協調(也稱為軟負載均衡)

    ? 實現思路:

  • 將ZooKeeper作為服務的注冊中心,所有服務器在啟動時向注冊中心登陸自己能夠提供的服務
  • 服務的調用者到注冊中心獲取能夠提供所需要服務的服務器列表,然后自己根據負載均衡算法,從中選取一臺服務器進行連接
  • 當服務器列表發生變化時,如:某臺服務器宕機下線,或新機器加入,ZooKeeper會自動通知調用者重新獲取服務列表
  • ? 實際上利用了ZooKeeper的特性,將ZooKeeper用為服務的注冊和變更通知中心

    二、ZooKeeper安裝

    1. 安裝

    ? ZooKeeper一般都運行在Linux平臺

    ? 步驟:

  • 解壓zookeeper-3.4.13.tar.gz
  • cd ~/softwaretar -zxf zookeeper-3.4.13.tar.gz
  • 配置
  • # 創建存放數據文件的目錄cd zookeeper-3.4.13/mkdir data# 創建配置文件cd confcp zoo_sample.cfg zoo.cfg # 默認使用的是zoo.cfg,名稱固定# 修改配置文件vi zoo.cfgdataDir=../data # 指定數據存放目錄
  • 啟動zookeeper
  • cd bin./zkServer.sh start | stop | status | restart # 啟動|停止|查看狀態|重啟
  • 客戶端連接zookeeper
  • ./zkCli.sh # 啟動客戶端,默認連接本機的2181端口或./zkCli.sh -server 服務器地址:端口 # 連接指定主機、指定端口的zookeeperquit # 退出客戶端

    2. 配置文件

    配置項含義說明tickTime=2000心跳時間維持心跳的時間間隔,單位是毫秒
    在zookeeper中所有的時間都是以這個時間為基礎單元,進行整數倍配置initLimit=10初始通信時限用于zookeeper集群,此時有多臺zookeeper服務器,其中一個為Leader,其他都為FollowersyncLimit=5同步通信時限在運行時Leader通過心跳檢測與Follower進行通信,如果超過syncLimit*tickTime時間還未收到響應,則認為該Follower已經宕機dataDir=../data存儲數據的目錄數據文件也稱為snapshot快照文件clientPort=2181端口號默認為2181maxClientCnxns=60單個客戶端的最大連接數限制默認為60,可以設置為0,表示沒有限制autopurge.snapRetainCount=3保留文件的數量默認3個autopurge.purgeInterval=1自動清理快照文件和事務日志的頻率默認為0,表示不開啟自動清理,單位是小時dataLogDir=存儲日志的目錄未指定時日志文件也存放在dataDir中,為了性能最大化,一般建議把dataDir和dataLogDir分別放到不同的磁盤上

    三、客戶端操作

    1. 常用命令

    命令作用說明help查看幫助查看所有操作命令ls 節點路徑查看指定節點下的內容 ls2 節點路徑查看指定節點的詳細信息查看所有子節點和當前節點的狀態create 節點路徑 內容創建普通節點如果內容中有空格,則需要使用對雙引號引起來get 節點路徑獲取節點中的值 create -e 節點路徑 內容創建臨時節點當連接斷開后,節點會被自動刪除create -s 節點路徑 內容創建順序編號節點即帶序號的節點delete 節點路徑刪除節點只能刪除空節點,即不能有子節點rmr 節點路徑遞歸刪除節點remove recursionstat 節點路徑查看節點狀態 set 節點路徑 新值修改節點內容

    2. 詳解

    ? 查看指定節點的詳細信息: ls2 /

    # 子節點名稱數組[zookeeper] # -----------節點的狀態信息,也稱為stat結構體-------------------# 創建該znode的事務的zxid(ZooKeeper Transaction ID)# 事務ID是ZooKeeper為每次更新操作/事務操作分配一個全局唯一的id,表示zxid,值越小,表示越先執行cZxid = 0x0 # 0x0表示十六進制數0# 創建時間ctime = Thu Jan 01 08:00:00 CST 1970# 最后一次更新的zxidmZxid = 0x0# 最后一次更新的時間mtime = Thu Jan 01 08:00:00 CST 1970# 最后更新的子節點的zxidpZxid = 0x0# 子節點的變化號,表示子節點被修改的次數,-1表示從未被修改過cversion = -1# 當前節點的變化號,0表示從未被修改過dataVersion = 0# 訪問控制列表的變化號 access control listaclVersion = 0# 如果臨時節點,表示當前節點的擁有者的sessionId# 如果不是臨時節點,則值為0ephemeralOwner = 0x0# 數據長度dataLength = 0# 子節點數據numChildren = 1

    ? 順序編號節點:

    • 順序編號會緊跟在節點名稱后面,節點最終名稱為:節點名+序號,如/test0000000005
    • 順序編號是一個遞增的計數器
    • 順序編號是由父節點維護,從已有的子節點個數開始(包括臨時節點和被刪除的節點)
    • 如果子節點為空,則從0000000000開始,依次遞增1
    • 在分布式系統中,順序編號可以被用于為所有的事件進行全局排序,這樣客戶端就可以根據序號推斷事件的順序

    四、ZooKeeper集群

    1. 配置集群

    ? 步驟:

  • 準備多臺ZooKeeper服務器
  • 配置ZooKeeper服務器
  • 在每臺服務器的conf/zoo.cfg文件中添加如下內容:
  • server.20=192.168.4.20:2888:3888server.21=192.168.4.21:2888:3888server.22=192.168.4.22:2888:3888
  • 格式:server.A=B:C:D
    • A表示這臺服務器的編號ID,是一個數字
    • B表示服務器的IP地址或域名
    • C表示這臺服務器與集群中的Leader交換信息時使用的端口
    • D表示執行選舉Leader服務器時互相通信的端口
  • 創建myid配置文件
  • 在集群環境下,需要在dataDir目錄中創建一個名為myid的文件,文件內容是當前服務器的編號ID,即上面配置的A
  • cd dataecho A的值 > myid
  • ZooKeeper啟動時會讀取這個文件,將里面的數字與zoo.cfg中配置的server.A進行比較,從而判斷這臺服務器是哪個
  • 測試集群環境
  • 啟動所有ZooKeeper服務器,查看狀態
  • 此時在某臺服務器上執行更新操作時,其他服務器也會同步
  • 2. 集群特性

    • 一個ZooKeeper集群中,有一個領導者Leader和多個跟隨者Follower
    • Leader負責進行投票的發起和決議,更新系統狀態
    • Follower用于接收客戶端的請求并向客戶端返回結果,在選舉Leader過程中參與投票
    • 半數機制:集群中只要有半數以上節點存活,集群就能夠正常工作,所以一般集群中的服務器個數都為奇數
    • 全局數據一致:集群中每臺服務器保存一份相同的數據副本,不論客戶端連接到哪個服務器,數據都是一致的
    • 更新請求順序執行:來自同一個客戶端的更新請求,按其發送順序依次執行
    • 數據更新的原子性:一次數據更新,要么成功,要么失敗
    • 實時性:在一定的時間范圍內,客戶端能讀取到最新數據

    3. 選舉機制

    ? ZooKeeper在提供服務時會自動選舉一個節點服務器作為Leader,其他都是Follower

    ? 選舉流程:

  • Server1啟動,給自己投票,然后發送投票信息,由于其它服務器都還沒啟動,所以它發現的消息收不到任何反饋,此時Server1為Looking狀態
  • Server2啟動,給自己投票,同時與Server1通信交換選舉結果,由于Server2的id值較大,所以Server2勝出,但由于投票數沒有過半,此時Server1和Server2都為Looking狀態
  • Server3啟動,給自己投票,同時與Server1和Server2通信交換選舉結果,由于Server3的id值較大,所以Server3勝出,此時票數已經過半,所以Server3為Leader,Server1和Server2為Follower
  • Server4啟動,給自己投票,同時與Server1、Server2、Server3通信交換選舉結果,盡管Server4的id較大,但由于集群中已經存在Leader,所以Server4只能為Follower
  • Server5啟動,同Server4類似,只能為Follower
  • ? 總結:

    • 每個服務器在啟動時都會選擇自己,然后將投票信息發送出去
    • 服務器編號ID越大,在選擇算法中的權重越大
    • 投票數必須過半,才能選出Leader
    • 誰是Leader:啟動順序的前集群數/2+1個服務器中,id值最大的會成為Leader

    4. 監聽機制

    4.1 監聽節點值的變化

    # 在集群的A服務器,監聽某個節點值的變化get /yyy watch # 在集群的B服務器,修改對應節點的值set /yyy myyyy # 此時A服務器會收到事件NodeDataChangedWATCHER::WatchedEvent state:SyncConnected type:NodeDataChanged path:/yyy

    監聽Watch事件是一個一次性的觸發器,當數據改變時只會觸發一次,如果以后這個數據再發生改變,則不會再次觸發

    4.2 監聽節點的子節點變化

    # 在集群的A服務器,監聽某個節點的子節點的變化 ls /yyy watch # 在集群的B服務器,創建/修改/刪除對應節點的子節點create /yyy/hello hello # 此時A服務器會收到事件NodeChildrenChangedWATCHER::WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/yyy

    五、Java訪問ZooKeeper

    Java操作Zookeeper很簡單,只需要添加ZooKeeper客戶端的依賴即可,可以進行節點信息的獲取、管理等。

    ? 步驟:

  • 添加jar包
  • org.apache.zookeeper zookeeper 3.4.13
  • 操作
  • public static void main(String[] args) throws IOException, KeeperException, InterruptedException { //獲取ZooKeeper的連接,即創建ZooKeeper的客戶端 String connectString = "127.0.0.1:2181"; //服務器地址 int sessionTimeout = 3000; //超時時間,單位為毫秒 Watcher watcher = new MyWatcher(); ZooKeeper zkClient = new ZooKeeper(connectString, sessionTimeout, watcher); Thread.sleep(2000); System.out.println(zkClient.getState()); /** * 操作ZooKeeper */ //查看指定節點下的內容 List children = zkClient.getChildren("/

    總結

    以上是生活随笔為你收集整理的zookeeper 默认端口_ZooKeeper知识点汇总的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。