Zookeeper 部署 配置文件


Zookeeper的搭建方式

Zookeeper安裝方式有三種,單機模式集群模式以及偽集群模式

■ 單機模式:      Zookeeper只運行在一台服務器上,適合測試環境;
■ 偽集群模式:就是在一台物理機上運行多個Zookeeper 實例;
■ 集群模式:Zookeeper運行於一個集群上,適合生產環境,這個計算機集群被稱為一個“集合體”(ensemble)

        Zookeeper通過復制來實現高可用性,只要集合體中半數以上的機器處於可用狀態,它就能夠保證服務繼續。
為什么一定要超過半數呢?這跟Zookeeper的復制策略有關:zookeeper確保對znode 樹的每一個修改都會被復制到集合體中超過半數的機器上。

 

下載解壓zookeeper包 zookeeper-3.4.11
#cd zookeeper-3.4.11

請檢查服務器是否安裝java環境!!!沒有java環境 先安裝java環境

 

zookeeper 配置文件:

ZK中的一個時間單元,以毫秒為單位
# The number of milliseconds of each tick   

tickTime=2000
Follower在啟動過程中,會從Leader同步所有最新數據,然后確定自己能夠對外服務的起始狀態。
Leader允許F在 initLimit 時間內完成這個工作

# The number of ticks that the initial
# synchronization phase can take
initLimit=10
如果Leader發出心跳包在syncLimit之后,還沒有從Follower那里收到響應,那么就認為這個F已經不在線了

# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
存儲快照文件snapshot的目錄。默認情況下,事務日志也會存儲在這里。
建議同時配置參數dataLogDir, 事務日志的寫性能直接影響zk性能。

# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper
客戶端連接server的端口,即對外服務端口

# the port at which the clients will connect
clientPort=2181
單個客戶端與單台服務器之間的連接數的限制,是ip級別的,默認是60,
如果設置為0,那么表明不作任何限制

# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
這個參數和下面參數配合使用
指定了需要保留的文件數目。默認是保留3個

# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
3.4.0及之后版本,ZK提供了自動清理事務日志和快照文件的功能,
這個參數指定了清理頻率,單位是小時,需要配置一個1或更大的整數,
0表示不開啟自動清理功能

# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

 

 

下面是在最低配置要求中必須配置的參數:

(1) client:監聽客戶端連接的端口。
(2) tickTime:基本事件單元,這個時間是作為Zookeeper服務器之間或客戶端與服務器之間維持心跳的時間間隔,
     每隔tickTime時間就會發送一個心跳;最小 的session過期時間為2倍tickTime   
(3)dataDir:存儲內存中數據庫快照的位置,如果不設置參數,更新食物的日志將被存儲到默認位置。

 

參數名

說明

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

minSessionTimeout

maxSessionTimeout

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.Digest
AuthenticationProvider
.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 )

 

 

Zookeeper的偽集群模式搭建

        Zookeeper不但可以在單機上運行單機模式Zookeeper,而且可以在單機模擬集群模式 Zookeeper的運行,也就是將不同節點運行在同一台機器。
我們知道偽分布模式下Hadoop的操作和分布式模式下有着很大的不同。
        比如,我們在實驗的時候,可以先使用少量數據在集群偽分布模式下進行測試。當測試可行的時候,再將數據移植到集群模式進行真實的數據實驗。這樣不 但保證了它的可行性,同時大大提高了實驗的效率。
        這種搭建方式,比較簡便,成本比較低,適合測試和學習,如果你的手頭機器不足,就可以在一台機器上部署了 3個server。

注意事項

        在一台機器上部署了3個server,需要注意的是在集群為偽分布式模式下,我們使用的每個配置文檔模擬一台機器,也就是說單台機器及上運行多個Zookeeper實例。
        但是,必須保證每個配置文檔的各個端口號不能沖突,除了clientPort不同之外,dataDir也不同
