ZooKeeperの公式Dockerコンテナ

表題の通り。

■ 環境

  • ZooKeeper 3.4.9
  • Docker for Mac 1.12.1
  • Mac OSX El Capitan

■ ZooKeeper

何気なく下記コマンドを実行したところ、”OFFICIAL“なコンテナがあった。以前はなかったような気がするのだが作成されたようである。

$ docker search zookeeper
NAME                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
jplock/zookeeper              Builds a docker image for Zookeeper versio...   147                  [OK]
mesoscloud/zookeeper          ZooKeeper                                       63                   [OK]
zookeeper                     Apache ZooKeeper is an open-source server ...   14        [OK]
digitalwonderland/zookeeper   Latest Zookeeper - clusterable                  9                    [OK]
  :
$

OFFICIAL“であるのは心強い。

https://hub.docker.com/_/zookeeper/

なかなか面白そうである。時間を作ってDockerfileもちゃんと確認してみたいと思う。

以上。

■ 関連

ZooKeeper-3.4.8 Docker Container

Apache ZooKeeperにおいて表題の通り。2016/02/20にZooKeeper 3.4.8がリリースされたので、以前作成したDockerの”Automated Build“のDockerfileを修正する。

■ 環境

  • Apache ZooKeeper 3.4.8
  • Docker 1.10.1

■ 3.4.7

以前作成した時は”3.4.7“のリリース直後であったが、その後”3.4.7“にバグが見つかりこのversionは切り戻された。しかしそのまま残しておいたので今回は”3.4.8“にupdateする。

DockerHub AutomatedBuild

■ Dockerfile

以前のDockerfileから少し変更し下記のようにした。

FROM centos:7
MAINTAINER withsin <withsin@gmail.com>

ENV ZOO_VERSION=3.4.8

RUN yum update -y
RUN yum install -y java-1.8.0-openjdk
RUN curl http://archive.apache.org/dist/zookeeper/zookeeper-${ZOO_VERSION}/zookeeper-${ZOO_VERSION}.tar.gz | tar zx -C /opt
RUN ln -s /opt/zookeeper-${ZOO_VERSION} /opt/zookeeper
RUN mkdir /opt/zookeeper/data
RUN chown -R root:root /opt/zookeeper-${ZOO_VERSION}
RUN mv /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg
RUN yum clean all

EXPOSE 2181 2888 3888

CMD ["/opt/zookeeper/bin/zkServer.sh", "start-foreground"]

ZooKeeperのversionを1箇所に変更。かつ今回の”3.4.8“にしている。

一度、ローカルでDockerfileに問題ないか確認。

$ docker build -t withsin/zookeeper:3.4.8 .

buildに問題がなさそうであったので、gitにcommitしてGitHubにpushしてある。これで前回のエントリの通り”Automated Build“でコンテナも作成さえるはずである。

以上。

■ 関連

ZooKeeperに接続しているコネクション一覧

Apache ZooKeeperにおいて表題の通り。

■ 環境

Apache ZooKeeper 3.4.6

■ 4文字コマンド

ふたつの4文字コマンドで表題の結果を得ることができる。`cons`と`stat`である。

`cons`はそのままコネクションの一覧を取得。`stat`はコネクションの一覧とZooKeeperサーバの状態を取得することができる。各コネクションの情報についても`stat`で得られる結果よりも`cons`で得られる情報の方が多い。下記にそれぞれ取得してみたものを表示する。

`cons`

$ echo cons | nc localhost 2181
 /192.168.33.11:47949[1](queued=0,recved=254366,sent=254366,sid=0x151af8e909e001f,lop=PING,est=1453205223034,to=10000,lcxid=0x0,lzxid=0x3c8f7,lresp=1454053106380,llat=0,minlat=0,avglat=0,maxlat=5)
 /192.168.33.11:37597[1](queued=0,recved=282630,sent=282630,sid=0x151af8e909e001e,lop=PING,est=1453205224036,to=10000,lcxid=0x6e68,lzxid=0x3c8f7,lresp=1454053107375,llat=1,minlat=0,avglat=0,maxlat=22)
 /127.0.0.1:38444[0](queued=0,recved=1,sent=0)
 /192.168.110.151:47948[1](queued=0,recved=339112,sent=339112,sid=0x151af8e909e0020,lop=PING,est=1453205223034,to=10000,lcxid=0x14b0a,lzxid=0x3c8f7,lresp=1454053106380,llat=0,minlat=0,avglat=0,maxlat=34)
 /192.168.33.11:47950[1](queued=0,recved=2583739,sent=2583763,sid=0x151af8e909e0021,lop=GETC,est=1453205223034,to=10000,lcxid=0x238b1d,lzxid=0x3c8f7,lresp=1454053108920,llat=0,minlat=0,avglat=0,maxlat=19)
 /192.168.33.11:42157[1](queued=0,recved=254370,sent=254371,sid=0x151af8e909e001d,lop=PING,est=1453205224037,to=10000,lcxid=0x4,lzxid=0x3c8f7,lresp=1454053107376,llat=0,minlat=0,avglat=0,maxlat=4)

$

`stat`

$ echo stat | nc localhost 2181
Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMT
Clients:
 /127.0.0.1:38632[0](queued=0,recved=1,sent=0)
 /192.168.33.11:47949[1](queued=0,recved=254442,sent=254442)
 /192.168.33.11:37597[1](queued=0,recved=282716,sent=282716)
 /192.168.33.11:47948[1](queued=0,recved=339214,sent=339214)
 /192.168.33.11:47950[1](queued=0,recved=2584450,sent=2584474)
 /192.168.33.11:42157[1](queued=0,recved=254446,sent=254447)

