linux安裝zookeeper集羣

linux安裝zookeeper集羣

zookeeper安裝文件(版本:zookeeper-3.4.5.tar.gz)

鏈接:https://pan.baidu.com/s/1heWjYrlO7Y9fiwqvSPpeOA
提取碼:jhet

安裝前置工作:

我這整好了三臺虛擬機,所以準備打一個zookeeper集羣。

  1. 首先在三臺虛擬機上全部裝好jdk(卸載openjdk,安裝sun公司的jdk)

    • 這個參照我之前的流程。,當然也可以使用後面的分發,避免重複上傳的問題。
    • 文件上傳我也有寫,畢竟之前只在node-1上安裝了 lrzsz 程序。
  2. 檢查集羣時間是否同步

    • 首先我們在CRT下面的白框中點擊右鍵,選擇 發送交付到所有會話,這樣的話,我們基本可以在同一時間查看三臺虛擬機的時間是否同步。時間同步是一個很重要的步驟。

    • 使用命令:date 檢查時間是否同步。

      CRT查看時間01

    • 如果發現三臺虛擬機時間不一致,則需要同步一下時間,最簡單的操作,手動同步:命令:date -s "2017-03-03 03:03:03",裏面的時分秒可以修改,不一定要同步到這個點。

    • 還可以使用網絡同步:命令:yum install ntpdate,然後輸入:ntpdate cn.pool.ntp.org

    • 同步完了記得再檢查一下時間是否一致。

  3. 檢查防火牆是否關閉

    因爲這個纔剛剛搭建,我們要搭好集羣,那麼所有的虛擬機都要相互能ping同,都要能連接上,而現在還沒有設置防火牆的規則,所以我們這邊直接關閉防火牆,後續有興趣再來搞搞這個防火牆的規則。

    • 第一步:不管現在防火牆是什麼狀態,先將防火牆進行關閉。使用命令:service iptables stop

      關閉防火牆

    • 第二步:爲了避免我們每次啓動虛擬機,啓動集羣的時候都需要再一次的關閉防火牆,所以這裏我們直接設置不在啓動防火牆。使用命令:
      chkconfig iptables off

      關閉防火牆01

  4. 檢測主機名和IP映射有沒有配置

    • 首先打開 /etc/hosts,然後添加,對應的映射;使用命令:vim /etc/hosts

    • 然後添加對應的映射

      192.168.111.129 node-1
      192.168.111.128 node-2
      192.168.111.127 node-3
      

      配置主機名和IP地址映射

