系統版本:html
slave1:java
[root@192 bin]# cat /etc/centos-releaselinux
CentOS Linux release 7.2.1511 (Core)apache
[root@192 bin]# uname -avim
Linux 192.168.1.102 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linuxcentos
slave1和slave2服務器
[root@192 bin]# cat /etc/centos-releaseoracle
CentOS release 6.7 (Final)函數
[root@192 bin]# uname -a測試
Linux 192.168.1.103 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
IP:
slave1 192.168.1.102/24
slave2 192.168.1.103/24
slave3 192.168.1.105/24
主機名稱到IP地址映射配置:(全部機器都要設置)
vi /etc/hosts
192.168.1.102 slave1
192.168.1.103 slave2
192.168.1.105 slave3
測試映射連通性:
[root@192 bin]# ping slave1
[root@192 bin]# ping slave2
[root@192 bin]# ping slave3
開始安裝:
slave1端:
[root@192 ~]# mkdir /opop
[root@192 ~]# cd /opop
[root@192 opop]# yum -y install wget
[root@192 opop]# wget
[root@192 opop]# tar -zxvf jdk-8u151-linux-x64.tar.gz
[root@192 opop]# mv jdk1.8.0_151/ jdk1.8
[root@192 opop]# vi /etc/profile #在最底下添加設置jdk的環境變量
#set zookeeper environment
export JAVA_HOME=/opop/jdk1.8
export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin/:$PATH
[root@192 opop]# source /etc/profile #使變量當即生效
[root@192 opop]# java -version #檢查java有沒成功裝上(查看java的版本)
[root@192 opop]# wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz #下載zookeeper3.4.8
[root@192 opop]# tar -zxvf zookeeper-3.4.8.tar.gz
[root@192 opop]# cd zookeeper-3.4.8/conf
[root@192 conf]# cp zoo_sample.cfg zoo.cfg
[root@192 conf]# vi zoo.cfg
tickTime=2000 #默認項
initLimit=10 #默認項
syncLimit=5 #默認項
dataDir=/tmp/zookeeper/data #修改項
clientPort=2181 #默認項
server.1=slave1:2888:3888 #新加項,2888端口號是zookeeper服務之間通訊的端口
server.2=slave2:2888:3888 #新加項,3888端口是zookeeper與其餘應用程序通訊的端口
server.3=slave3:2888:3888 #新加項
maxClientCnxns=60 #按開啓項
釋:initLimit:配置zookeeper接收客戶端(這裏所說的客戶端不是用戶鏈接zookeeper服務器的客戶端,而是指zookeeper服務器集羣中鏈接到Leader的Follower服務器)初始化鏈接時最長能忍受多少個心跳時間間隔數。當已經超過10個心跳時間長度後zookeeper服務器尚未收到客戶端的返回消息,那麼代表這個客戶端鏈接失敗。總的時間長度就是5*2000=10秒。
syncLimit:配置Leader與Follower之間發送消息,請求和應答時間長度最長不能超過多少個ticketTime的時間長度,總的時間長度就是2*2000=4秒。
server.A=B:C: D 其中A是一個數字,表示這是第幾號服務器。B是這臺服務器的IP地址。C表示這臺服務器與集羣中的Leader服務器交換信息的端口。D表示的是萬一集羣中的Leader服務器掛了,須要一個端口來從新進行選舉,選出一個新的Leader,這個端口就是用來執行選舉時服務器相互通訊的端口。若是是僞集羣的配置方式,因爲B都是同樣,因此不一樣的zookeeper實例通訊端口號不能同樣,因此要給他們分配不一樣的端口號。
[root@192 opop]# scp -r /opop/zookeeper-3.4.8 slave2:/opop/
[root@192 opop]# scp -r /opop/zookeeper-3.4.8 slave3:/opop/
[root@192 opop]# scp -r /opop/jdk1.8/ slave2:/opop/
[root@192 opop]# scp -r /opop/jdk1.8/ slave3:/opop/
[root@192 opop]# mkdir -p /tmp/zookeeper/data/ #zoo.cfg文件中的dataDir指定的目錄
[root@192 opop]# echo 1 /tmp/zookeeper/myid #建立一個myid文件,裏面內容爲一個數字用來標識當前主機
釋:編輯myid文件,並在對應的IP的機器上輸入對應的編號。如在zookeeper上myid文件內容就是1.若是隻在單點上進行安裝配置,那麼只有一個server.1
[root@192 opop]# cat /tmp/zookeeper/myid #查看myid
[root@192 opop]# cd zookeeper-3.4.8/bin/
[root@192 opop]# ./zkServer.sh start #啓動zookeeper
[root@192 opop]# tail -500f zookeeper.out #查看zookeeper服務輸出信息
slave2和slave3端:
注:由於slave1端已經將包發送到slave2和slave3了,so。。。。
[root@192 ~]# iptables -F
[root@192 ~]# setenforce 0
[root@192 ~]# mkdir /opop
[root@192 ~]# cd /opop
[root@192 opop]# mkdir -p /tmp/zookeeper
[root@192 opop]# echo 2 > /tmp/zookeeper/myid
[root@192 opop]# vim /etc/profile
#set zookeeper environment
export JAVA_HOME=/opop/jdk1.8
export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin/:$PATH
[root@192 opop]# source /etc/profile
[root@192 opop]# java -version
[root@192 opop]# vim /opop/zookeeper-3.4.8/conf/zoo.cfg
tickTime=2000 #默認項
initLimit=10 #默認項
syncLimit=5 #默認項
dataDir=/tmp/zookeeper #修改項
clientPort=2181 #默認項
server.1=slave1:2888:3888 #新加項
server.2=slave2:2888:3888 #新加項
server.3=slave3:2888:3888 #新加項
maxClientCnxns=60 #按需打開項
[root@192 opop]# cd zookeeper-3.4.8/bin/
[root@192 bin]# ./zkServer.sh start #啓動zookeeper
[root@192 bin]# ./zkServer.sh status #查看狀態
#附:裝了一次jdk9.0.1和zookeeper3.4.9在centos7上作出了點QuorumPeerMain的問題,這個牽扯到main函數(c語言),至於這個問題咱們不去深研究。
後來換成jdk1.8.0和zookeeper3.4.8完成搭建zookeeper集羣。
官方解釋:http://zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html
ZooKeeper會話
ZooKeeper客戶端經過使用語言綁定建立服務的句柄來創建與ZooKeeper服務的會話。一旦建立完成,句柄將以CONNECTING狀態啓動,而且客戶端庫嘗試鏈接到組成ZooKeeper服務的服務器之一,此時它將切換到CONNECTED狀態。在正常的操做過程當中將處於這兩個狀態之一。若是發生不可恢復的錯誤,例如會話到期或身份驗證失敗,或者應用程序顯式關閉了句柄,則句柄將移至CLOSED狀態。下圖顯示了ZooKeeper客戶端可能的狀態轉換:
要建立客戶端會話,應用程序代碼必須提供一個鏈接字符串,其中包含一個逗號分隔的host:port對列表,每一個對應於一個ZooKeeper服務器(例如「127.0.0.1:4545」或「127.0.0.1:3000,127.0.0.1 :3001,127.0.0.1:3002" )。ZooKeeper客戶端庫將選擇一個任意的服務器並嘗試鏈接到它。若是此鏈接失敗,或者客戶端因爲某種緣由而與服務器斷開鏈接,則客戶端將自動嘗試列表中的下一個服務器,直到(從新)創建鏈接。
##### 至於zookeeper的集羣原理去網上仔細看幾遍相信屏幕前的你都能懂 good luck ~!~!########