1. 程式人生 > >分散式--CentOS安裝zookeeper(單機版)

分散式--CentOS安裝zookeeper(單機版)

開啟我們的分散式之路吧!!!

(1)官網下載zookeeper,我這裡使用的是3.4.5版本。下載地址

並且我們要給自己的伺服器配置hosts先

$ vi /etc/hosts

這裡寫圖片描述

(2)解壓唄,我們這就不解壓在usr/local那裡了,因為涉及太多東東,我們解壓配置在我們的使用者目錄那裡。那麼我們就是使用我們的使用者許可權咯!!而不是root使用者許可權。

這裡寫圖片描述

$ tar -zxvf zookeeper-3.4.5.tar.gz

(3)進入zookeeper目錄,建立日誌資料夾以及資料資料夾

$ cd /usr/local/zookeeper-3.4.6
$ mkdir data
$ 
mkdir logs

這裡寫圖片描述

(4)配置檔案是很危險,容易出bug的,所以我們一般是使用備份去操作。進入zookeeper的conf目錄先!

$ cp zoo_sample.cfg zoo.cfg

(5)修改zoo.cfg配置。

$ vi zoo.cfg

這裡寫圖片描述

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs
clientPort=2181
//下面的ip也可以用hosts別名zookeeper-01,當然更是可是用我們剛開始修改hosts的時候配置的名字啦!!!
server.1=edu-provider-02:2888:3888 //其中2888是zookeeper服務之間通訊的埠 //3888是zookeeper與其他應用程式通訊埠

zoo.cfg檔案引數詳解:感謝此博主的分享

引數名 說明
clientPort 客戶端連線server的埠,即對外服務埠,一般設定為2181
tickTime ZK中的一個時間單元。ZK中所有時間都是以這個時間單元為基礎,進行整數倍配置的。例如,session的最小超時時間是2*tickTime
dataDir 儲存快照檔案snapshot的目錄。預設情況下,事務日誌也會儲存在這裡。建議同時配置引數dataLogDir, 事務日誌的寫效能直接影響zk效能
dataLogDir 事務日誌輸出目錄。儘量給事務日誌的輸出配置單獨的磁碟或是掛載點,這將極大的提升ZK效能
globalOutstandingLimit 最大請求堆積數。預設是1000。ZK執行的時候, 儘管server已經沒有空閒來處理更多的客戶端請求了,但是還是允許客戶端將請求提交到伺服器上來,以提高吞吐效能。當然,為了防止Server記憶體溢位,這個請求堆積數還是需要限制下的。(Java system property: zookeeper.globalOutstandingLimit. )
preAllocSize 預先開闢磁碟空間,用於後續寫入事務日誌。預設是64M,每個事務日誌大小就是64M。如果ZK的快照頻率較大的話,建議適當減小這個引數
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 )

(6)資料報要對應給到我們對應的機器:進入我們建立的data目錄

這裡寫圖片描述

相當於建立myid檔案。然後給到我們剛剛對應的server的機器編號1

$ vi myid

這裡寫圖片描述

(7)配置環境變數:我們下載安裝的是使用者目錄下的,所以我們要用使用者許可權去到我們的使用者目錄

切換使用者

$ su 使用者名稱

//進入使用者目錄
$ cd ~

這裡寫圖片描述

然後就在這個目錄下進行修改操作咯

vi .bash_profile

這裡寫圖片描述

export ZOOKEEPER_HOME=/home/dsc/zookeep
export PATH=$ZOOKEEPER_HOME/bin:$PATH

(8)使我們的修改配置生效:

$ source .bash_profile

(9)防火牆的修改配置:(!!!注意!!!要用root使用者許可權去修改)

我們一般用iptables的防火牆,而把firewalled防火牆給關閉解除安裝。firewalled管理iptables管理

CentOS 預設使用的是firewalled作為防火牆,這裡改為iptables防火牆。

1.關閉firewalled。

systemctl stop firewalld.service            //停止firewall 
systemctl disable firewalld.service         //禁止firewall開機啟動

2.安裝iptables防火牆 。

yum install iptables-services       //安裝
vi /etc/sysconfig/iptables          //編輯防火牆配置檔案 

這裡寫圖片描述

#zookeeper
-A FORWARD -j REJECT --reject-with icmp-host-prohibited RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 2888 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3888 -j ACCEPT

3.改完就啟動啊!!

$ systemctl restart iptables.service //最後重啟防火牆使配置生效
$ service iptables restart
$ service iptables status

4.還要設定下開機啟動

$ systemctl enable iptables.service    //設定防火牆開機啟動

(10)啟動zookeeper測試:。進入到zookeeper的bin目錄下:

$ ./zkServer.sh start
//產看狀態
$ ./zkServer.sh status
//檢視程序:
$ ps

(11)設定開機啟動:

$ vi /etc/rc.local

就是一句話 su - root -c ‘/home/dsc/zookeeper-3.4.5/bin/zkServer.sh start’

這裡寫圖片描述

注意點:

(1)啟動日誌監控器監控觀察。進入我們的zookeeper的bin目錄下

$ tail -500f zookeeper.out

這裡寫圖片描述

(2)還有一些啟動失敗的錯誤:

java.net.BindException: 地址已在使用 

解決:方法1.修改zoo.cfg檔案中的埠設定,2181改為其他。方法2.使用$ ./zkServer.sh status檢視zookeeper狀態埠,再使用kill命令殺死該程序,重啟zookeeper即可!

好了,分散式–CentOS安裝zookeeper(單機版)講完了。本部落格系列是我專案中分散式的一些過程中的筆記,拿出來分享經驗給大家。歡迎在下面指出錯誤,共同學習!!你的點贊是對我最好的支援!!