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が構築されています!
さいごに
ここで提供されているものはあくまでサンプルですが、少しカスタマイズすれば自環境に合わせて使えそうです!