zookeeper集羣搭建

zookeeper編程

1zookeeper功能

1-1、配置管理

集中管理配置文件實現服務治理vim

1-2命名服務

    如爲了經過網絡訪問一個系統,咱們得知道對方的IP地址,可是IP地址對人很是不友好,這個時候咱們就須要使用域名來訪問。可是計算機是不能別域名的。怎麼辦呢?若是咱們每臺機器裏都備有一份域名到IP地址的映射,這個卻是能解決一部分問題,可是若是域名對應的IP發生變化了又該怎麼辦呢?因而咱們有了DNS這個東西。咱們只須要訪問一個你們熟知的(known)點,它就會告訴你這個域名對應的IP是什麼。在咱們的應用中也會存在不少這類問題,特別是在咱們的服務特別多的時候,若是咱們在本地保存服務的地址的時候將很是不方便,可是若是咱們只須要訪問一個你們都熟知的訪問點,這裏提供統一的入口,那麼維護起來將方便得多了。bash

1-3、分佈式鎖

    如在一個分佈式環境中,爲了提升可靠性,咱們的集羣的每臺服務器上都部署着一樣的服務。可是,一件事情若是集羣中的每一個服務器都進行的話,那相互之間就要協調,編程起來將很是複雜。而若是咱們只讓一個服務進行操做,那又存在單點。一般還有一種作法就是使用分佈式鎖,在某個時刻只讓一個服務去幹活,當這臺服務出問題的時候鎖釋放,當即fail over到另外的服務。這在不少分佈式系統中都是這麼作,這種設計有一個更好聽的名字叫Leader Election(leader選舉)。好比HBaseMaster就是採用這種機制。但要注意的是分佈式鎖跟同一個進程的鎖仍是有區別的,因此使用的時候要比同一個進程裏的鎖更謹慎的使用服務器

1-4、集羣管理

    在分佈式的集羣中,常常會因爲各類緣由,好比硬件故障,軟件故障,網絡問題,有些節點會進進出出。有新的節點加入進來,也有老的節點退出集羣。這個時候,集羣中其餘機器須要感知到這種變化,而後根據這種變化作出對應的決策。好比咱們是一個分佈式存儲系統,有一箇中央控制節點負責存儲的分配,當有新的存儲進來的時候咱們要根據如今集羣目前的狀態來分配存儲節點。這個時候咱們就須要動態感知到集羣目前的狀態。還有,好比一個分佈式的SOA架構中,服務是一個集羣提供的,當消費者訪問某個服務時,就須要採用某種機制發現如今有哪些節點能夠提供該服務(這也稱之爲服務發現,好比Alibaba開源的SOA框架Dubbo就採用了Zookeeper做爲服務發現的底層機制)。還有開源的Kafka隊列就採用了Zookeeper做爲Cosnumer的上下線管理。網絡

2、單機部署

2-1、解壓

tar xzvf filename架構

mv filename zookeeper框架

2-2、建立數據和日誌目錄

cd zookeeper分佈式

mkdir data logs測試

2-3、添加配置文件

cd  confspa

cp  zoo_sample.cfg  zoo.cfg

修改文件 zoo.cfg

tickTime=2000

dataDir=/home/live/zookeeper/data

dataLogDir=/home/live/zookeeper/logs

clientPort=2181

2-4、添加環境變量

vim  ~/.bash_prifile

$HOME/zookeeper/bin添加到PATH

2-5、寫啓動腳本

mkdir  ~/scripts

cd scripts

vim zkserver.sh

#!/bin/sh

 

zookeeper_dir=/home/live/zookeeper

zookeeper_command_path=/home/live/zookeeper/bin

zookeeper_process="zookeeper"

 

case $1 in

start)

    cd $zookeeper_command_path;./zkServer.sh start

    ;;

stop)

    cd $zookeeper_command_path;./zkServer.sh stop

    ;;

restart)

    cd $zookeeper_command_path;./zkServer.sh stop;

    cd $zookeeper_command_path;./zkServer.sh start

    ;;