安裝zookeeper

  1. 先上傳zookeeper的壓縮包,第一次上傳時報錯,然後一直刷信息,如果遇到了,按 Ctrl+c退出,然後刪除上傳的zookeeper的壓縮包,在上傳一次就好了。

    Linux安裝zookeeper步驟01

  2. 然後解壓zookeeper的壓縮包。使用命令:tar zxvf zookeeper-3.4.5.tar.gz,解壓後可以重命名一下加壓文件(當然不重命名也可以,沒有影響,只是我覺得這樣好看一點),重命名命令:mv zookeeper-3.4.5 zookeeper

    Linux安裝zookeeper步驟02

  3. 然後刪除zookeeper的安裝包(這個也可以不刪,個人喜好,留着佔空間)

    刪除命令:rm -rf zookeeper-3.4.5.tar.gz

  4. 修改zookeeper的配置文件

    1. 進入到zookeeper的解壓路徑下的conf文件夾下。

      Linux安裝zookeeper步驟03

    2. 在沒有指定zookeeper的配置文件的情況下,zookeeper會默認使用一個名爲 zoo.cfg的配置文件。如果沒有這個文件,zookeeper會自己自動創建一個。

    3. 在conf文件夾裏,有一個 zoo_sample.cfg 文件,我們照着這個樣例文件進行修改。

    4. 首先複製這個樣例文件,且命名爲 zoo.cfg,使用命令:cp zoo_sample.cfg zoo.cfg

      Linux安裝zookeeper步驟04

    5. 在修改前,需要知道配置文件裏面的內容都是幹嘛使的。

      配置文件中參數說明:
      
      tickTime這個時間是作爲zookeeper服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是說每個tickTime時間就會發送一個心跳。
      
      initLimit這個配置項是用來配置zookeeper接受客戶端(這裏所說的客戶端不是用戶連接zookeeper服務器的客戶端,而是zookeeper服務器集羣中連接到leader的follower 服務器)初始化連接時最長能忍受多少個心跳時間間隔數。
      
      當已經超過10個心跳的時間(也就是tickTime)長度後 zookeeper 服務器還沒有收到客戶端的返回信息,那麼表明這個客戶端連接失敗。總的時間長度就是 10*2000=20秒。
      
      syncLimit這個配置項標識leader與follower之間發送消息,請求和應答時間長度,最長不能超過多少個tickTime的時間長度,總的時間長度就是5*2000=10秒。
      
      dataDir顧名思義就是zookeeper保存數據的目錄,默認情況下zookeeper將寫數據的日誌文件也保存在這個目錄裏;
      
      clientPort這個端口就是客戶端連接Zookeeper服務器的端口,Zookeeper會監聽這個端口接受客戶端的訪問請求;
      
      server.A=B:C:D中的A是一個數字,表示這個是第幾號服務器,B是這個服務器的IP地址,C第一個端口用來集羣成員的信息交換,表示這個服務器與集羣中的leader服務器交換信息的端口,D是在leader掛掉時專門用來進行選舉leader所用的端口。
      

      Linux安裝zookeeper步驟05

    6. 修改配置文件,使用命令:vi zoo.cfg 準備開始修改文件,按照zoo.cfg 裏面的描述,其他的暫時使用默認設置,但是數據文件存儲地址需要修改。

      1. 先從CRT上面克隆一個鏈接出來。右鍵點擊node-1,然後選擇 克隆會話(N)

        Linux安裝zookeeper步驟06

      2. 然後進入之前創建好保存數據的文件夾。使用命令:cd /export/data/,然後創建一個保存zookeeper數據的文件夾,命令:mkdir zkdata

        Linux安裝zookeeper步驟07

    7. 複製保存數據文件夾的位置,回到之前的連接,將保存數據文件的位置替換進去。

      Linux安裝zookeeper步驟08

    8. 因爲搭建的時集羣,所以這裏需要配置集羣的地址和端口號(包括心跳端口、選舉端口),將下面的內容複製放到文件末尾;各個字段代表的含義在上面的配置文件最後一個解釋中。

      ## (心跳端口、選舉端口)
      server.1=node-1:2888:3888     
      server.2=node-2:2888:3888
      server.3=node-3:2888:3888
      

      Linux安裝zookeeper步驟09

    9. 然後按兩次 shift+Z 進行保存。

    10. 接着回到之前了克隆出來的連接,進入zkdata文件夾,創建一個名爲 myid 的文件,保存當前屬於第幾臺服務器。node-1 屬於第一臺,所以在myid裏面輸入 1 ,然後保存。

      使用命令:echo 1 > myid

      Linux安裝zookeeper步驟10

    11. 然後將安裝包分發到其他虛擬機,

      使用命令:

      scp -r /export/server/zookeeper/ root@node-2:/export/server/
      scp -r /export/server/zookeeper/ root@node-3:/export/server/
      

      可能node-1 和node-2 、node-3 之間沒有搭建免密登錄,分發時需要輸入yes 和密碼。

      這兩條命令一條一條執行,避免出現問題。

    12. 然後別在node-2和node-3上面的 /export/data 路徑下按照node-1 創建zkdata 文件夾和 myid文件

      Linux安裝zookeeper步驟11

啓動zookeeper集羣

啓動命令:/export/server/zookeeper/bin/zkServer.sh start

查看狀態命令: /export/server/zookeeper/bin/zkServer.sh status

停止命令:/export/server/zookeeper/bin/zkServer.sh stop

Linux安裝zookeeper步驟12

注意:安裝前的準備工作是三臺機器都要完成的,不是隻完成一臺就可以了。

