Zookeeper集羣java
1、實驗環境linux
Zookeeper集羣環境安裝過程詳解apache
Zookeeper是一個分佈式開源框架,提供了協調分佈式應用的基本服務,它向外部應用暴露一組通用服務——分佈式同步(Distributed Synchronization)、命名服務(Naming Service)、集羣維護(Group Maintenance)等,簡化分佈式應用協調及其管理的難度,提供高性能的分佈式服務。ZooKeeper自己能夠以單機模式安裝運行,不過它的長處在於經過分佈式ZooKeeper集羣(一個Leader,多個Follower),基於必定的策略來保證ZooKeeper集羣的穩定性和可用性,從而實現分佈式應用的可靠性。服務器
Zookeeper安裝和配置框架
Zookeeper有三種不一樣的運行環境,包括:單機環境、集羣環境和集羣僞分佈式環境。分佈式
環境準備ide
1、修改主機名性能
2、配置/etc/hosts文件測試
#vi /etc/hostsurl
安裝java jdk-7u65-linux-x64.gz
#tar zxf jdk-7u65-linux-x64.gz
#mv jdk1.7.0_65/ /usr/local/java
編輯/etc/profile設置java的環境變量
#vi /etc/profile
export JAVA_HOME=/usr/local/java export PATH=$PATH:$JAVA_HOME/bin #source /etc/profile
#ln -s /usr/local/java/bin /usr/bin
#java -version
2、實驗步驟
在zk01,zk02,zk03主機上安裝zookeeper
1、下載解壓zookeeper
下載地址: http://www.apache.org/dyn/closer.cgi/zookeeper
#mkdir /data
#cd/data
#tar zxf zookeeper-3.4.10.tar.gz
#mv zookeeper-3.4.10 zookeeper
2、配置環境變量/etc/profile
#echo "export ZOOKEEPER_HOME=/data/zookeeper" >> /etc/profile
#echo "export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf" >> /etc/profile
#source/etc/profile //使變量生效
3、集羣部署
在Zookeeper集羣環境下只要一半以上的機器正常啓動了,那麼Zookeeper服務將是可用的。所以署Zookeeper最好使用奇數臺機器,這樣若是有5臺機器,只要3臺正常工做則服務將正常使用。下面咱們將對Zookeeper的配置文件的參數進行設置:
#cd /data/zookeeper/conf
#cp zoo_sample.cfg zoo.cfg
在zk01上配置
#vi zoo.cfg
tickTime: zookeeper中使用的基本時間單位, 毫秒值
dataDir: 數據目錄. 能夠是任意目錄.
dataLogDir: log目錄, 一樣能夠是任意目錄. 若是沒有設置該參數, 將使用和dataDir相同的設置. 這裏沒設置日誌目 錄。(此方法不推薦)
clientPort: 監聽client鏈接的端口號
在zk02上執行:
#scp root@192.168.111.136:/data/zookeeper/conf/zoo.cfg/data/zookeeper/conf/
在zk03上執行:
#scproot@192.168.111.136:/data/zookeeper/conf/zoo.cfg /data/zookeeper/conf/
配置文件中server.id=host:port:port中的第一個port是從機器(follower)鏈接到主機器(leader)的端口號,第二個port
是進行leadership選舉的端口號。 接下來在dataDir所指定的目錄下建立一個文件名爲myid的文件,文件中的內容只有一行,
爲本主機對應的id值,也就是server.id中的id。例如:在服務器1中的myid的內容應該寫入1。 id 被稱爲Server ID, 用來標識 服務器在集羣中的序號。同時每臺 ZooKeeper 服務器上, 都須要在數據目錄(即 dataDir 指定的目錄) 下建立一個 myid 文
件, 該文件只有一行內容, 即對應於每臺服務器的Server ID。 ZooKeeper 集羣中, 每臺服務器上的 zoo.cfg 配置文件內容一 致。 server.1 的 myid 文件內容就是 1。每一個服務器的 myid 內容都不一樣, 且須要保證和本身的 zoo.cfg 配置文件中
server.id=host:port:port的 id 值一致。
id 的範圍是 1 ~ 255
4.遠程複製分發安裝文件
將zk01主機的zookeeper複製到另外兩臺主機中。 *主機修改datadir目錄下myid的id。 集羣模式中, 集羣中的每臺機器都須要 感知其它機器, 在 zoo.cfg 配置文件中, 能夠按照以下格式進行配置, 每一行表明一臺服務器配置。
server.id=host:port:port
server.1 的 myid 文件內容就是 "1"。每一個服務器的 myid 內容都不一樣, 且須要保證和本身的 zoo.cfg 配置文件
中"server.id=host:port:port" 的 id 值一致。
以zk01爲例
#mkdir /data/zookeeper/data
#cd /data/zookeeper/data
#vi myid
1
在zk02上執行:
#scp root@localhost :/data/zookeeper/conf/zoo.cfg/data/zookeeper/conf/
在zk03上執行:
#scp root@localhost :/data/zookeeper/conf/zoo.cfg/data/zookeeper/conf/
5、zk01,zk02,zk03啓動ZooKeeper
在zk01上執行以下操做:
#cd /data/zookeeper/zookeeper/bin
#./zkServer.sh start //啓動zookeeper服務
在 zk02上執行以下操做:
在 zk03上執行以下操做:
6、檢查zookeeper啓動是否成功
在zk01上操做:
#jps
其中,QuorumPeerMain是zookeeper進程,啓動正常。 如上依次啓動了全部機器上的Zookeeper以後能夠經過ZooKeeper的
腳原本查看啓動狀態,包括集羣中各個結點的角色(或是Leader,或是Follower),以下所示,是在ZooKeeper集羣中的每
個結點上查詢的結果:
在 zk01上執行: 查看zookeeper狀態
在 zk02上執行:
在 zk03上執行:
經過上面狀態查詢結果可見,zk02是集羣的Leader,其他的兩個結點是Follower。 另外接到ZooKeeper集羣上。對於客戶
端來講,ZooKeeper是一個總體(ensemble),鏈接到獨享整個集羣的服務,因此,你能夠在任何一個結點上創建到服務
集羣的鏈接,例如:
7、集羣測試:
zookeeper集羣搭建完畢!!!