status)

    Process=`ps -ef|grep ${zookeeper_process}|grep -v grep |grep -v $0| wc -l`

      if [ "$Process" = 0 ];then

       echo "$process stopping."

       cd $zookeeper_command_path;./zkServer.sh status

     else

       echo "$process starting."

       cd $zookeeper_command_path;./zkServer.sh status

     fi

 

    ;;

*)

 echo "Usage: $0 {start|stop|restart|status}"

esac

2-6、啓動zookeeper

sh scripts/zkserver.sh start

2-7、測試

1、啓動客戶端

~/zookeeper/bin/zkCli.sh -server z1:2181

2、建立節點

create /asd asd

3、查看節點的值

get  /asd

3、多機部署

3-1、解壓

tar xzvf filename

mv filename zookeeper

3-2、建立數據和日誌目錄

cd zookeeper

mkdir data logs

vim  data/myid

寫入1,……n

3-3、添加配置文件

1、配置主機名

vim /etc/hosts

……

2zookeeper配置文件

cd  conf

cp  zoo_sample.cfg  zoo.cfg

修改文件 zoo.cfg

tickTime=2000

dataDir=/home/live/zookeeper/data

dataLogDir=/home/live/zookeeper/logs

clientPort=2181

server.n=主機名:2888:3888

前一個端口表示的是這個服務器與集羣中的 Leader 服務器交換信息的端口;後一個端口 表示的是萬一集羣中的 Leader 服務器掛了,須要一個端口來從新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時服務器相互通訊的端口

3-4、添加環境變量

vim  ~/.bash_prifile

$HOME/zookeeper/bin添加到PATH

3-5、寫啓動腳本

mkdir  ~/scripts

cd scripts

vim zkserver.sh

#!/bin/sh

 

zookeeper_dir=/home/live/zookeeper

zookeeper_command_path=/home/live/zookeeper/bin

zookeeper_process="zookeeper"

 

case $1 in

start)

    cd $zookeeper_command_path;./zkServer.sh start

    ;;

stop)

    cd $zookeeper_command_path;./zkServer.sh stop

    ;;

restart)

    cd $zookeeper_command_path;./zkServer.sh stop;

    cd $zookeeper_command_path;./zkServer.sh start

    ;;

status)

    Process=`ps -ef|grep ${zookeeper_process}|grep -v grep |grep -v $0| wc -l`

      if [ "$Process" = 0 ];then

       echo "$process stopping."

       cd $zookeeper_command_path;./zkServer.sh status

     else

       echo "$process starting."

       cd $zookeeper_command_path;./zkServer.sh status

     fi

 

    ;;

*)

 echo "Usage: $0 {start|stop|restart|status}"

esac

3-6、啓動zookeeper

sh scripts/zkserver.sh start

3-7、測試

1、啓動客戶端

~/zookeeper/bin/zkCli.sh -server z1:2181

2、建立節點

create /asd asd

3、查看節點的值

get  /asd

4zookeeper集羣必須配置jdk

vim   /etc/profile

JAVA_HOME=?/jdk1.7.0_75

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

JRE_HOME=$JAVA_HOME/jre

 

export JAVA_HOME

export CLASSPATH

export JRE_HOME

export PATH

5、升級

5-1、查看節點的狀態

echo stat | nc localhost 2191查看zookeeper狀態,先從follower開始升級,最後升級leader

5-2、下載新版本

如部署時操做

配置等與部署時一致

5-3複製新版本目錄到其它節點一份

scp -r -P2828 /zookeeper-3.4.8/ root@192.168.14.36:

5-4割接版本

1中止老版本服務

/usr/local/zookeeper/bin/zkServer.sh stop

2刪除老版本軟鏈接

rm -rf /usr/local/zookeeper

3作新版本軟鏈接

ln -sv /usr/local/zookeeper-3.4.8/ /usr/local/zookeeper

4開啓新版本服務

/usr/local/zookeeper/bin/zkServer.sh start

5查看狀態,觀察集羣是否創建起來。

/usr/local/zookeeper/bin/zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg

Mode: follower

6查看升級後數據是否還在

使用ZooInspector查看

相關文章
相關標籤/搜索