zookeeper常用命令

啓動後我們可以使用nc(也可以使用telnet)發送ruck命令(are you ok?)到監聽端口檢查zookeeper是否正常運行。命令:echo ruck | nc localhost 2181

類別 命令 描述
服務器狀態 ruok 如果服務器正在運行並且未處於出錯狀態,則輸出imok
conf 輸出服務器的配置信息(根據配置文件z00.cfg)
envi 輸出服務器的環境信息,包括ZooKeeper版本、Java版本和其他系統屬性
srvr 輸出服務器的統計信息,包括延遲統計、znode的數量和服務器運行模式(standalone、1eader或follower)
stat 輸出服務器的統計信息和已連接的客戶端
srst 重置服務器的統計信息
isro 顯示服務器是否處於只讀(ro)模式(由於網絡分區),或者讀/寫(rw)模式
客戶端連接 dump 列出集合體中的所有會話和短暫znode。必須連接到 leader才能夠使用此命令(參考srvr命令)
cons 列出所有服務器客戶端的連接統計信息
crst 重置連接統計信息
觀察 wchs 列出服務器上所有觀察的摘要信息
wchc 按連接列出服務器上所有的觀察。注意:如果觀察的數量較多,此命令會影響服務器的性能
wchp 按znode路徑列出服務器上所有的觀察。注意:如果觀察的數量較多,此命令會影響服務器的性能
監控 mntr 按Java屬性格式列出服務器統計信息。適合於用作Ganglia和Nagios 等監控系統的信息源

zookeeper的配置參數詳解(zoo.cfg)

該部分來源於博客:https://www.cnblogs.com/xiohao/p/5541093.html

配置參數詳解(主要是%ZOOKEEPER_HOME%/conf/zoo.cfg文件)

