分散式--CentOS安裝zookeeper(單機版)
阿新 • • 發佈:2019-02-08
開啟我們的分散式之路吧!!!
(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: 地址已在使用