另外,還要在dataDir所對應的目錄中創建myid文件來指定對應的Zookeeper服務器實例。

 

■ clientPort端口:如果在1台機器上部署多個server,那么每台機器都要不同的 clientPort,比如 server1是2181,server2是2182,server3是2183

 

■ dataDir和dataLogDir:dataDir和dataLogDir也需要區分下,將數據文件和日志文件分開存放,同時每個server的這兩變量所對應的路徑都是不同的

 

■ server.X和myid: server.X 這個數字就是對應,data/myid中的數字。在3個server的myid文件中分別寫入了1,2,3
     那么每個server中的zoo.cfg都配 server.1 server.2,server.3就行了。
     因為在同一台機器上,后面連着的2個端口,3個server都不要一樣,否則端口沖突

 

部署步驟

安裝java

1.創建三個server的數據目錄和日志目錄
# mkdir -p /home/zoo1/data/
# mkdir -p /home/zoo1/logs/

# mkdir -p /home/zoo2/data/
# mkdir -p /home/zoo2/logs/

# mkdir -p /home/zoo3/data/
# mkdir -p /home/zoo3/logs/

 

2.創建三個server的 myid文件(在data目錄中)並寫入其編號
# echo 1 > /home/zoo1/data/myid

# echo 2 > /home/zoo2/data/myid

# echo 3 > /home/zoo3/data/myid

 

3.在zookeeper-3.4.11/conf 中創建三個配置文件 
    zoo1.cfg    zoo2.cfg    zoo3.cfg

   文件內容,注意修改dataDir、dataLogDir 的目錄   還有 clientPort的端口也要修改

zoo1 對應 2181端口 
zoo2 對應 2182端口 
zoo3 對應 2183端口 

tickTime=2000
initLimit=10
syncLimit=5

  dataDir=/home/zoo1/data
  dataLogDir=/home/zoo1/logs

clientPort=2181 

server.1=localhost:2287:3387
server.
2=localhost:2288:3388
server.
3=localhost:2289:3389

 

4.啟動
進入zookeeper/bin目錄  執行以下命令,啟動三個實例

# ./zkServer.sh start zoo1.cfg

# ./zkServer.sh start zoo2.cfg

# ./zkServer.sh start zoo3.cfg


查看狀態和角色

# ./zkServer.sh status zoo1.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.11/bin/../conf/zoo1.cfg
Mode: follower

# ./zkServer.sh status zoo2.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.11/bin/../conf/zoo2.cfg
Mode: leader

 

# ./zkServer.sh status zoo3.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.11/bin/../conf/zoo3.cfg
Mode: follower

 

 

 

 

Zookeeper的集群模式搭建

為了獲得可靠地Zookeeper服務,用戶應該在一個機群上部署Zookeeper。
只要機群上大多數的Zookeeper服務啟動了,那么總的 Zookeeper服務將是可用的。
集群的配置方式,在每台機器上conf/zoo.cfg配置文件的參數設置 相同

 

部署步驟

1.創建每台server的數據目錄和日志目錄
# mkdir /home/zoo/data/
# mkdir /home/zoo/logs/

2.創建server的 myid文件(在data目錄中)並寫入其機器編號
# echo 1 > /home/zoo1/data/myid

 

3.在zookeeper-3.4.11/conf 中創建配置文件 
    # mkdir /usr/local/zookeeper-3.4.11/conf/zoo.cfg  

   文件內容,注意修改dataDir、dataLogDir 、clientPort、這三處

tickTime=2000
initLimit=10
syncLimit=5

  dataDir=/home/zoo1/data
  dataLogDir=/home/zoo1/logs

clientPort=2181 

server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389

 

4.啟動

分別在3台機器上啟動ZooKeeper的Server:

進入zookeeper/bin目錄  執行以下命令,啟動

# ./zkServer.sh start zoo.cfg

 


免責聲明!

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



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