參數名 說明
clientPort 客戶端連接server的端口,即對外服務端口,一般設置爲2181吧。
dataDir 存儲快照文件snapshot的目錄。默認情況下,事務日誌也會存儲在這裏。建議同時配置參數dataLogDir, 事務日誌的寫性能直接影響zk性能。
tickTime ZK中的一個時間單元。ZK中所有時間都是以這個時間單元爲基礎,進行整數倍配置的。例如,session的最小超時時間是2*tickTime。
dataLogDir 事務日誌輸出目錄。儘量給事務日誌的輸出配置單獨的磁盤或是掛載點,這將極大的提升ZK性能。 (No Java system property)
globalOutstandingLimit 最大請求堆積數。默認是1000。ZK運行的時候, 儘管server已經沒有空閒來處理更多的客戶端請求了,但是還是允許客戶端將請求提交到服務器上來,以提高吞吐性能。當然,爲了防止Server內存溢出,這個請求堆積數還是需要限制下的。 (Java system property:zookeeper.globalOutstandingLimit. )
preAllocSize 預先開闢磁盤空間,用於後續寫入事務日誌。默認是64M,每個事務日誌大小就是64M。如果ZK的快照頻率較大的話,建議適當減小這個參數。(Java system property:zookeeper.preAllocSize )
snapCount 每進行snapCount次事務日誌輸出後,觸發一次快照(snapshot), 此時,ZK會生成一個snapshot.文件,同時創建一個新的事務日誌文件log.。默認是100000.(真正的代碼實現中,會進行一定的隨機數處理,以避免所有服務器在同一時間進行快照而影響性能)(Java system property:zookeeper.snapCount )
traceFile 用於記錄所有請求的log,一般調試過程中可以使用,但是生產環境不建議使用,會嚴重影響性能。(Java system property:? requestTraceFile )
maxClientCnxns 單個客戶端與單臺服務器之間的連接數的限制,是ip級別的,默認是60,如果設置爲0,那麼表明不作任何限制。請注意這個限制的使用範圍,僅僅是單臺客戶端機器與單臺ZK服務器之間的連接數限制,不是針對指定客戶端IP,也不是ZK集羣的連接數限制,也不是單臺ZK對所有客戶端的連接數限制。指定客戶端IP的限制策略,這裏有一個patch,可以嘗試一下:http://rdc.taobao.com/team/jm/archives/1334(No Java system property)
clientPortAddress 對於多網卡的機器,可以爲每個IP指定不同的監聽端口。默認情況是所有IP都監聽 clientPort 指定的端口。 New in 3.3.0
minSessionTimeoutmaxSessionTimeout Session超時時間限制,如果客戶端設置的超時時間不在這個範圍,那麼會被強制設置爲最大或最小時間。默認的Session超時時間是在2 * tickTime ~ 20 * tickTime 這個範圍 New in 3.3.0
fsync.warningthresholdms 事務日誌輸出時,如果調用fsync方法超過指定的超時時間,那麼會在日誌中輸出警告信息。默認是1000ms。(Java system property: fsync.warningthresholdms )New in 3.3.4
autopurge.purgeInterval 在上文中已經提到,3.4.0及之後版本,ZK提供了自動清理事務日誌和快照文件的功能,這個參數指定了清理頻率,單位是小時,需要配置一個1或更大的整數,默認是0,表示不開啓自動清理功能。(No Java system property) New in 3.4.0
autopurge.snapRetainCount 這個參數和上面的參數搭配使用,這個參數指定了需要保留的文件數目。默認是保留3個。(No Java system property) New in 3.4.0
electionAlg 在之前的版本中, 這個參數配置是允許我們選擇leader選舉算法,但是由於在以後的版本中,只會留下一種“TCP-based version of fast leader election”算法,所以這個參數目前看來沒有用了,這裏也不詳細展開說了。(No Java system property)
initLimit Follower在啓動過程中,會從Leader同步所有最新數據,然後確定自己能夠對外服務的起始狀態。Leader允許F在 initLimit 時間內完成這個工作。通常情況下,我們不用太在意這個參數的設置。如果ZK集羣的數據量確實很大了,F在啓動的時候,從Leader上同步數據的時間也會相應變長,因此在這種情況下,有必要適當調大這個參數了。(No Java system property)
syncLimit 在運行過程中,Leader負責與ZK集羣中所有機器進行通信,例如通過一些心跳檢測機制,來檢測機器的存活狀態。如果L發出心跳包在syncLimit之後,還沒有從F那裏收到響應,那麼就認爲這個F已經不在線了。注意:不要把這個參數設置得過大,否則可能會掩蓋一些問題。(No Java system property)
leaderServes 默認情況下,Leader是會接受客戶端連接,並提供正常的讀寫服務。但是,如果你想讓Leader專注於集羣中機器的協調,那麼可以將這個參數設置爲no,這樣一來,會大大提高寫操作的性能。(Java system property: zookeeper. leaderServes )。
server.x=[hostname]:nnnnn[:nnnnn] 這裏的x是一個數字,與myid文件中的id是一致的。右邊可以配置兩個端口,第一個端口用於F和L之間的數據同步和其它通信,第二個端口用於Leader選舉過程中投票通信。 (No Java system property)
group.x=nnnnn[:nnnnn]weight.x=nnnnn 對機器分組和權重設置,可以 參見這裏(No Java system property)
cnxTimeout Leader選舉過程中,打開一次連接的超時時間,默認是5s。(Java system property: zookeeper. cnxTimeout )
zookeeper.
DigestAuthenticationProvider.
superDigest
ZK權限設置相關,具體參見 《 使用super 身份對有權限的節點進行操作 》 和 《 ZooKeeper 權限控制 》
skipACL 對所有客戶端請求都不作ACL檢查。如果之前節點上設置有權限限制,一旦服務器上打開這個開頭,那麼也將失效。(Java system property: zookeeper.skipACL )
forceSync 這個參數確定了是否需要在事務日誌提交的時候調用 FileChannel .force來保證數據完全同步到磁盤。(Java system property: zookeeper.forceSync )
jute.maxbuffer 每個節點最大數據量,是默認是1M。這個限制必須在server和client端都進行設置纔會生效。(Java system property: jute.maxbuffer )
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章