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`で見ればわかるであろう。

以上。

■ 関連

ZooKeeperサーバの詳細を取得

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

■ 環境

  • Apache ZooKeeper 3.4.6
  • Mac OSX (10.10.5)

■ srvr

4文字コマンド`srvr`で得られる内容を確認する。

$ 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/71
Received: 2077
Sent: 2083
Connections: 8
Outstanding: 0
Zxid: 0x112c
Mode: standalone
Node count: 12
$

これを見るとZooKeeperサーバの概要が窺えるであろう。ちなみに上記の結果はローカルで稼働させているZooKeeperである。”Mode“に”standalone“とある通りensambleは組んでいない。

ちなみに3台でensambleを組んでいる場合には下記のように取得できた。

$ 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/966
Received: 5052638
Sent: 5031695
Connections: 18
Outstanding: 0
Zxid: 0x100269298
Mode: follower
Node count: 142
$

上記の場合は、4文字コマンドで取得しているZooKeeperサーバが”follower“であることがわかるだろう。その他2台に確認してみると、”leader“も発見できるであろう。

以上。

Docker Multi-Host Networking (4)

Dockerにおいて表題の通り。前回までの続きであるstep2のswarmクラスタ構築を行う。

■ 環境

  • Mac OSX (10.10.5)
  • Apache ZooKeeper 3.4.6
  • Vagrant 1.8.1
  • Ubuntu Vivid

■ Create a Swarm cluster

まずは”swarm“のコンテナイメージをそれぞれ`pull`する。

$ vagrant ssh docker1
vagrant@docker1:~$ docker pull swarm
 :
$ vagrant ssh docker2
vagrant@docker2:~$ docker pull swarm

ZooKeeperを使用したswarmクラスタの構築については下記を参照した。

Docker Swarm discovery
https://docs.docker.com/swarm/discovery/

それぞれのDockerホスト上で”swarm-agent“というコンテナ名で`swarm join`させる。

docker1:

vagrant@docker1:~$ docker run -d --name swarm-agent swarm join --advertise=192.168.33.11:2375  zk://10.0.2.2:2181/

docker2:

vagrant@docker2:~$ docker run -d --name swarm-agent swarm join --advertise=192.168.33.12:2375  zk://10.0.2.2:2181/

ここまででznodeを確認してみると下記のようになっていた。

/
  + docker
    + nodes
      + 192.168.33.11:2375
      + 192.168.33.12:2375
    + swarm
      + nodes
        + 192.168.33.11:2375
        + 192.168.33.12:2375

続いて、”docker1“にて”swarm-manager“を起動する。

vagrant@docker1:~$ docker run -d --name swarm-manager -p 2376:2375 swarm manage zk://10.0.2.2:2181/

ここで再度znodeを確認したが変わりはなかった。

■ check

swarmクラスタが正常に稼働しているかを確認する。

vagrant@docker1:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
ee0f2ea65a33        swarm               "/swarm manage zk://1"   2 minutes ago       Up 2 minutes        0.0.0.0:2376->2375/tcp   swarm-manager
2aa9e4f8f877        swarm               "/swarm join --advert"   9 minutes ago       Up 9 minutes        2375/tcp                 swarm-agent
vagrant@docker1:~$
vagrant@docker1:~$ docker -H tcp://localhost:2376 info
Containers: 3
Images: 2
Role: primary
Strategy: spread
Filters: health, port, dependency, affinity, constraint
Nodes: 2
 docker1: 192.168.33.11:2375
  └ Status: Healthy
  └ Containers: 2
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 2.052 GiB
  └ Labels: executiondriver=native-0.2, kernelversion=3.19.0-42-generic, operatingsystem=Ubuntu 15.04, storagedriver=devicemapper
 docker2: 192.168.33.12:2375
  └ Status: Healthy
  └ Containers: 1
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 2.052 GiB
  └ Labels: executiondriver=native-0.2, kernelversion=3.19.0-43-generic, operatingsystem=Ubuntu 15.04, storagedriver=devicemapper
CPUs: 2
Total Memory: 4.104 GiB
Name: ee0f2ea65a33
vagrant@docker1:~$

これでswarmクラスタの構築が終了である。

以上。

■ 関連

Docker Multi-Host Networking (3)

Dockerにおいて表題の通り。前回までの続きからstep2を行う。

■ 環境

  • Mac OSX (10.10.5)
  • Apache ZooKeeper 3.4.6
  • Vagrant 1.8.1
  • Ubuntu Vivid

■ Docker Host

Vagrantで起動している2つのVMにDockerをインストールする。”Ubuntu/Vivid“へのDockerインストール方法は下記に記載。

Install Docker Engine to Ubuntu/Vivid

上記インストールでは、該当ホスト以外からのアクセスが不可なので下記エントリのようにリモートアクセスを可能となるように設定を変更する。

DockerにRemoteからアクセス

上記エントリでは、CentOS6へのインストールなので、Ubuntuと違う点を下記に記載する。Ubuntuでは`initd`ではなく`systemd`なので、下記ファイルが修正対象のファイルとなる。

$ sudo vi /lib/systemd/system/docker.service

修正内容は下記。

ExecStart=/usr/bin/docker daemon -H fd:// -H tcp://0.0.0.0:2375

ExecStart“に”-H tcp://0.0.0.0:2375“を追加しただけである。Dockerのデーモンを再起動する。

$ sudo systemctl reload-daemon
$ sudo systemctl restart docker.service

※ Ubuntuで`upstart`を使用している場合には、対象のファイルは下記になるかと思われる。

/etc/default/docker

しかし、今回利用しているVagrantの”ubuntu/vivid64“では`upstart`がインストールされていないので`systemd`のファイルを編集している。

■ `docker daemon`オプション

Get started with multi-host networking
https://docs.docker.com/engine/userguide/networking/get-started-overlay/

公式ドキュメントの上記のページを見ると、”step2“の”1. Create Swarm master“にて`docker-machine`で起動しているDockerホストには下記オプションが渡されているようである。

  • –cluster-store=zk://10.0.2.2:2181/
  • –cluster-advertise=eth1:2375

これらを前述のリモートアクセスを可能にしたのと同じように下記ファイルを編集して追加する。接続先のKVSは以前のエントリで触れている通りZooKeeperを使用する。

–cluster-store“で指定するのはホストOSで起動しているZooKeeperである。”–cluster-advertise“で指定しているのは、Dockerにリモートでアクセスするルートと考え上記のようにしている。

これらを追記し再度Dockerサービスを再起動する。

$ sudo vi /lib/systemd/system/docker.service

変更後は下記のようになっている。

ExecStart=/usr/bin/docker daemon -H fd:// -H tcp://0.0.0.0:2375 --cluster-store=zk://10.0.2.2:2181/ --cluster-advertise=eth1:2375

再起動する。

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

ZooKeeperには下記のznodeが作成されていた。

/
  + docker
    + nodes
      + 192.168.33.11:2375
      + 192.168.33.12:2375

ここまでで2台のDockerホストを起動した。

今回はここまで。swarmクラスタは次回構築することにする。

以上。

■ 関連

Macで稼働中のZooKeeperを3.4.6に変更

表題の通り。先日のエントリの通り、Apache ZooKeeperの”3.4.7“はバグがあるらしく現在は公開されていない。既に”3.4.7“にupgradeしてしまっているので、一旦”3.4.6“に切り戻すことにする。

■ 環境

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

■ 現状

確認する。

$ brew info zookeeper
zookeeper: stable 3.4.7 (bottled), HEAD
Centralized server for distributed coordination of services
https://zookeeper.apache.org/
/usr/local/Cellar/zookeeper/3.4.6_1 (208 files, 12.9M)
  Poured from bottle
/usr/local/Cellar/zookeeper/3.4.7 (236 files, 17.1M) *
  Poured from bottle
  :

3.4.6_1“のFormulaも残っているので、以前のエントリの通りversionを指定して`switch`する。

Homebrewで過去versionを指定

$ brew switch zookeeper 3.4.6_1
Cleaning /usr/local/Cellar/zookeeper/3.4.6_1
Cleaning /usr/local/Cellar/zookeeper/3.4.7
13 links created for /usr/local/Cellar/zookeeper/3.4.6_1
$
$ brew info zookeeper
zookeeper: stable 3.4.7 (bottled), HEAD
Centralized server for distributed coordination of services
https://zookeeper.apache.org/
/usr/local/Cellar/zookeeper/3.4.6_1 (208 files, 12.9M) *
  Poured from bottle
/usr/local/Cellar/zookeeper/3.4.7 (236 files, 17.1M)
  Poured from bottle
 :

実際に起動してversionを確認。

$ zkServer start
JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Starting zookeeper ... STARTED
$
$ echo mntr | nc localhost 2181
zk_version    3.4.6-1569965, built on 02/20/2014 09:09 GMT
 :

問題なさそうである。”3.4.8“がリリースされるまでこれでいく。

以上。

■ 関連