ZooKeeper集羣配置

本文系統:CentOS 6.5 x64

一、單機模式安裝

二、僞集羣模式安裝

三、集羣模式安裝

--------------------------------------分割線 --------------------------------------

ZooKeeper集羣配置 http://www.linuxidc.com/Linux/2013-06/86348.htm

使用ZooKeeper實現分佈式共享鎖 http://www.linuxidc.com/Linux/2013-06/85550.htm

分佈式服務框架 ZooKeeper -- 管理分佈式環境中的數據 http://www.linuxidc.com/Linux/2013-06/85549.htm

ZooKeeper集羣環境搭建實踐 http://www.linuxidc.com/Linux/2013-04/83562.htm

ZooKeeper服務器集羣環境配置實測 http://www.linuxidc.com/Linux/2013-04/83559.htm

ZooKeeper集羣安裝 http://www.linuxidc.com/Linux/2012-10/72906.htm

--------------------------------------分割線 --------------------------------------

1、單機模式安裝zookeeper

1.1、創建帳號zk

[root@master ~]# useradd -d /opt/zk zk
[root@master ~]# echo "zk" |passwd --stdin zk

1.2、下載、解壓、

[root@master ~]# su - zk
[zk@master ~]$ pwd
/opt/zk
[zk@master ~]$  wget
[zk@master ~]$ tar zxvf zookeeper-3.5.0-alpha.tar.gz
[zk@master ~]$ mv zookeeper-3.5.0-alpha zk

1.3、配置當前用戶環境變量

export ZOOKEEPER_HOME=/opt/zk/zk
PATH=$ZOOKEEPER_HOME/bin:$PATH
export PATH

1.4、配置配置文件zoo.cfg

[zk@master conf]$ cat zoo.cfg
initLimit=10
syncLimit=5
clientPort=2181
tickTime=2000
dataDir=/opt/zk/zk/data
dataLogDir=/opt/zk/zk/logs

1.5、啓動zk

[zk@master bin]$ pwd
/opt/zk/zk/bin
[zk@master bin]$ ./zkServer.sh start

1.6、客戶端鏈接測試下:

[zk@master bin]$ pwd
/opt/zk/zk/bin
[zk@master bin]$ ./zkCli.sh -server localhost:2181
Connecting to localhost:2181
。。。
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1] create /Test hellozk
Created /Test
[zk: localhost:2181(CONNECTED) 2] get /Test
hellozk
[zk: localhost:2181(CONNECTED) 3] set /Test hellozookeeper
[zk: localhost:2181(CONNECTED) 4] get /Test
hellozookeeper
[zk: localhost:2181(CONNECTED) 5] delete /Test
[zk: localhost:2181(CONNECTED) 6] get /Test
Node does not exist: /Test
[zk: localhost:2181(CONNECTED) 7] quit
2014-11-19 03:53:50,180 [myid:] - INFO  [main:ZooKeeper@968] - Session: 0x149c475d7db0000 closed
2014-11-19 03:53:50,182 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@529] - EventThread shut down

zookeeper的配置文件說明:

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

僞集羣, 是指在單臺機器中啓動多個zookeeper進程, 並組成一個集羣. 以啓動3個zookeeper進程爲例

2.1、拷貝zk目錄,分別爲zk2、zk3

[zk@master ~]$ cp -r zk zk2
[zk@master ~]$ cp -r zk zk3

2.2、分別修改配置文件

[zk@master conf]$ vim zoo.cfg
 
initLimit=10
syncLimit=5
clientPort=2181
tickTime=2000
dataDir=/opt/zk/zk/data
dataLogDir=/opt/zk/zk/logs
server.0=127.0.0.1:5555:6666
server.1=127.0.0.1:5556:6667
server.2=127.0.0.1:5557:6668

分別修改其他倆個zk目錄配置文件dataDir, dataLogDir, clientPort參數即可.

分別在zk、zk2、zk3、的dataDir中新建myid文件, 寫入一個數字, 該數字表示這是第幾號server. 該數字必須和zoo.cfg文件中的server.X中的X一一對應.
/opt/zk/zk/data/myid文件中寫入0, /opt/zk/zk2/data/myid文件中寫入1, /opt/zk/zk3/data/myid文件中寫入2.

[zk@master ~]$ echo 0 > /opt/zk/zk/data/myid
[zk@master ~]$ echo 1 > /opt/zk/zk2/data/myid
[zk@master ~]$ echo 2 > /opt/zk/zk3/data/myid

2.3、分別啓動



3、集羣模式安裝

集羣模式的配置和僞集羣基本一致.
由於集羣模式下, 各server部署在不同的機器上, 因此各server的conf/zoo.cfg文件可以完全一樣.

示例:

tickTime=2000   
initLimit=5   
syncLimit=2   
dataDir=/opt/zk/zk/data   
dataLogDir=/opt/zk/zk/logs   
clientPort=2180
server.0=192.168.10.128:5555:6666
server.1=192.168.10.129:5555:6666   
server.2=192.168.10.130:5555:6666

示例文件部署了3臺zookeeper server, 分別部署在192.168.10.128~130上. 需要注意的是, 各server的dataDir目錄下的myid文件中的數字必須不同.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章