zookeeper集羣搭建

系統版本html

slave1java

[root@192 bin]# cat /etc/centos-releaselinux

CentOS Linux release 7.2.1511 (Core)apache

[root@192 bin]# uname -avim

Linux 192.168.1.102 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linuxcentos

 

slave1slave2服務器

[root@192 bin]# cat /etc/centos-releaseoracle

CentOS release 6.7 (Final)函數

[root@192 bin]# uname -a測試

Linux 192.168.1.103 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

 

IP

slave1 192.168.1.102/24

slave2 192.168.1.103/24

slave3 192.168.1.105/24

 

主機名稱到IP地址映射配置:(全部機器都要設置)

vi /etc/hosts

    192.168.1.102   slave1

    192.168.1.103   slave2

    192.168.1.105   slave3

測試映射連通性:

[root@192 bin]# ping slave1

[root@192 bin]# ping slave2

[root@192 bin]# ping slave3

開始安裝:

slave1端:

[root@192 ~]# mkdir /opop

[root@192 ~]# cd /opop

[root@192 opop]# yum -y install wget

[root@192 opop]# wget

http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.tar.gz?AuthParam=1510054639_b19a5f91ff21950bbc82421241aecebc    #下載jdk1.8.0_151

[root@192 opop]# tar -zxvf jdk-8u151-linux-x64.tar.gz

[root@192 opop]# mv jdk1.8.0_151/ jdk1.8

[root@192 opop]# vi /etc/profile     #在最底下添加設置jdk的環境變量

      #set zookeeper environment

      export JAVA_HOME=/opop/jdk1.8

      export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

      export PATH=$JAVA_HOME/bin/:$PATH

[root@192 opop]# source /etc/profile     #使變量當即生效

[root@192 opop]# java -version       #檢查java有沒成功裝上(查看java的版本)

[root@192 opop]# wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz         #下載zookeeper3.4.8

[root@192 opop]# tar -zxvf zookeeper-3.4.8.tar.gz

[root@192 opop]# cd zookeeper-3.4.8/conf

[root@192 conf]# cp zoo_sample.cfg zoo.cfg

[root@192 conf]#  vi zoo.cfg

      tickTime=2000            #默認項

      initLimit=10           #默認項

      syncLimit=5           #默認項

      dataDir=/tmp/zookeeper/data   #修改項

      clientPort=2181 #默認項

      server.1=slave1:2888:3888       #新加項,2888端口號是zookeeper服務之間通訊的端口

      server.2=slave2:2888:3888      #新加項,3888端口是zookeeper與其餘應用程序通訊的端口

      server.3=slave3:2888:3888     #新加項

      maxClientCnxns=60       #按開啓項

釋:initLimit:配置zookeeper接收客戶端(這裏所說的客戶端不是用戶鏈接zookeeper服務器的客戶端,而是指zookeeper服務器集羣中鏈接到LeaderFollower服務器)初始化鏈接時最長能忍受多少個心跳時間間隔數。當已經超過10個心跳時間長度後zookeeper服務器尚未收到客戶端的返回消息,那麼代表這個客戶端鏈接失敗。總的時間長度就是5*2000=10秒。

syncLimit:配置LeaderFollower之間發送消息,請求和應答時間長度最長不能超過多少個ticketTime的時間長度,總的時間長度就是2*2000=4秒。

server.A=B:C: D 其中A是一個數字,表示這是第幾號服務器。B是這臺服務器的IP地址。C表示這臺服務器與集羣中的Leader服務器交換信息的端口。D表示的是萬一集羣中的Leader服務器掛了,須要一個端口來從新進行選舉,選出一個新的Leader,這個端口就是用來執行選舉時服務器相互通訊的端口。若是是僞集羣的配置方式,因爲B都是同樣,因此不一樣的zookeeper實例通訊端口號不能同樣,因此要給他們分配不一樣的端口號。

[root@192 opop]# scp -r /opop/zookeeper-3.4.8 slave2:/opop/

[root@192 opop]# scp -r /opop/zookeeper-3.4.8 slave3:/opop/

[root@192 opop]# scp -r /opop/jdk1.8/ slave2:/opop/

[root@192 opop]# scp -r /opop/jdk1.8/ slave3:/opop/

 

[root@192 opop]# mkdir -p /tmp/zookeeper/data/     #zoo.cfg文件中的dataDir指定的目錄

[root@192 opop]# echo 1 /tmp/zookeeper/myid        #建立一個myid文件,裏面內容爲一個數字用來標識當前主機

釋:編輯myid文件,並在對應的IP的機器上輸入對應的編號。如在zookeepermyid文件內容就是1.若是隻在單點上進行安裝配置,那麼只有一個server.1

[root@192 opop]# cat /tmp/zookeeper/myid     #查看myid

[root@192 opop]# cd zookeeper-3.4.8/bin/

[root@192 opop]# ./zkServer.sh start         #啓動zookeeper

[root@192 opop]# tail -500f zookeeper.out     #查看zookeeper服務輸出信息

slave2slave3端:

注:由於slave1端已經將包發送到slave2slave3了,so。。。。

[root@192 ~]# iptables -F

[root@192 ~]# setenforce 0

[root@192 ~]# mkdir /opop

[root@192 ~]# cd /opop

[root@192 opop]# mkdir -p /tmp/zookeeper

[root@192 opop]# echo 2 > /tmp/zookeeper/myid

[root@192 opop]# vim /etc/profile

      #set zookeeper environment

      export JAVA_HOME=/opop/jdk1.8

      export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

      export PATH=$JAVA_HOME/bin/:$PATH

[root@192 opop]# source /etc/profile

[root@192 opop]# java -version

[root@192 opop]# vim /opop/zookeeper-3.4.8/conf/zoo.cfg

      tickTime=2000              #默認項

      initLimit=10             #默認項

      syncLimit=5            #默認項

      dataDir=/tmp/zookeeper        #修改項

      clientPort=2181          #默認項

      server.1=slave1:2888:3888    #新加項

      server.2=slave2:2888:3888      #新加項

      server.3=slave3:2888:3888   #新加項

      maxClientCnxns=60       #按需打開項

[root@192 opop]# cd zookeeper-3.4.8/bin/

[root@192 bin]#  ./zkServer.sh start        #啓動zookeeper

[root@192 bin]#  ./zkServer.sh status     #查看狀態

 

#附:裝了一次jdk9.0.1zookeeper3.4.9centos7上作出了點QuorumPeerMain的問題,這個牽扯到main函數(c語言),至於這個問題咱們不去深研究。

後來換成jdk1.8.0zookeeper3.4.8完成搭建zookeeper集羣。

官方解釋:http://zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html

ZooKeeper會話

ZooKeeper客戶端經過使用語言綁定建立服務的句柄來創建與ZooKeeper服務的會話。一旦建立完成,句柄將以CONNECTING狀態啓動,而且客戶端庫嘗試鏈接到組成ZooKeeper服務的服務器之一,此時它將切換到CONNECTED狀態。在正常的操做過程當中將處於這兩個狀態之一。若是發生不可恢復的錯誤,例如會話到期或身份驗證失敗,或者應用程序顯式關閉了句柄,則句柄將移至CLOSED狀態。下圖顯示了ZooKeeper客戶端可能的狀態轉換:

 

要建立客戶端會話,應用程序代碼必須提供一個鏈接字符串,其中包含一個逗號分隔的hostport對列表,每一個對應於一個ZooKeeper服務器(例如「127.0.0.1:4545」或「127.0.0.1:3000,127.0.0.1 3001,127.0.0.13002" )。ZooKeeper客戶端庫將選擇一個任意的服務器並嘗試鏈接到它。若是此鏈接失敗,或者客戶端因爲某種緣由而與服務器斷開鏈接,則客戶端將自動嘗試列表中的下一個服務器,直到(從新)創建鏈接。

 

#####  至於zookeeper的集羣原理去網上仔細看幾遍相信屏幕前的你都能懂   good luck ~~########

相關文章
相關標籤/搜索