簡介
zookeeper是一個分布式協調服務,能夠為分布式應用程式提供協調服務。 1. zookeeper是為别的分布式程式服務的。 2. zookeeper本身就是一個分布式程式。 zookeeper叢集分為兩種角色:Leader和Follower,Leader的選舉通過zab算法進行(PAXOS算法的簡化版)。 叢集中半數節點以上存活,就能提供服務。 3. zookeeper提供的服務包含:主從協調、伺服器節點動态上下線、統一配置管理、分布式共享鎖等等。 4. zookeeper底層隻提供了兩個功能: 4.1 管理使用者送出的資料。 4.2 提供資料節點的監聽服務。
特性
1. 全局資料一緻性:每個server儲存一份相同的資料副本,用戶端無論連接配接到哪個server,資料都是一緻的。 2. 分布式讀寫,更行操作由leader實施。 3. 更新請求順序進行。來自同一個用戶端的更新請求按其發送順序依次進行。 4. 資料更新的原子性。 4. 資料實時性。
資料結構
1. 階層化的目錄結構。 2. 每個節點為znode,并且有一個唯一的路徑辨別。 3. 節點可以包換資料和子節點(EPHEMERAL節點沒有子節點)。 4. 節點可以設定監聽器。
節點類型
1. 短暫節點(ephemeral),斷開連接配接時會自動删除。 2. 持久節點(persistent)。 3. 節點還可以擁有序列号,為sequential。
Zookeeper叢集的安裝
1. Centos的準備
準備方式可以參考另一篇博文。 一共準備三台虛拟機,分别将其命名為zookeeper1.com、zookeeper2.com、zookeeper3.com 然後建立zookeeper使用者
adduser zookeeper
passwd zookeeper
将密碼直接設定成zookeeper即可。
設定sudo權限 使用root使用者執行:
vim /etc/sudoers
在root ALL=(ALL) ALL下一行添加: zookeeper ALL=(ALL) ALL 退出儲存。 然後切換到zookeeper使用者
su zookeeper
2. Java環境安裝
在zookeeper使用者目錄下建立檔案夾:
mkdir zip apps
jdk使用7_79版本。然後将安裝包上傳到zip目錄。 執行:
tar -zxvf jdk-7u79-linux-x64.tar.gz
mv jdk-7u79-linux-x64 ~/apps
sudo vi /etc/profile
在檔案末尾添加:
export JAVA_HOME=/home/zookeeper/apps/jdk1.7.0_79
執行:
sudo source /etc/profile
執行java -version,如果可以看到jdk版本資訊,則說明安裝成功。
3. Zookeeper的安裝
首先,準備zookeeper的安裝包,這裡使用的是3.4.5版本,你可以在 這裡下載下傳。 在zookeeper使用者目錄下建立檔案夾:
mkdir zip apps
在以後的博文中,應用程式都會安裝在apps目錄下, 所有的安裝包都會放在zip目錄下。 将下載下傳好的安裝包,上傳到zip目錄中,解壓
tar -zxvf zookeeper-3.4.5.tar
mv zookeeper-3.4.5 ../apps
進入到安裝目錄
cd ../apps/zookeeper-3.4.5
修改配置檔案
cp conf/zoo_sample.cfg conf/zoo.cfg
vi zoo.cfg
修改内容如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/zookeeper/apps/zookeeper-3.4.9/data
dataLogDir=/home/zookeeper/apps/zookeeper-3.4.9/log
clientPort=2181
server.1=zookeeper1.com:2888:3888
server.2=zookeeper2.com:2888:3888
server.3=zookeeper3.com:2888:3888
其中,最下面的幾行,server.x是不能修改的,x代表第幾台zookeeper機。zookeeperx.com是每一台主機的域名。端口号2888和3888是預設的。 配置環境變量:
sudo vi /etc/profile
在末尾添加:
export ZOOKEEPER_HOME=/home/zookeeper/apps/zookeeper-3.4.9
export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin
儲存設定
sudo source /etc/profile
将上述的配置在每台centos上執行。也可以使用scp指令進行傳輸。
然後,在每台zookeeper機上配置叢集id 進入data目錄,這個data目錄就是在zoo.cfg檔案裡配置的
vi /home/zookeeper/apps/zookeeper-3.4.5/data/myid
目前機對應的是zoo.cfg檔案中的server.x的哪個數字,就将值填進去。例如,直接寫個1,然後退出儲存。 然後關閉防火牆,或開放2888,3888端口。
sudo service iptables stop
設定hosts檔案,在每台伺服器上執行:
sudo vi /etc/hosts
在末尾添加:
192.168.232.101 zookeeper1.com
192.168.232.102 zookeeper2.com
192.168.232.103 zookeeper3.com
ip位址根據自己的實際情況修改。
最後,啟動zookeeper叢集
zkServer.sh start
檢視zookeeper狀态
zkServer.sh status
檢視到如下,說明啟動成功:
