稼働中のZooKeeperの設定を取得

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

■ 環境

  • Apache Zookeeper 3.4.6
  • Mac OSX (10.10.5)

■ conf

4文字コマンドを利用して、稼働中のZooKeeperサーバに適用されている各種設定を取得する。

Homebrewでインストールし、ZooKeeperサーバは下記のように起動している。

$ zkServer start
JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Starting zookeeper ... STARTED
$

4文字コマンドを実行する。

$ echo conf | nc localhost 2181
clientPort=2181
dataDir=/usr/local/var/run/zookeeper/data/version-2
dataLogDir=/usr/local/var/run/zookeeper/data/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=0
$

上記のように取得された。アンサンブル構成は組んでいないので”serverid“は設定されずに”0“が入っているようであるが、それ以外は全て設定ファイルに記載されているものか、デフォルト設定値のようである。

続いて、先日構成したアンサンブルでも同じように取得してみる。”clientPort“をそれぞれ”2181,”2182“,”2183“としているので全てに対して実行する。

$ echo conf | nc localhost 2181
clientPort=2181
dataDir=/usr/local/var/run/zookeeper/data1/version-2
dataLogDir=/usr/local/var/run/zookeeper/data1/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=1
initLimit=10
syncLimit=5
electionAlg=3
electionPort=3888
quorumPort=2888
peerType=0
$
$ echo conf | nc localhost 2182
clientPort=2182
dataDir=/usr/local/var/run/zookeeper/data2/version-2
dataLogDir=/usr/local/var/run/zookeeper/data2/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=2
initLimit=10
syncLimit=5
electionAlg=3
electionPort=3889
quorumPort=2889
peerType=0
$
$ echo conf | nc localhost 2183
clientPort=2183
dataDir=/usr/local/var/run/zookeeper/data3/version-2
dataLogDir=/usr/local/var/run/zookeeper/data3/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=3
initLimit=10
syncLimit=5
electionAlg=3
electionPort=3890
quorumPort=2890
peerType=0
$

アンサンブル構成を組んでいるので”serverid“がそれぞれの数値になっている。また同期する各種設定も入っていることが確認できるであろう。

以上。

■ 関連

zkServerのprint-cmd

Apache ZooKeeperにおいて表題の通り。今日はちょっとサボりエントリ。

■ 環境

  • Apache ZooKeeper 3.4.6
  • Mac OSX (10.10.5)

■ print-cmd

zkServerには下記のコマンドが存在する。

  • start
  • start-foreground
  • stop
  • restart
  • status
  • upgrade
  • print-cmd

この中から`print-cmd`を試してみる。実行すると下記の出力が得られる。

$ zkServer print-cmd
JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
"java" -Dzookeeper.log.dir="." -Dzookeeper.root.logger="INFO,CONSOLE" -cp "/usr/local/Cellar/zookeeper/3.4.6_1/libexec/bin/../build/classes:/usr/local/Cellar/zookeeper/3.4.6_1/libexec/bin/../build/lib/*.jar:/usr/local/Cellar/zookeeper/3.4.6_1/libexec/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/Cellar/zookeeper/3.4.6_1/libexec/bin/../lib/slf4j-api-1.6.1.jar:/usr/local/Cellar/zookeeper/3.4.6_1/libexec/bin/../lib/netty-3.7.0.Final.jar:/usr/local/Cellar/zookeeper/3.4.6_1/libexec/bin/../lib/log4j-1.2.16.jar:/usr/local/Cellar/zookeeper/3.4.6_1/libexec/bin/../lib/jline-0.9.94.jar:/usr/local/Cellar/zookeeper/3.4.6_1/libexec/bin/../zookeeper-3.4.6.jar:/usr/local/Cellar/zookeeper/3.4.6_1/libexec/bin/../src/java/lib/*.jar:/usr/local/etc/zookeeper:"  -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain "/usr/local/etc/zookeeper/zoo.cfg" > "./zookeeper.out" 2>&1 < /dev/null
$

`start`を実行した時に実行されるコマンドの確認ができる。

以上。

MacでZooKeeperアンサンブル

表題の通り。

■ 環境

  • Apache ZooKeeper 3.4.6
  • Mac OSX (10.10.5)
  • Homebrew

■ アンサンブル構成

1台のMac上に、3つのZooKeeperプロセスを稼働させアンサンブルを構築する。

■ 設定ファイル

ZooKeeperの設定ファイルは”zoo.cfg“であるが、今回は1台のMac上に3つのZooKeeperプロセスを稼働させるため、設定ファイルは3つ用意する。

$ cd /usr/local/etc/zookeeper/
$ ls
defaults         log4j.properties zoo.cfg          zoo_sample.cfg
$

デフォルトで使用される設定ファイルのディレクトリは上記の通りなので、ここに既存の”zoo.cfg“を元に作成する。それぞれ”zoo1.cfg“, “zoo2.cfg“, “zoo3.cfg“とした。”clientPort“, “dataDir“は設定ファイル毎に変更する必要があるので、それぞれ変更している。またアンサンブル構成用に下記も追記した。

server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2390:3890

clientPort“, アンサンブル設定時に必要な同期に使用されるポート、LeaderElectionのポートはそれぞれ1ずつ増やしただけにしている。

また”dataDir“もそれぞれ変更をしているので作成した。

$ cd /usr/local/var/run/zookeeper/
$ ls
data
$
$ mkdir data{1,2,3}
$
$ ls
data  data1 data2 data3
$

この作成したディレクトリにそれぞれ”myid“ファイルを作成しておく。

$ echo 1 > data1/myid
$ echo 2 > data2/myid
$ echo 3 > data3/myid

以上で準備は終了である。

■ 起動

それぞれ起動する。

$ zkServer start zoo1.cfg
JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo1.cfg
Starting zookeeper ... STARTED
$
$ zkServer start zoo2.cfg
JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo2.cfg
Starting zookeeper ... STARTED
$
$ zkServer start zoo3.cfg
JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo3.cfg
Starting zookeeper ... STARTED
$

ZooKeeperのプロセス(QuorumPeerMain)が3つ稼働していれば問題ないであろう。

それぞれの”clientPort“に4文字コマンドでアクセスしてみる。

$ echo srvr | nc localhost 2181
Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMT
Latency min/avg/max: 0/0/0
Received: 3
Sent: 2
Connections: 1
Outstanding: 0
Zxid: 0x0
Mode: follower
Node count: 4
$
$ echo srvr | nc localhost 2182
Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMT
Latency min/avg/max: 0/0/0
Received: 2
Sent: 1
Connections: 1
Outstanding: 0
Zxid: 0x200000000
Mode: leader
Node count: 4
$
$ echo srvr | nc localhost 2183
Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMT
Latency min/avg/max: 0/0/0
Received: 2
Sent: 1
Connections: 1
Outstanding: 0
Zxid: 0x200000000
Mode: follower
Node count: 4
$

これらから、”zoo2.cfg“で起動しているZooKeeperがリーダーとなりアンサンブルを構成していることがわかる。

■ 動作確認

zoo1.cfg“で起動しているZooKeeperにアクセスしznodeを作成する。その値が”zoo3.cfg“で起動しているZooKeeperにアクセスし同じ値が取得できれば問題なくアンサンブルが稼働しているとわかるであろう。

$ zkCli -server localhost:2181
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is enabled
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1] create /test zoo1.cfg
Created /test
[zk: localhost:2181(CONNECTED) 2] ls /
[zookeeper, test]
[zk: localhost:2181(CONNECTED) 3] get /test
zoo1.cfg
cZxid = 0x200000002
ctime = Wed Oct 28 19:14:12 JST 2015
mZxid = 0x200000002
mtime = Wed Oct 28 19:14:12 JST 2015
pZxid = 0x200000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0
[zk: localhost:2181(CONNECTED) 4] quit
Quitting...
$
$ zkCli -server localhost:2183
Connecting to localhost:2183
Welcome to ZooKeeper!
JLine support is enabled
[zk: localhost:2183(CONNECTED) 0] ls /
[zookeeper, test]
[zk: localhost:2183(CONNECTED) 1] get /test
zoo1.cfg
cZxid = 0x200000002
ctime = Wed Oct 28 19:14:12 JST 2015
mZxid = 0x200000002
mtime = Wed Oct 28 19:14:12 JST 2015
pZxid = 0x200000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0
[zk: localhost:2183(CONNECTED) 2] quit
Quitting...
$

思い通りの結果が得られた。

以上。

■ 関連

コマンドがどのRPMでインストールされたかを調べる

RedHat系のLinuxにおいて表題の通り。たまに使うのでメモ。

■ 環境

  • CentOS 7.1

■ ping

例として、`ping`コマンドがどのRPMパッケージでインストールされるのかを調べる。Dockerでとあるコンテナを起動した際に、`ping`が使えず、さてどのパッケージで入るのだろう?と思ったので。

対象のコマンド(今回では`ping`)が正しく使用できる環境で確認する。

$ which ping
/usr/bin/ping
$
$ rpm -qf /usr/bin/ping
iputils-20121221-6.el7_1.1.x86_64
$

`which`でフルパスを調べ、それを`rpm`の”-f“オプションに渡すのみである。

`ping`は”iputils“というRPMパッケージによってインストールされたことがわかる。

ちなみに、対象のRPMパッケージでどんなコマンドやファイルがインストールされたのかを確認するには下記である。

$ rpm -ql iputils
/etc/sysconfig/rdisc
/usr/bin/ping
/usr/bin/ping6
/usr/bin/tracepath
/usr/bin/tracepath6
/usr/lib/systemd/system/rdisc.service
/usr/sbin/arping
/usr/sbin/clockdiff
/usr/sbin/ifenslave
/usr/sbin/ping6
/usr/sbin/rdisc
/usr/sbin/tracepath
/usr/sbin/tracepath6
/usr/share/doc/iputils-20121221
/usr/share/doc/iputils-20121221/README.bonding
/usr/share/doc/iputils-20121221/RELNOTES
/usr/share/man/man8/arping.8.gz
/usr/share/man/man8/clockdiff.8.gz
/usr/share/man/man8/ifenslave.8.gz
/usr/share/man/man8/ping.8.gz
/usr/share/man/man8/ping6.8.gz
/usr/share/man/man8/rdisc.8.gz
/usr/share/man/man8/tracepath.8.gz
/usr/share/man/man8/tracepath6.8.gz
$

以上。

コンテナイメージのタグ一覧(未解決)

Dockerにおいて、DockerHubにあるコンテナイメージに付いているタグの一覧をコマンドラインで取得したいのだがうまくできずに悩んでいる。

※ 2016/05/09 追記

Docker Registry APIを用いることでタグ情報の取得はできた。

Docker Registry APIでタグ情報を取得

■ 環境

  • Docker 1.8.2

■ 困っていること

ローカルに存在するコンテナイメージであれば、下記のようにコンテナ名とタグの一覧を取得できるのは当然である。

$ docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
java                     7                   ade42d38879d        9 weeks ago         587.4 MB
swarm                    latest              207e8b983242        11 weeks ago        10.2 MB
mongo                    3.0.3               fa0a6690446b        4 months ago        257.8 MB
jplock/zookeeper         3.4.6               f3f010867623        12 months ago       342.7 MB
jplock/zookeeper         latest              9ce81845fa8f        23 months ago       515.6 MB
$
$ docker images jplock/zookeeper
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
jplock/zookeeper    3.4.6               f3f010867623        12 months ago       342.7 MB
jplock/zookeeper    latest              9ce81845fa8f        23 months ago       515.6 MB
$

しかし、`docker pull`をしていないタグに関しては、どうやって”latest“以外のタグを取得できるのか?

■ search

いくつか試してみているのだが、`docker search`が一番有力候補であろう。しかし、これでタグの一覧を取得することはできない。

$ docker search --help

Usage:    docker search [OPTIONS] TERM

Search the Docker Hub for images

  --automated=false    Only show automated builds
  --help=false         Print usage
  --no-trunc=false     Don't truncate output
  -s, --stars=0        Only displays with at least x stars
$

■ pull

これで取得できるのかも?と思って実行してみたが…結局はすべてのコンテナイメージを`pull`することになっただけであった。

$ docker pull --all-tags [container]
$ docker pull --help

Usage:    docker pull [OPTIONS] NAME[:TAG|@DIGEST]

Pull an image or a repository from a registry

  -a, --all-tags=false            Download all tagged images in the repository
  --disable-content-trust=true    Skip image verification
  --help=false                    Print usage
$

何か良い手段はないのであろうか?DockerHubをブラウザで確認するしかないのだろうか。

以上。

■ 関連