ZooKeeper(Zookeeper的單機安裝)
阿新 • • 發佈:2020-10-21
1、ZooKeeper概述
(1)概述
zooKeeper是一個經典的分散式資料—致性解決方案,致力於為分散式應用提供一個高效能、高可用,且具有嚴格順序訪問控制能力的分散式協調儲存服務。
- 維護配置資訊:能夠保證配置資訊的高可用和配置檔案的一致性
- 分散式鎖服務:一個叢集是-個分散式系統,由多臺伺服器組成。為了提高併發度和可靠性,多臺伺服器上執行著同種服務。當多個服務在執行時就需要協調各服務的進度,有時候需要保證當某個服務在進行某個操作時,其他的服務都不能進行該操作,即對該操作進行加鎖,如果當前機器掛掉後,釋放鎖並fail over到其他的機器繼續執行該服務。
- 叢集管理:一個叢集有時會因為各種軟硬體故障或者網路故障,出現某些伺服器掛掉而被移除叢集,而某些伺服器加入到叢集中的情況,zookeeper會將這些伺服器加入移出的情況通知給叢集中的其他正常工作的伺服器,以及時調整儲存和計算等任務的分配和執行等。此外zookeeper還會對故障的伺服器做出診斷並嘗試修復。
- 生成分散式唯一ID:在過去的單庫單表型系統中,通常可以使用資料庫欄位自帶的auto_increment屬性來自動為每條記錄生成一個唯一的ID。 但是分庫分表後,就無法在依靠資料庫的auto_increment屬性來唯一標識一 條記錄了。此時我們就可以用zookeeper在分散式環境下生成全域性唯一ID。 做法如下:每次要生成一個新id時, 建立一個持久順序節點,建立操作返回的節點序號,即為新ld, 然後把比自己節點小的刪除即可資料模型
(2)資料模型
ZooKeeper的資料節點是樹狀的,每一個節點稱為znode
(3)屬性
- cZxid:資料節點建立時的事務ID
- ctime:資料節點建立時的時間
- mZxid:資料節點最後一-次更新時的事務ID
- mtime:資料節點最後- -次更新時的時間
- pZxid:資料節點的子節點最後一次被修改時的事務ID
- cversion:子節點的更改次數
- dataVersion:節點資料的更改次數
- acIVersion:節點的ACL的更改次數
- ephemeralOwner:如果節點是臨時節點,則表示建立該節點的會話的SessionID;如果節點是持久節點,則該屬性值為0
- dataLength:資料內容的長度
- numChildren:資料節點當前的子節點個數
2、在虛擬機器中安裝jdk
(1)建立一個新的使用者
使用的是useradd和passwd命令
(2)解壓jdk
tar -xzvf jdk-8u131-linux-x64.tar.gz
(3)配置jdk變數
[root@zhai /]# cd home
[root@zhai home]# ls
20191211 20191213 221 223 zhai1997 zhang zhb1 zhb3 zhb5 zzz
20191212 20191214 222 zhai zhaiuser zhb zhb2 zhb4 zookeeper
[root@zhai home]# cd zookeeper
[root@zhai zookeeper]# ls
jdk1.8.0_131 jdk-8u131-linux-x64.tar.gz zookeeper-3.4.10.tar.gz
[root@zhai zookeeper]# vi .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
iiiii
# User specific environment and startup programs
JAVA_HOME=/home/zookeeper/jdk1.8.0_131
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
~
~
~
~
(4)驗證
[root@zhai zookeeper]# cd /
[root@zhai /]# java -version
java version "1.7.0_45"
OpenJDK Runtime Environment (rhel-2.4.3.3.el6-i386 u45-b15)
OpenJDK Client VM (build 24.45-b08, mixed mode, sharing)
3、在虛擬機器中安裝zookeeper
(1)解壓
tar -xzvf zookeeper-3.4.10.tar.gz
(2)進入zookeeper的conf目錄
cd /home/zookeeper/zookeeper-3.4.10/conf
(3)複製配置檔案
cp zoo_sample.cfg zoo.cfg
(4)在zookeeper的根目錄下建立data目錄
[root@zhai zookeeper-3.4.10]# mkdir data
[root@zhai zookeeper-3.4.10]# ls
bin data ivy.xml README_packaging.txt zookeeper-3.4.10.jar
build.xml dist-maven lib README.txt zookeeper-3.4.10.jar.asc
conf docs LICENSE.txt recipes zookeeper-3.4.10.jar.md5
contrib ivysettings.xml NOTICE.txt src zookeeper-3.4.10.jar.sha1
(5)進入conf目錄並編輯zoo.cfg檔案
此路徑用於儲存zookeeper中資料的記憶體快照、及事物日誌檔案,將配置檔案中的路徑修改為手動建立的目錄即可
(6)啟動zookeeper
[root@zhai /]# cd /home/zookeeper/zookeeper-3.4.10/bin
[root@zhai bin]# .zkServer.sh start
-bash: .zkServer.sh: command not found
[root@zhai bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
(7)停止zookeeper
[root@zhai bin]# ./zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
(8)檢視狀態
[root@zhai bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
(9)登入
[root@zhai bin]# ./zkCli.sh
Connecting to localhost:2181
2020-10-22 03:41:53,454 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT