Zookeeperのインストールと基本的な使用


一、配置と運行
1.1システム環境
ほとんどのJavaオープンソース製品では、オペレーティングシステムとJava環境の両方を含む適切な環境を構築する必要があります.このセクションでは、オペレーティングシステムとJava環境の2つのセクションを含む、ZooKeeperの導入と実行に必要なシステム環境について説明します.
1.1.1オペレーティングシステム
まず、適切なオペレーティングシステムを選択する必要があります.幸いなことに、ZooKeeperは異なるプラットフォームに対するサポートがよく、GNU/Linux、SunSolaris、Win 32、MacOSXなど、現在のほとんどの主流のオペレーティングシステムで正常に動作しています.
1.1.2 Java環境
ZooKeeperはJava言語で記述されているため、その実行環境にはJava環境のサポートが必要であり、1.6以上のバージョンのJavaをダウンロードすることができる.
二、単機とクラスタモード
2.1スタンドアロンモード
2.1.1ダウンロードと構成
Zookeeperダウンロードアドレスにアクセスして圧縮パッケージをダウンロードした後、解凍します.公式にはstableバージョンをダウンロードすることをお勧めします.confディレクトリの下のzoo_sample.cfg=>zoo.cfgを変更します.注意:Zookeeperがデフォルトで読み込んだプロファイル名は後者であることを変更する必要があります.zoo.cfgを開き、dataDirが自分で作成したディレクトリに設定されていることを変更します.
dataDir= /Users/pengweiwei/Downloads/zookeeper-3.4.14/data

2.1.2運転とクローズ
binディレクトリに入ります.または環境変数を割り当てます.運転:./zkServer.sh start
weiweideMacBook-Pro:bin pengweiwei$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /Users/pengweiwei/Downloads/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

クローズ:./zkServer.sh stop2.2クラスタモード
2.2.1構成
クラスタの各マシンのzoo.cfgプロファイルには、構成が追加されています.クラスタモードでは、クラスタ内の各マシンは、クラスタ全体がどのマシンから構成されているかを感知する必要があるため、フォーマットはserver.id=host:port:portです.
server.1=192.168.1.1:2888:3888
server.2=192.168.1.2:2888:3888
server.3=192.168.1.3:2888:3888

ここで、idはサーバIDと呼ばれ、クラスタ内のマシンのマシン番号を識別するために使用される.また、各ZooKeeperマシンでは、データディレクトリ(すなわちdataDirパラメータで指定されたディレクトリ)の下にmyidファイルを作成する必要があります.このファイルは1行の内容しかなく、数字であり、最初の行、すなわち各マシンに対応するServer ID数字です.
ZooKeeperの設計では、クラスタ内のすべてのマシン上zoo.cfgファイルの内容はすべて一致しているはずです.そのため、SVNまたはGITを使用してこのファイルを管理し、各マシンが同じ構成を共有できるようにすることが望ましい.
myidファイルには、サーバIDという数字が1つしかありません.例えばserver.1のmyidファイルの内容は「1」です.注意、各サーバのmyidファイルの数字が異なり、自分のマシンのzooと異なることを確認してください.cfgでserver.id=host:port:portのid値は一致します.また、idの範囲は1~255です.
同じ手順で他の機器にzooを配置する.cfgとmyidファイル.
そして一つ一つ起動すればいいです.完了します.
三、Zookeeperの使用
まず./zkCli.shを使用してクライアントを接続し、クラスタの下で指定されたクライアントにパラメータ./zkCli.sh -server ip:portを追加することができます.
3.1作成
createコマンドを使用すると、ZooKeeperノードを作成できます.使用法は次のとおりです.
create [-s] [-e] path data acl

ここで、-sまたは-eは、ノード特性:シーケンスまたは一時ノードをそれぞれ指定します.デフォルトでは、-sまたは-eパラメータは追加されず、永続ノードが作成されます.次のコマンドを実行します.
[zk: localhost:2181(CONNECTED) 11] create -e /tmp xiaoming                                   
Created /tmp

上記のコマンドを実行すると、ZooKeeperのルートノードの下に/tmpというノードが作成され、ノードのデータ内容は「xiaoming」になります.また、createコマンドの最後のパラメータはaclであり、権限制御に使用されます.デフォルトでは、権限制御は行われません.Aclについては、ZooKeeperのシステムモデル(データモデル、ノードプロパティ、バージョン、Watcher、ACL)を参照してください.
3.2読み取り
読み取りに関連するコマンドにはlsコマンドとsetコマンドが含まれます.lsコマンドを使用すると、ZooKeeperが指定したノードの下にあるすべてのサブノードをリストできます.もちろん、このコマンドでは、指定したノードの下のレベルのすべてのサブノードしか表示されません.使用法は次のとおりです.
ls path [watch]

ここでpathは、データノードを指定するノードパスを表す.次のコマンドを実行します.
[zk: localhost : 2181(CONNECTED) 0] ls /
[zookeeper]

最初に配備されたZooKeeperクラスタは、デフォルトではルートノード'/'の下に/zookeeperという保存ノードがあります.
getコマンドを使用すると、ZooKeeperが指定したノードのデータ内容と属性情報を取得できます.使用法は次のとおりです.
get path [watch]

次のコマンドを実行します.
[zk: localhost:2181(CONNECTED) 12] get /tmp
xiaoming
cZxid = 0x6
ctime = Sun Jan 26 20:12:04 CST 2020
mZxid = 0x6
mtime = Sun Jan 26 20:12:04 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x1000826c70a0001
dataLength = 8
numChildren = 0

3.3更新
setコマンドを使用すると、指定したノードのデータ内容を更新できます.使用法は次のとおりです.
set path data [version]

このうちdataは更新する新しいコンテンツです.なお、setコマンドの後ろにはバージョンパラメータがあり、ZooKeeperでは、ノードのデータにはバージョン概念があり、このパラメータは、今回の更新操作がZNodeのどのデータバージョンに基づいて行われたかを指定するために使用されます.次のコマンドを実行します.
[zk: localhost:2181(CONNECTED) 13] set /tmp xiaoli
cZxid = 0x6
ctime = Sun Jan 26 20:12:04 CST 2020
mZxid = 0x7
mtime = Sun Jan 26 20:16:39 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x1000826c70a0001
dataLength = 6
numChildren = 0

以上のコマンドを実行すると、ノード/tmpのデータ内容がxiaoliに更新されます.出力情報では、dataVersionの値が元の0から1になっています.これは、さっきの更新操作によってノードのデータバージョンも変更されたためです.
3.4削除
deleteコマンドを使用すると、ZooKeeepr上の指定したノードを削除できます.使用法は次のとおりです.
delete path [version]

このコマンドのversionパラメータとsetコマンドのversionパラメータの役割は一致します.次のコマンドを実行します.
[zk: localhost:2181(CONNECTED) 14] delete /tmp
[zk: localhost:2181(CONNECTED) 15] ls /
[zookeeper, user]

以上のコマンドを実行すると、/zk-bookというノードを正常に削除できます.ただし、指定したノードを削除するには、サブノードが存在しない必要があります.