~ZooKeeper操作編~こんにちは、fukuです。ZooKeeperについて書いていきます。前回ではZooKeeperの概要の説明を行いました。ZooKeeperではznodeから構成されるデータノードを管理しており、クラアントはAPIを通じてデータノードの操作を行うことができます。今回は実際にZooKeeperを操作することでZooKeeperのAPIなどについての理解を深めていきましょう。Releasesからダウンロードを行います。Sierra(バージョン10.12.6)のOS環境上で検証を行いました。ダウンロードしたzookeeper-3.5.3-beta.tar.gzファイルを任意のディレクトリに置き、以下のコマンド群を実行することで、ZooKeeperの起動の準備をします。conf/zoo.cfg上記のコマンドを実行でZooKeeperが起動できるようになったので、以下のコマンドからスタンドアローンモードでZooKeeperをバックグラウンド(デフォルトポート2181)で起動することができます。startまたサブコマンドを変更することでフォアグラウンドで実行することも可能です。start-foregroundサーバを停止する時は、以下のコマンドを実行してください。stopZooKeeperの利用サーバを立ち上げた状態で、ZooKeeperのディレクトリにおいて以下のコマンドを実行することで、クライアントを起動することができます。./bin/zkCli.sh無事に接続が確立すると、クライアントコマンドの待ち受け状態になります。ここでhelpを入力して、コマンド一覧を表示してみましょう(実際にはhelpというコマンドは存在せず、存在しないコマンドを入力することで以下のようなUSAGE情報が表示されます)。help今回はいくつかのコマンドを実際に実行することで、ZeeKeeperで行えることをみていきましょう。データツリーの操作まずlsコマンドを使ってZooKeeperのデータノードを覗いてみましょう。/[zookeeper]上記から、データノードのルートノードには[zookeeper]のznodeがあることがわかります。[zookeeper]ノードはZooKeeperのシステム情報を管理するためのノードとなります。それでは次にcreateコマンドからznodeを作成してみましょう。clients]このようにcreateコマンドの第1引数にznodeの名前、第2引数でznodeに格納するデータを指定することで、znodeが作成されます。ちなみに今回のcreateコマンドでできたznodeはPERSISTENTノードとなります。getコマンドではznodeの情報を参照することができます。/clientsここでは、出力としてcreate`コマンドで指定したデータ(今回は空文字列)が出力されます。続いてsetコマンドで、znodeのデータを変更してみましょう。hogehoge上位のようにznodeに格納されているデータが空文字列から"hogehoge"に変わっていることがわかります。znodeのデータセットで注意しなければならないことは、データが置き換わるということです。そのためデータを追記したりすることはできません。クライアントのセッションを終了するにはquitコマンドを実行します。0x160a6c05dcf0004znodeのモードここでは前回記事で紹介したznodeのいろいろなモードを試していきたいと思います。createコマンドにはモードを指定するオプションが存在しており、オプションを指定する事によって、いろいろなモードのznodeを作成することができます。PERSISTENTPERSISTENTモードのznodeは、先ほどのようにcreateのオプションなしで作成することができます。/clients/c1PERSISTENTモードではznodeが永続化されるので、セッションを終了してから、再度セッションを開始してもznodeがそのまま存在することが確認できます。PERSISTENTモードのznodeを削除するにはdeleteコマンドによって、明示的に削除を行う必要があります。/clients[]EPHEMERALEPHEMERALモードではznodeの作成を行なったセッションが切断されると、znodeは自動的に削除されます。createコマンドで-eオプションの指定でEPHEMERALモードのznodeを作成することができます。ここではクライアントを2つ立ち上げてEPHEMERALモードのznodeをみていきます。/clients[]上記のようにクライアント1でEPHEMERALモードのznodeを作成すると、クライアント2でも作成したznodeの確認が行えます。次にクライアントのセッションを終了して、クライアント2でznodeの確認を行うとEPHEMERALモードのznodeのノードが削除されていることがわかります。CONTAINERCONTAINERモードのznodeは自身の子ノードが削除されると自動的にznodeが削除されます。createコマンドの-cオプションによって、CONTAINERモードを指定することができます。zookeeper]上記のようにCONTAINERモードのznode(/container)を作成して、子ノードを作成・削除します。その後にCONTAINERモードのznodeはすぐには削除されませんが、一定時間ののちにZooKeeperによって自動的に削除されます。PERSISTENT_TTLPERSISTENT_TTLモードがznodeの生存時間を指定することができ、指定時間後にZooKeeperによって自動的に削除されます。createコマンドの-tオプションによってPERSISTENT_TTLモードを指定することができます。zookeeper]生存時間は-tオプションの後ろにミリ秒単位で指定します(上記は600ms)。作成直後はznodeが存在していることが確認できますが、600ms後しばらくしてから、確認するとznodeが削除されていることが確認できます。ここで注意しなければいけないのは、ちょうど600ms後に削除されるのではなく、ZooKeeperの定期的にTTLモード(CONTAINERモードも同様)の削除を行うタイミングで削除が行われるという点です。そのため600ms後に初めてのZooKeeperの削除サイクルのタイミングが来た時に削除されます。デフォルトではZooKeeperの削除サイクルの時間間隔は2000msとなります。長くなってしまったので、今回はこの辺で....おわりに今回は実際にZooKeeperをスタンドアローンモードで起動して、CLIからデータツリーに対するさまざまな操作を行いました。次回はソースコードからデータツリーがどのように管理されているのかをみていこうと思います。〜znodeステータス編〜こんにちはfukuです。〜データツリー編〜こんにちはfukuです。〜概要とデータノード編〜こんにちは、fukuです。採用情報フロムスクラッチは常に優秀なソフトウェアエンジニアを募集しています。vol.2月別アーカイブ検索リンクb→dashWantedly運営会社はてなブログをはじめよう!f-scratchさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。