Latency min/avg/max: 0/0/41
Received: 14954939
Sent: 14955199
Connections: 6
Outstanding: 0
Zxid: 0x3c909
Mode: standalone
Node count: 60
$

どのホストからの接続が多いのかを見ることができるであろう。上記は”standalone“で稼働しているZooKeeperに対して、Dockerのクラスタ情報を格納しているのだがコネクションが5本も張られているようである。ちなみに”192.168.33.11“でどのプロセスが接続しているのかを確認してみる。

$ ssh 192.168.33.11
[withsin@192.168.33.11 ~]$ sudo lsof -i :47949

これから3つは”docker“プロセスが接続していることを確認できた。しかし下記2つのポートはどのプロセスが使用しているのか前述のコマンドでは判明しなかった。

  • 37597
  • 42157

これはまた別途調べる方法について確認する。

以上。

only exposed by the Leader

Apache ZooKeeperにおいて、4文字コマンド`mntr`で取得できる項目の中から”Leader“のZooKeeperサーバだけが返す項目があるようである。

■ 環境

  • Apache ZooKeeper 3.4.6
  • Amazon Linux

■ mntr

先日のエントリでは、接続した先がStandaloneであったので気がつかなかった。アンサンブルが構築されたZooKeeperでLeaderに接続した時にのみ出力される項目があるようであるので確認する。

Standalone:

$ echo mntr | nc localhost 2181
zk_version      3.4.6-1569965, built on 02/20/2014 09:09 GMT
zk_avg_latency  0
zk_max_latency  41
zk_min_latency  0
zk_packets_received     13484768
zk_packets_sent 13485026
zk_num_alive_connections        6
zk_outstanding_requests 0
zk_server_state standalone
zk_znode_count  60
zk_watch_count  4
zk_ephemerals_count     2
zk_approximate_data_size        13453
zk_open_file_descriptor_count   37
zk_max_file_descriptor_count    4096
$

Follower:

$ echo mntr | nc localhost 2181
zk_version      3.4.6-1569965, built on 02/20/2014 09:09 GMT
zk_avg_latency  0
zk_max_latency  6843
zk_min_latency  0
zk_packets_received     5556397
zk_packets_sent 5535538
zk_num_alive_connections        16
zk_outstanding_requests 0
zk_server_state follower
zk_znode_count  142
zk_watch_count  6
zk_ephemerals_count     26
zk_approximate_data_size        249939
zk_open_file_descriptor_count   43
zk_max_file_descriptor_count    32768
$

Leader:

$ echo mntr | nc localhost 2181
zk_version      3.4.6-1569965, built on 02/20/2014 09:09 GMT
zk_avg_latency  0
zk_max_latency  899
zk_min_latency  0
zk_packets_received     18389509
zk_packets_sent 18368737
zk_num_alive_connections        25
zk_outstanding_requests 0
zk_server_state leader
zk_znode_count  142
zk_watch_count  31
zk_ephemerals_count     26
zk_approximate_data_size        250020
zk_open_file_descriptor_count   54
zk_max_file_descriptor_count    32768
zk_followers    2
zk_synced_followers     2
zk_pending_syncs        0
$

なるほど。確かに下記3つの項目がLeaderにのみ出力されている。

  • zk_followers
  • zk_synced_followers
  • zk_pending_syncs

今回接続した先は、3台でアンサンブルを構築しているので、正常に同期が取れているFollowerが2台ある、ということである。

また、下記2項目についてはUnix系のOSでしか取得できないとのことだ。

  • zk_open_file_descriptor_count
  • zk_max_file_descriptor_count

手元にWindows系で動かしているZooKeeperが無いので確認はできないが。

以上。

■ 関連

ZooKeeper Open File Descriptor Count

Apache ZooKeeperにおいて表題の事を調べる。

■ 環境

  • Apache ZooKeeper 3.4.6
  • Amazon Linux

■ zk_open_file_descriptor_count

4文字コマンド”mntr“で”zk_open_file_descriptor_count“の数値が得られる。試しにLinux上で稼働させているZooKeeperに対して実行してみると下記の通りである。

$ echo mntr | nc localhost 2181
zk_version      3.4.6-1569965, built on 02/20/2014 09:09 GMT
zk_avg_latency  0
zk_max_latency  41
zk_min_latency  0
zk_packets_received     12317736
zk_packets_sent 12317994
zk_num_alive_connections        6
zk_outstanding_requests 0
zk_server_state standalone
zk_znode_count  60
zk_watch_count  4
zk_ephemerals_count     2
zk_approximate_data_size        13453
zk_open_file_descriptor_count   35
zk_max_file_descriptor_count    4096
$

ここで得られる”35“という数値が正しいのか?を確認したい。まずはZooKeeperのPIDを確認。

$ jps
18518 QuorumPeerMain
19295 Jps
$

PIDが分かれば”/proc“配下を見れば分かるであろう。

$ sudo ls /proc/18518/fd | wc
     34      34      92
$

34“が得られた。4文字コマンドを実行する時の接続が”1“追加されるので計”35“が確かに正しい値を取得できている。実際にどのファイル等が開かれているかは、`ls -l`で見ればわかるであろう。

以上。

■ 関連