boot2docker + AnsbileでElasticsearchを構築する

はじめに

Elasticのブログにこんな記事が上がってました。

ElasticがAnsibleのPlaybookを提供していて、これを使うと簡単にElasticsearchが構築できるとのこと。これをMacBook上のboot2dockerに対してやってみました!

やってみた

まずはElasticのGithubにあるPlaybookをcloneします。

$ mkdir ./src/github.com/elastic/
$ cd ./src/github.com/elastic/
$ git clone https://github.com/elastic/ansible-elasticsearch-example.git

playbook.ymlの内容はこんな感じ。超シンプルです。

---

- hosts: nodes
  roles:
    - { role: elasticsearch, es_instance_name: "node1", es_heap_size: "1g", es_config: {network.host: "_eth0_", discovery.zen.ping.unicast.hosts: "ansible-test:9300", http.port: 9200, transport.tcp.port: 9300, node.data: false, node.master: true, bootstrap.mlockall: true } }
    - { role: elasticsearch, es_instance_name: "node2", es_heap_size: "1g", es_config: {network.host: "_eth0_", discovery.zen.ping.unicast.hosts: "ansible-test:9300", http.port: 9201, transport.tcp.port: 9301, node.data: true, node.master: true, bootstrap.mlockall: true } }
  vars:
    es_cluster_name: test-cluster

次にRoleファイルをcloneします。実際の構築の手続きはこちらのRoleの中で定義されており、マスターノードとデータノードによって使い分けられます。

$ cd ./ansible-elasticsearch-example/
$ git clone https://github.com/elastic/ansible-elasticsearch.git roles/elasticsearch

boot2dockerをスタートします。

$ boot2docker start
$ eval "$(boot2docker shellinit)"

このAnsible-Playbookの動作確認用に提供されているDockerイメージをPullします。

$ docker pull gingerwizard/ansible-test

そしてDockerコンテナを起動。ここで指定されている名前「ansible-test」は変更可能ですが、その場合はplaybook.ymlも修正する必要があります。

$ docker run -d -P --name ansible-test -h ansible-test gingerwizard/ansible-test

Dockerコンテナの起動確認。合わせてSSHポート(ここでは32771/tcp)、Elasticsearchポート(ここでは32773/tcp)を確認しておきます。

$ docker ps
CONTAINER ID        IMAGE                       COMMAND               CREATED             STATUS              PORTS                                                                     NAMES
1bf7492f2106        gingerwizard/ansible-test   "/usr/sbin/sshd -D"   3 seconds ago       Up 1 seconds        0.0.0.0:32773->22/tcp, 0.0.0.0:32772->9200/tcp, 0.0.0.0:32771->9201/tcp   ansible-test

boot2dockerのIPアドレスを確認します。

$ echo $(boot2docker ip)
192.168.59.103

hostsファイルを修正し、boot2dockerのIPアドレスとSSHポートを設定します。

$ vi hosts
[nodes]
ansible-test ansible_ssh_host=192.168.59.103 ansible_ssh_port=32773

ではansible-playbookを実行!なお、このDockerコンテナのrootユーザーのパスワードは「Ansible!」です・

$ ansible-playbook playbook.yml -u root -i hosts --ask-pass
(..snip..)
PLAY RECAP ********************************************************************
ansible-test               : ok=69   changed=28   unreachable=0    failed=0

それではElasticsearchポートにcurlコマンドで接続してみます。

$ curl http://192.168.59.103:32772/
{
  "name" : "ansible-test-node1",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.0",
    "build_hash" : "72cd1f1a3eee09505e036106146dc1949dc5dc87",
    "build_timestamp" : "2015-11-18T22:40:03Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}

ばっちりElsaticsearchが構築されています!

さいごに

ここで提供されているものはあくまでサンプルですが、少しカスタマイズすれば自環境に合わせて使えそうです!