zookeeper搭建

搭建步驟:

安裝jdk1.8,設置好環境變量數據庫

實驗環境:至少準備三臺虛擬機apache

     192.168.182.100vim

192.168.182.101服務器

192.168.182.102數據結構

下載zookeeper:http://mirrors.hust.edu.cn/apache/zookeeper/框架

上傳服務器,解壓到指定目錄運維

vim /etc/profile分佈式

添加:性能

# zookeeper
export ZK_HOME=/usr/local/zookeeper-3.4.11
export PATH=$ZK_HOME/bin:$PATH
#能夠直接使用zookeeper腳本
cd /usr/local/zookeeper-3.4.10/conf/
mv zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改與添加:

dataDir=/zookeeper/dataui

#指定數據目錄位置

server.0=192.168.182.100:2888:3888

server.1=192.168.182.101:2888:3888

server.2=192.168.182.102:2888:3888

#server.X=A:B:C

#X-表明服務器編號,也就是myid

#A-表明ip

#B-表明server系統之間通信端口

#C-表明選舉leader通信用的

mkdir -p /zookeeper/data

#建立數據目錄,配置文件指定

cd /zookeeper/data/

vim myid

添加:

0

#對應配置文件server.x中的x

source /etc/profile
zkServer.sh start
zkServer.sh status
zkServer.sh start-foreground
#查看啓動過程

其他虛擬機一樣設置,除myid內容不一樣

ZooKeeper增長Observer部署模式提升性能

添加一臺虛擬機:192.168.182.103

安裝zookeeper和jdk

cd /usr/local/zookeeper-3.4.10/conf/
mv zoo_sample.cfg zoo.cfg
vim zoo.cfg

修改和添加:

dataDir=/zookeeper/data

#數據目錄位置

peerType=observer

server.0=192.168.182.100:2888:3888

server.1=192.168.182.101:2888:3888

server.2=192.168.182.102:2888:3888

server.3=192.168.182.103:2888:3888:observer

#其餘zookeeper服務器也須要添加這一條

mkdir -p /zookeeper/data

cd /zookeeper/data/

vim myid

添加:

3

source /etc/profile
zkServer.sh start

zookeeper客戶端操做命令

在服務端運行本機客戶端,使用以下命令:zkCli.sh鏈接服務端成功

若鏈接不一樣的主機,可以使用以下命令:zkCli.sh -server ip:port

可使用幫助命令help來查看客戶端的操做

建立節點

  使用create命令,能夠建立一個Zookeeper節點, 如

  create [-s] [-e] path data acl

  其中,-s或-e分別指定節點特性,順序或臨時節點,若不指定,則表示持久節點;acl用來進行權限控制。

建立順序節點

  使用 create -s /zk-test 123 命令建立zk-test順序節點,能夠看到建立的zk-test節點後面添加了一串數字以示區別。

建立臨時節點

  使用 create -e /zk-temp 123 命令建立zk-temp臨時節點,臨時節點在客戶端會話結束後,就會自動刪除,下面使用quit命令退出客戶端,再次使用客戶端鏈接服務端,並使用ls / 命令查看根目錄下的節點,能夠看到根目錄下已經不存在zk-temp臨時節點了。

建立永久節點

  使用 create /zk-permanent 123 命令建立zk-permanent永久節點,能夠看到永久節點不一樣於順序節點,不會自動在後面添加一串數字。

讀取節點

  與讀取相關的命令有ls 命令和get 命令,ls命令能夠列出Zookeeper指定節點下的全部子節點,只能查看指定節點下的第一級的全部子節點;get命令能夠獲取Zookeeper指定節點的數據內容和屬性信息。其用法分別以下

  ls path [watch]

  get path [watch]

  ls2 path [watch]

更新節點

  使用set命令,能夠更新指定節點的數據內容,用法以下

  set path data [version]

  其中,data就是要更新的新內容,version表示數據版本,如將/zk-permanent節點的數據更新爲456,可使用以下命令:set /zk-permanent 456,如今dataVersion已經變爲1了,表示進行了更新。

刪除節點

  使用delete命令能夠刪除Zookeeper上的指定節點,用法以下

  delete path [version]

  其中version也是表示數據版本,使用delete /zk-permanent 命令便可刪除/zk-permanent節點

能夠看到,已經成功刪除/zk-permanent節點。值得注意的是,若刪除節點存在子節點,那麼沒法刪除該節點,必須先刪除子節點,再刪除父節點。

zookeeper原理

Zookeeper是一個分佈式協調框架,有不錯的性能,也通過許多公司的驗證,因此在不少場景都有使用。你們通常用Zookeeper來實現服務發現(相似DNS),配置管理,分佈式鎖,leader選舉等。在這些場景中,Zookeeper成爲了一個被依賴的核心組件,Zookeeper的穩定性是須要特別關注的。
  那麼在打算運維一套Zookeeper集羣以前,咱們先了解一些Zookeeper的基本原理。
  集羣裏分三種角色: Leader, Follower和Observer。Leader和Follower參與投票,Observer只會『聽』投票的結果,不參與投票。
  投票集羣裏的節點數要求是奇數
  一個集羣容忍掛掉的節點數的等式爲 N = 2F + 1,N爲投票集羣節點數,F爲能同時容忍失敗節點數。好比一個三節點集羣,能夠掛掉一個節點,5節點集羣能夠掛掉兩個...
  一個寫操做須要半數以上的節點ack,因此集羣節點數越多,整個集羣能夠抗掛點的節點數越多(越可靠),可是吞吐量越差。
  Zookeeper裏全部節點以及節點的數據都會放在內存裏,造成一棵樹的數據結構。而且定時的dump snapshot到磁盤。
  Zookeeper的Client與Zookeeper之間維持的是長鏈接,而且保持心跳,Client會與Zookeeper之間協商出一個Session超時時間出來(其實就是Zookeeper Server裏配置了最小值,最大值,若是client的值在這兩個值之間則採用client的,小於最小值就是最小值,大於最大值就用最大值),若是在Session超時時間內沒有收到心跳,則該Session過時。
  Client能夠watch Zookeeper那個樹形數據結構裏的某個節點或數據,當有變化的時候會獲得通知。

zookeeper配置文件詳解

配置conf/zoo.conf文件 

tickTime=2000

dataDir=/usr/zdatadir

dataLogDir=/usr/zlogdir

clientPort=2181

initLimit=5

syncLimit=2

server.1=cloud:2888:3888

server.2=cloud02:2888:3888

server.3=cloud03:2888:3888

server.4=cloud04:2888:3888

server.5=cloud05:2888:3888

tickTime :基本事件單元,以毫秒爲單位。它用來控制心跳和超時,默認狀況下最小的會話超時時間爲兩倍的 tickTime。 
dataDir是存放內存數據庫快照的位置; 
dataLogDir :是事務日誌目錄; 
clientPort是client鏈接的端口。 
其中server.X表明組成整個服務的機器,當服務啓動時,會在數據目錄下查找這個文件myid,這個文件中存有服務器的號碼。 
initLimit:這個配置項是用來配置 Zookeeper 接受客戶端(這裏所說的客戶端不是用戶鏈接 Zookeeper 服務器的客戶端,而是 Zookeeper 服務器集羣中鏈接到 Leader 的 Follower 服務器)初始化鏈接時最長能忍受多少個心跳時間間隔數。當已經超過5個心跳的時間(也就是 tickTime)長度後 Zookeeper服務器尚未收到客戶端的返回信息,那麼代表這個客戶端鏈接失敗。總的時間長度就是 5*2000=10 秒 
syncLimit:這個配置項標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 2*2000=4 秒  server.A=B:C:D:其中 A 是一個數字,表示這個是第幾號服務器;B 是這個服務器的 ip 地址;C 表示的是這個服務器與集羣中的 Leader 服務器交換信息的端口;D 表示的是萬一集羣中的 Leader 服務器掛了,須要一個端口來從新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時服務器相互通訊的端口。若是是僞集羣的配置方式,因爲 B 都是同樣,因此不一樣的 Zookeeper 實例通訊端口號不能同樣,因此要給它們分配不一樣的端口號。  除了修改 zoo.cfg 配置文件,集羣模式下還要配置一個文件 myid,這個文件在 dataDir 目錄下,這個文件裏面就有一個數據就是 A 的值,Zookeeper 啓動時會讀取這個文件,拿到裏面的數據與 zoo.cfg 裏面的配置信息比較從而判斷究竟是那個 server。 

相關文章
相關標籤/搜索