ZooKeeper@Dockerにローカルから接続

表題の通り。

■ 環境

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

■ ZooKeeper

先日あげたシングルノードのZooKeeperは、`zkCli`で接続する為にもコンテナを起動させる必要があった。今回はローカルで起動しているのと同じように、ローカルの`zkCli`でアクセスできるように設定を変えて起動してみる。

$ docker run -d --name zk -p 2181:2181 zookeeper

これで起動した。ちなみにどのポートを開いているか(?)は下記コマンドで取得できるようである。

$ docker port zk
2181/tcp -> 0.0.0.0:2181
$

ではローカルの`zkCli`で接続してみる。

$ zkCli
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is enabled
[zk: localhost:2181(CONNECTING) 0]
WATCHER::

WatchedEvent state:SyncConnected type:None path:null

[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1]

接続できた。ということは4文字コマンドもいけるはずだ。

$ echo srvr | nc localhost 2181
Zookeeper version: 3.4.9-1757313, built on 08/23/2016 06:50 GMT
Latency min/avg/max: 0/33/162
Received: 6
Sent: 5
Connections: 1
Outstanding: 0
Zxid: 0x1
Mode: standalone
Node count: 4
$

楽しい。

以上。

■ 関連

ZooKeeper@Docker – シングルノード

表題の環境を試す。

■ 環境

  • ZooKeeper 3.4.9
  • Docker for Mac 1.12.1
  • Mac OSX ElCapitan

■ run

ZooKeeperをとりあえずシングルノードで稼働させてみる。

$ docker run -d --name zk zookeeper
9d2f562d9475d830fb4e844dcff69e338c7fc450666919ffb6e50f4de22c561f
$

アクセスするには`zkCli`用のコンテナを起動する。

$ docker run -ti --rm --link zk:zk zookeeper zkCli.sh -server zk
Connecting to zk
2016-10-04 19:25:37,817 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.9-1757313, built on 08/23/2016 06:50 GMT
2016-10-04 19:25:37,820 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=9ed51322280c
2016-10-04 19:25:37,820 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.8.0_92-internal
2016-10-04 19:25:37,822 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2016-10-04 19:25:37,822 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/usr/lib/jvm/java-1.8-openjdk/jre
2016-10-04 19:25:37,822 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/zookeeper-3.4.9/bin/../build/classes:/zookeeper-3.4.9/bin/../build/lib/*.jar:/zookeeper-3.4.9/bin/../lib/slf4j-log4j12-1.6.1.jar:/zookeeper-3.4.9/bin/../lib/slf4j-api-1.6.1.jar:/zookeeper-3.4.9/bin/../lib/netty-3.10.5.Final.jar:/zookeeper-3.4.9/bin/../lib/log4j-1.2.16.jar:/zookeeper-3.4.9/bin/../lib/jline-0.9.94.jar:/zookeeper-3.4.9/bin/../zookeeper-3.4.9.jar:/zookeeper-3.4.9/bin/../src/java/lib/*.jar:/conf:
2016-10-04 19:25:37,822 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64/server:/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64:/usr/lib/jvm/java-1.8-openjdk/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2016-10-04 19:25:37,823 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2016-10-04 19:25:37,823 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=
2016-10-04 19:25:37,823 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Linux
2016-10-04 19:25:37,823 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=amd64
2016-10-04 19:25:37,824 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=4.4.20-moby
2016-10-04 19:25:37,824 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=root
2016-10-04 19:25:37,824 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/root
2016-10-04 19:25:37,824 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/zookeeper-3.4.9
2016-10-04 19:25:37,825 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=zk sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@3eb07fd3
2016-10-04 19:25:37,845 [myid:] - INFO  [main-SendThread(zk:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server zk/172.17.0.2:2181. Will not attempt to authenticate using SASL (unknown error)
Welcome to ZooKeeper!
JLine support is enabled
2016-10-04 19:25:37,915 [myid:] - INFO  [main-SendThread(zk:2181):ClientCnxn$SendThread@876] - Socket connection established to zk/172.17.0.2:2181, initiating session
2016-10-04 19:25:37,958 [myid:] - INFO  [main-SendThread(zk:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server zk/172.17.0.2:2181, sessionid = 0x1578ab473ab0001, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

[zk: zk(CONNECTED) 0]

なるほど。

先日”latest“のタグでDockerコンテナを`pull`しているが、現状の最新版である”3.4.9“で動いている様子。JavaはOpenJDKの1.8であるようだ。

以上。

■ 関連

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

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

以上。