天天看點

四、Zookeeper單機和叢集

為什麼使用Zookeeper?

大部分分布式應用需要一個主要、協調器或控制器來管理實體分布的子程序(如資源、任務配置設定等)

目前,大部分應用需要開發私有的協調程式,缺乏一個通用的機制

協調程式的反複編寫浪費,且難以形成通用、伸縮性好的協調器

ZooKeeper:提供通用的分布式鎖服務,用以協調分布式應用

Zookeeper能幫我們做什麼?

Hadoop2.0,使用Zookeeper的事件處理確定整個叢集隻有一個活躍的NameNode,存儲配置資訊等.

HBase,使用Zookeeper的事件處理確定整個叢集隻有一個HMaster,察覺HRegionServer聯機和當機,存儲通路控制清單等.

Zookeeper的特性

Zookeeper是簡單的

Zookeeper是富有表現力的

Zookeeper具有高可用性

Zookeeper采用松耦合互動方式

Zookeeper是一個資源庫

Zookeeper單機

單機模式:

1) 首先下載下傳zookeeper壓縮包

wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz

2) 解壓縮

首先建立檔案夾,這裡放到/user/local/zk/cloud/檔案夾下

tar -zxvf zookeeper-3.4.8.tar.gz -C /user/local/zk/cloud/zookeeper1

tar -zxvf zookeeper-3.4.8.tar.gz -C /user/local/zk/cloud/zookeeper2

tar -zxvf zookeeper-3.4.8.tar.gz -C /user/local/zk/cloud/zookeeper3

3)運作單價環境

跳轉到對應目錄:cd /usr/local/zk/cloud/zookeeper1/conf

修改配置檔案名:mv zoo_sample.cfg zoo.cfg

跳轉到對應目錄:cd /usr/local/zk/cloud/zookeeper1/bin

啟動zookeeper :./zdServer.sh start

4) 使用java 用戶端連接配接ZooKeeper

跳轉到對應目錄:cd /usr/local/zk/cloud/zookeeper1/bin

啟動zookeeper用戶端 :./zkCli.sh -server 127.0.0.1:2181

啟動完成之後測試一下:

create /name “xiangping”

get /name :如果可以得到值就可以了

5) 關閉

跳轉到對應目錄:cd /usr/local/zk/cloud/zookeeper1/bin

關閉zookeeper :./zdServer.sh stop

Zookeeper叢集(單機中做叢集)

所謂 “僞分布式叢集” 就是在,在一台PC中,啟動多個ZooKeeper的執行個體。“完全分布式叢集” 是每台PC,啟動一個ZooKeeper執行個體。

ZooKeeper不存在明顯的master/slave關系,各個節點都是伺服器,leader挂了,會立馬從follower中選舉一個出來作為leader.

由于沒有主從關系,也不用配置SSH無密碼登入了,各個zk伺服器是自己啟動的,互相之間通過TCP端口來交換資料

建立環境目錄

1.切換到/usr/local/zk/cloud/路徑下,把解壓好的zookeeper複制三份,zookeeper1,zookeeper2,zookeeper3

2.建立三個myid檔案:

~ echo “1” > /usr/local/zk/cloud/zookeeper1/myid

~ echo “2” > /usr/local/zk/cloud/zookeeper2/myid

~ echo “3” > /usr/local/zk/cloud/zookeeper3/myid

注意:myid隻能為數字,因為我試驗了下,包含英文的話zk啟動不起來,抛出異常

3.修改配置檔案

vi /usr/local/zk/cloud/zookeeper1/conf/zoo.cfg

initLimit=10
syncLimit=5
dataDir=/usr/local/zk/cloud/data/zookeeper1
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
           

vi /usr/local/zk/cloud/zookeeper2/conf/zoo.cfg

initLimit=10
syncLimit=5
dataDir=/usr/local/zk/cloud/data/zookeeper2
clientPort=2182
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
           

vi /usr/local/zk/cloud/zookeeper3/conf/zoo.cfg

initLimit=10
syncLimit=5
dataDir=/usr/local/zk/cloud/data/zookeeper3
clientPort=2183
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
           

啟動每台機器

cd /usr/local/zk/cloud/
/zookeeper1/bin/zkServer.sh start
/zookeeper2/bin/zkServer.sh start
/zookeeper3/bin/zkServer.sh start
           

測試zookeeper叢集:

cd /usr/local/zk/cloud/

/zookeeper1/bin/zkCli.sh -server 127.0.0.1:2181

啟動完成之後:

create /name “xiangping”

