MacにMongoDBをインストール

表題の通り。

■ 環境

  • MongoDB 3.0.7
  • Mac OSX (10.10.5)
  • Homebrew

■ インストール

いつも通りにインストール。

$ brew update
$ brew install mongodb

■ サーバプロセスの起動

とりあえずインストール時に表示されている手段で起動する。`brew info mongodb`でも同じ表記が取得できる。

$ mongod --config /usr/local/etc/mongod.conf

デーモン起動ではないようなので別ターミナルから接続する。

$ mongo
MongoDB shell version: 3.0.7
connecting to: test
> show dbs
2015-11-20T19:17:13.825+0900 E QUERY    Error: listDatabases failed:{
    "ok" : 0,
    "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
    "code" : 13
}
    at Error ()
    at Mongo.getDBs (src/mongo/shell/mongo.js:47:15)
    at shellHelper.show (src/mongo/shell/utils.js:630:33)
    at shellHelper (src/mongo/shell/utils.js:524:36)
    at (shellhelp2):1:1 at src/mongo/shell/mongo.js:47
>

認証が掛かっているようである。設定を確認。

$ cat /usr/local/etc/mongod.conf
# Store data in /usr/local/var/mongodb instead of the default /data/db
dbpath = /usr/local/var/mongodb

# Append logs to /usr/local/var/log/mongodb/mongo.log
logpath = /usr/local/var/log/mongodb/mongo.log
logappend = true

# Only accept local connections
bind_ip = 127.0.0.1

httpinterface=true
rest=true
auth=true
$

最終行に`auth=true`がある。これが原因のようである。ローカルのテスト環境なので認証を外す。また、デーモン起動できるように下記のように編集した。

  • fork = true
  • auth = false

これで起動する。

$ mongod --config /usr/local/etc/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 87692
child process started successfully, parent exiting
$

デーモン起動されたので同じターミナルから再度接続。

$ mongo
MongoDB shell version: 3.0.7
connecting to: test
> show dbs
local  0.078GB
>

接続が確認できた。

以上。

■ 関連

KafkaToolでのZooKeeper/chroot

先日の1つのZooKeeperアンサンブルで複数のKafkaクラスタを管理させる件、KafkaToolで正常にできているかを見てみる事にする。

■ 環境

  • KafkaTool 1.0
  • Mac OSX (10.10.5)

■ KafkaTool

起動したままでは先日の設定がそのまま残っている。

kafkatool-chroot-001

Add Connection“から1つ目のKafkaクラスタの設定を追加する。”chroot path“を”/kafka1“に変更するのみである。”Test“を実行。

kafkatool-chroot-002

追加する。

kafkatool-chroot-003

2つ目のKafkaクラスタは1つ目の設定を”Clone“してみた。こちらも”chroot path“を”/kafka2“に変更するのみである。

kafkatool-chroot-004

無事認識されているようである。

kafkatool-chroot-005

以上。

■ 関連

ZooKeeper:Kafka=1アンサンブル:2クラスタ

1つのApache ZooKeeperに、Apache Kafkaの2クラスタを管理させてみる。

■ 環境

  • Apache ZooKeeper 3.4.6
  • Apache Kafka 0.8.2.1
  • Mac OSX (10.10.5)

■ ZooKeeper

HomebrewでインストールしたものをStandaloneで起動する。設定はデフォルトまま。

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

ちなみにデータは事前に空にしておいた。”zoo.cfg“の”dataDir“で設定しているディレクトリをすべて削除してある。

■ Kafka

1つめのKafkaクラスタを起動する。クラスタと言っても今回は1台のみとしている。設定ファイルは下記を編集した。

  • port
  • log.dirs
  • zookeeper.connect

今回は1つのホスト上(Mac)にKafkaを2プロセス稼働させているので、”port“と”log.dirs“も編集する必要があった。

$ cd /usr/local/etc/kafka
$ cp server.properties server1.properties
$ vi server1.properties
  :
port=9092
  :
log.dirs=/usr/local/var/lib/kafka-logs/kafka1
  :
zookeeper.connect=localhost:2181/kafka1
  :
$

1つ目のKafkaの設定は以上。項目を抜き出すと下記。

  • port=9092
  • log.dirs=/usr/local/var/lib/kafka-logs/kafka1
  • zookeeper.connect=localhost:2181/kafka1

起動する。

$ kafka-server-start.sh -daemon /usr/local/etc/kafka/server1.properties

続いて2つ目のKafkaを起動する。設定ファイルは”server2.properties“とし、下記項目を編集している。

  • port=9093
  • log.dirs=/usr/local/var/lib/kafka-logs/kafka2
  • zookeeper.connect=localhost:2181/kafka2

起動する。

$ kafka-server-start.sh -daemon /usr/local/etc/kafka/server2.properties

プロセスを確認。

$ jps
72016 Jps
72003 Kafka
71994 QuorumPeerMain
72014 Kafka
$

Kafka“が2つ稼働していることがわかる。

■ znode

続いてznodeを確認してみる。

$ zkCli
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is enabled
[zk: localhost:2181(CONNECTED) 0] ls /
[kafka2, zookeeper, kafka1]
[zk: localhost:2181(CONNECTED) 1] ls /kafka1
[admin, consumers, controller, controller_epoch, brokers, config]
[zk: localhost:2181(CONNECTED) 2]
[zk: localhost:2181(CONNECTED) 2] ls /kafka2
[admin, consumers, controller, controller_epoch, brokers, config]
[zk: localhost:2181(CONNECTED) 3]
[zk: localhost:2181(CONNECTED) 3]

それぞれ別のznodeとなり、1組のZooKeeperアンサンブルで複数のKafkaクラスタを管理できることがわかる。今回は1台のMac上でKafkaを複数プロセス稼働させているので設定項目も増えてしまったが、本来の使い方であれば”zookeeper.connect“の設定のみでいけるであろう。

以上。

■ 関連

DockerでZooKeeperアンサンブル

表題の通り。Dockerでやる意味は無い気もするがやってみる。

■ 環境

  • Docker 1.9.0
  • Apache ZooKeeper 3.4.6

■ Docker

`docker-machine`で稼働させている。versionは下記の通り。

$ docker version
Client:
 Version:      1.9.0
 API version:  1.21
 Go version:   go1.5.1
 Git commit:   76d6bc9
 Built:        Tue Nov  3 21:17:46 UTC 2015
 OS/Arch:      darwin/amd64

Server:
 Version:      1.9.0
 API version:  1.21
 Go version:   go1.4.3
 Git commit:   76d6bc9
 Built:        Tue Nov  3 19:20:09 UTC 2015
 OS/Arch:      linux/amd64
$

使用するコンテナイメージは”jplock/zookeeper:3.4.6“。

■ ZooKeeper

ZooKeeperコンテナを3つ稼働させる。”jplock/zookeeper:3.4.6“には”ENTRYPOINT“で”zkServer.sh“が実行されるようになっているので、これを実行させないように起動している。

$ docker run -ti --entrypoint=/bin/bash --name zoo1 jplock/zookeeper:3.4.6
root@07d92a8be38e:/opt/zookeeper#
$
$ docker run -ti --entrypoint=/bin/bash --name zoo2 jplock/zookeeper:3.4.6
root@f85b1b8ee23a:/opt/zookeeper#
$
$ docker run -ti --entrypoint=/bin/bash --name zoo3 jplock/zookeeper:3.4.6
root@3aca4b69a17a:/opt/zookeeper#
$
$ docker ps
CONTAINER ID        IMAGE                    COMMAND             CREATED              STATUS              PORTS                          NAMES
3aca4b69a17a        jplock/zookeeper:3.4.6   "/bin/bash"         About a minute ago   Up About a minute   2181/tcp, 2888/tcp, 3888/tcp   zoo3
f85b1b8ee23a        jplock/zookeeper:3.4.6   "/bin/bash"         About a minute ago   Up About a minute   2181/tcp, 2888/tcp, 3888/tcp   zoo2
07d92a8be38e        jplock/zookeeper:3.4.6   "/bin/bash"         About a minute ago   Up About a minute   2181/tcp, 2888/tcp, 3888/tcp   zoo1
$

コンテナを起動させた後は`control-P`→`control-Q`でデタッチしている。

起動したコンテナのIPを調べる。`attach`してそれぞれコマンドで調べても良いのだが、`inspect`で表示の中から見てみる。

$ docker inspect zoo1 zoo2 zoo3
[
{
    "Id": "07d92a8be38ef00a645b35f30a83ca4014156a780b92d305acbbf68ded892d75",
      :
                    "IPAddress": "172.17.0.2",
      :
                    "IPAddress": "172.17.0.3",
      :
                    "IPAddress": "172.17.0.4",
      :
}
$

IPが判明したので”zoo.cfg“に追記する。追記する内容は下記の通り。

server.1=172.17.0.2:2888:3888
server.2=172.17.0.3:2888:3888
server.3=172.17.0.4:2888:3888

また、上記と同じIDをそれぞれ”/tmp/zookeeper“にmyidファイルを作成している。

root@07d92a8be38e:/opt/zookeeper# echo 1 > /tmp/zookeeper/myid

以上で設定は終わったので、それぞれ”zkServer.sh“で起動する。

$ docker attach zoo1
root@07d92a8be38e:/opt/zookeeper# ./bin/zkServer.sh start
JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
root@07d92a8be38e:/opt/zookeeper#
$
$ docker attach zoo2
root@f85b1b8ee23a:/opt/zookeeper# ./bin/zkServer.sh start
JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
root@f85b1b8ee23a:/opt/zookeeper#
$
$ docker attach zoo3
root@3aca4b69a17a:/opt/zookeeper# ./bin/zkServer.sh start
JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
root@3aca4b69a17a:/opt/zookeeper#
$

クライアント用に別途コンテナを起動し、確認してみる。

$ docker run -ti --entrypoint=/bin/bash --name client jplock/zookeeper:3.4.6
root@9b69a99fb003:/opt/zookeeper# ./bin/zkCli.sh -server 172.17.0.2:2181
[zk: 172.17.0.2:2181(CONNECTED) 0]
[zk: 172.17.0.2:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: 172.17.0.2:2181(CONNECTED) 1] create /test test
Created /test
[zk: 172.17.0.2:2181(CONNECTED) 2] ls /
[test, zookeeper]
[zk: 172.17.0.2:2181(CONNECTED) 3] quit
Quitting...
root@9b69a99fb003:/opt/zookeeper# ./bin/zkCli.sh -server 172.17.0.3:2181
[zk: 172.17.0.3:2181(CONNECTED) 0] ls /
[test, zookeeper]
[zk: 172.17.0.3:2181(CONNECTED) 1] get /test
test
cZxid = 0x100000002
ctime = Tue Nov 17 10:22:40 UTC 2015
mZxid = 0x100000002
mtime = Tue Nov 17 10:22:40 UTC 2015
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
[zk: 172.17.0.3:2181(CONNECTED) 2]

クライアント用のコンテナから”zoo1“コンテナ上のZooKeeperに接続し、”/test“を作成。その後、”zoo2“コンテナのZooKeeperに接続し内容を確認してみた。

Dockerコンテナ上でもZooKeeperアンサンブルを構成する事ができた。

以上。

■ 関連

KafkaToolでTopicを作成

表題の通り。Apache Kafkaの情報を見ることができるKafkaToolを使って、Topicを作成してみる。

■ 環境

  • Apache Kafka 0.8.2.1
  • Kafka Tool 1.0
  • Mac OSX (10.10.5)

■ ZooKeeper & Kafka

KafkaToolを起動する前に、ZooKeeperとKafkaを起動しておく。今回は1台ずつのみでクラスタは組まない。

$ zkServer start
JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Starting zookeeper ... STARTED
$
$ kafka-server-start.sh -daemon /usr/local/etc/kafka/server.properties
$

■ KafkaTool

起動して接続する。

kafkatool-topic-001

kafkatool-topic-002

上部にある『+』からTopicを作成する。

kafkatool-topic-003

Partition Count“/”Replica Count“が設定できるようだ。今回はデフォルトままの”1“にしておく。特にクラスタが1台であるので”Replica Count“を指定しても意味を成さないので。

kafkatool-topic-004

いろいろとTopicに関する情報を得ることができる。

kafkatool-topic-005

kafkatool-topic-006

kafkatool-topic-007

実際のデータを閲覧することもできそうだ。

以上。

■ 関連