歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Zookeeper分布式安裝配置

Zookeeper分布式安裝配置

日期:2017/3/1 11:58:53   编辑:關於Linux

概述

1、ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。

2、ZooKeeper的目標就是封裝好復雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。

3、ZooKeeper包含一個簡單的原語集,提供Java和C的接口。

4、ZooKeeper代碼版本中,提供了分布式獨享鎖、選舉、隊列的接口,代碼在zookeeper-3.4.3\src\recipes。其中分布鎖和隊列有Java和C兩個版本,選舉只有Java版本。

ZooKeeper的基本運轉流程:

1、選舉Leader。

2、同步數據。

3、選舉Leader過程中算法有很多,但要達到的選舉標准是一致的。

4、Leader要具有最高的zxid。

5、集群中大多數的機器得到響應並follow選出的Leader。

Zookeeper下載與安裝

下載

官網:https://zookeeper.apache.org/

大家可以去官網下載自己需要的版本,例如我需要安裝的是3.4.6版本:

\

安裝

Zookeeper的運行需要Java環境,所以需要首先安裝JDK,JDK的安裝可以參考:

http://blog.csdn.net/u011204847/article/details/51002072

把下載的壓縮包拷貝到想要安裝的目錄,然後解壓:

[root@master01 software]# tar -xzf zookeeper-3.4.6.tar.gz

解壓之後文件目錄:

\

加入環境變量:

vi /etc/profile
export ZOOKEEPER_HOME=/usr/local/software/zookeeper-3.4.6
export PATH=.:$PATH:$ZOOKEEPER_HOME/bin

使環境變量生效:

source /etc/profile


Zookeeper配置

單機配置

在zookeeper目錄下創建目錄data:

[root@master01 software]# cd zookeeper-3.4.6
[root@master01 zookeeper-3.4.6]# mkdir data

然後到zookeeper / conf 目錄下,修改zoo_sample.cfg名稱為zoo.cfg

\

然後修改配置文件zoo.cfg:

vi zoo.cfg   //單機只需要修改dataDir為之前創建的data目錄即可
\

配置好後就可以啟動了:

切換到Zookeeper的bin目錄下,然後

./zkServer.sh start    //開啟Zookeeper

其他命令:

./zkServer.sh stop    //關閉Zookeeper
./zkServer.sh status   //查看Zookeeper狀態
./zkCli.sh   //打開Zookeeper客戶端

分布式配置

這裡我使用三台主機進行Zookeeper的分布式配置。

1、首先,我們在之前配置的單機基礎上繼續修改配置文件:

2、在之前的配置文件末尾添加如下內容:

server.0=master01:2888:3888   //master01為你的主機名,前面的0代表的是給這台主機配的ID
server.1=slave01:2888:3888    //同理slave01也是主機名,可以使用IP
server.2=slave02:2888:3888

3、然後在我們之前建立的data文件中使用命令:

echo 0 myid   //在data目錄建立myid文件,並寫入0(與上面的配置中server.0中的0對應)

4、將這台主機配置好的Zookeeper整個目錄都拷貝到另外兩台主機的相同路徑下,並在那兩台上修改myid為1和2。

5、修改另外兩台主機/etc/profile文件,使得它們的Zookeeper環境配置和第一台主機一樣

6、在每台主機上面開啟Zookeeper後,查看狀態

開啟三台主機中Zookeeper後,查看狀態會發現有一個leader以及兩個follower,此時我們的Zookeeper分布式環境以及搭建好了

\

注意:

1、上面我可以使用類似 ssh slave01命令直接登錄到slave01和slave02主機是因為我在三台主機之間做了免密碼登錄。

2、在配置文件和命令中可以直接使用主機名是因為我做了IP和主機名的映射。

3、我們可以在登錄到另一台主機後,直接使用zkServer.sh腳本是因為我們之前配置了Zookeeper環境並使之生效。

附加配置

在安裝好Zookeeper分布式環境後,一般情況下需要登錄到每台主機上面去啟動Zookeeper,比較繁瑣,所以我們可以寫一個shell腳本來啟動和關閉這個Zookeeper集群。

在寫腳本之前我們需要先解決一個問題,如果我們直接使用腳本操作去啟動另外的主機上面Zookeeper,會發現啟動不成功。這涉及到登錄shell和非登錄shell的問題。關於Shell腳本和登錄/非登錄shell可以參考:http://blog.csdn.net/u011204847/article/details/51184883

這裡我直接寫解決方法:

方法一:

修改Zookeeper / bin 目錄下的zkEnv.sh,在圖示位置或者文件開頭添加你的JDK路徑。

\

方法二:把profile的配置信息echo到.bashrc中 echo 'source /etc/profile' >> ~/.bashrc

方法三:腳本代碼中添加”source /etc/profile;”,例如:ssh $i "source /etc/profile;/usr/local/software/zookeeper-3.4.6/bin/zkServer.sh start"

Shell啟動腳本示例:

#!/bin/bash
for i in master01 slave01 slave02
do
 	ssh $i "/usr/local/software/zookeeper-3.4.6/bin/zkServer.sh start"
done

腳本執行示例:

\

Shell停止腳本示例:

#!/bin/bash
for i in master01 slave01 slave02
do
        ssh $i "/usr/local/software/zookeeper-3.4.6/bin/zkServer.sh stop"
done

腳本執行示例:

\

Java代碼操作Zookeeper示例

Pom依賴:


    org.apache.curator
    curator-framework
    2.8.0

代碼示例:

@Test   //測試類:測試Zookeeper連接
public void test13() throws Exception{
    //指定zookeeper集群的地址
    String connectString = "192.168.33.130:2181,192.168.33.131:2181,192.168.33.132:2181";
    //1000 :代表是重試時間間隔     3:表示是重試次數
    ExponentialBackoffRetry retryPolicy = new ExponentialBackoffRetry(1000, 3);
    //使用curator創建一個zk鏈接
    CuratorFramework client = CuratorFrameworkFactory.newClient(connectString, retryPolicy);
    //啟動連接
    client.start();
    InetAddress localHost = InetAddress.getLocalHost();
    String ip = localHost.getHostAddress();
    client.create()
        .creatingParentsIfNeeded()   //如果父節點不存在,這創建
        .withMode(CreateMode.EPHEMERAL)  //創建節點類型為臨時節點
        .withACL(Ids.OPEN_ACL_UNSAFE)
        .forPath("/Spider/"+ip);
}

打印結果:

\

注意:

由於建立的是臨時節點,所以默認40秒後,這個值會消失。臨時節點的這個特性可以用於監控一些程序的運行狀態。

Copyright © Linux教程網 All Rights Reserved