cd /usr/local/zk/cloud/

/zookeeper2/bin/zkCli.sh -server 127.0.0.1:2182

啟動完成之後:

get /name : 如果可以得到—”xiangping”就ok了

cd /usr/local/zk/cloud/

/zookeeper3/bin/zkCli.sh -server 127.0.0.1:2183

啟動完成之後:

get /name : 如果可以得到—”xiangping”就ok了

zookeeper叢集(多台機器叢集)

我們使用三台機器搭建Zookeeper叢集

設定ip位址與機器名分别為:

192.168.100.104 zookeeper1

192.168.100.105 zookeeper2

192.168.100.106 zookeeper3

1、 修改機器IP 可以在網絡連接配接中直接使用滑鼠操作

2、 修改機器名vim /etc/sysconfig/network 修改如下配置:HOSTNAME=機器名稱,HOSTNAME=為你的機器名稱,三台機器分别設定為:zookeeper1、zookeeper2、zookeeper3

3、 修改機器名稱與IP位址對應關系:vim /etc/hosts

添加如下配置:

192.168.100.104 zookeeper1

192.168.100.105 zookeeper2

192.168.100.106 zookeeper3

4、 解壓下載下傳好的zookeeper-3.4.5.tar.gz

修改zoo.cfg檔案

dataDir=/usr/local/zk/cloud/zookeeper-3.4.5/data

在檔案中添加配置:

server.1=hadoop4:2888:3888

server.2=hadoop5:2888:3888

server.3=hadoop6:2888:3888

zook.cfg檔案内容如下:

# The number of milliseconds of each tick

tickTime=

# The number of ticks that the initial

# synchronization phase can take

initLimit=

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=

# the directory where the snapshot is stored.

# do not use /tmp for storage, /tmp here is just

# example sakes.

dataDir=/usr/zookeeper/data

# the port at which the clients will connect

clientPort=

#

# Be sure to read the maintenance section of the

# administrator guide before turning on autopurge.

#

# http://zookeeper.apache.org/doc/current
/zookeeperAdmin.html#sc_maintenance

#

# The number of snapshots to retain in dataDir

#autopurge.snapRetainCount=3

# Purge task interval in hours

# Set to "0" to disable auto purge feature

#autopurge.purgeInterval=1

server=zookeeper1::
server=zookeeper2::
server=zookeeper3::
           

1.tickTime:CS通信心跳時間

Zookeeper 伺服器之間或用戶端與伺服器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。tickTime以毫秒為機關。

tickTime=2000

2.initLimit:LF初始通信時限

叢集中的follower伺服器(F)與leader伺服器(L)之間初始連接配接時能容忍的最多心跳數(tickTime的數量)。

initLimit=5

3.syncLimit:LF同步通信時限

叢集中的follower伺服器與leader伺服器之間請求和應答之間能容忍的最多心跳數(tickTime的數量)。

syncLimit=2

4.dataDir:資料檔案目錄

Zookeeper儲存資料的目錄,預設情況下,Zookeeper将寫資料的日志檔案也儲存在這個目錄裡。

dataDir=/usr/zookeeper/data

5.clientPort:用戶端連接配接端口

用戶端連接配接 Zookeeper 伺服器的端口,Zookeeper 會監聽這個端口,接受用戶端的通路請求。

clientPort=2181

6.伺服器名稱與位址:叢集資訊(伺服器編号,伺服器位址,LF通信端口,選舉端口)

這個配置項的書寫格式比較特殊,規則如下:

server.N=YYY:A:B

server.1=zookeeper1:2888:3888

server.2=zookeeper2:2888:3888

server.3=zookeeper3:2888:3888

5、 建立myid檔案:在zoo.cfg中設定的dataDir對應的目錄中(/usr/local/zk/cloud/zookeeper-3.4.5/data)建立myid檔案

并添加如下内容:echo “N” > myid (N為唯一id(最友善可以寫機器名稱最後一位數字))

添加内容以後:touch myid

注意三台機器都要設定

6、 啟動zookeeper進入zookeeper-3.4.5的bin目錄:./zkServer.sh start 注意三台機器都要啟動

使用 ./zkServer.sh status 可以檢視狀态,三台機器中有一台會是leader狀态其它是follower狀态

7、 測試zookeeper

進入zookeeper-3.4.5的bin目錄:./zkCli.sh

建立一個檔案 create /name “xiangping”

使用另外一台機器登入zookeeper: ./zkCli.sh

get /name -如果能擷取到xiangping就可以了

繼續閱讀