尝试使用Vagrant和Ansible创建一个Elasticsearch集群
让我们尝试使用vagrant和ansible来创建elasticsearch集群。
在CentOS 6上进行构建。
与之前写的文章和配置几乎相同。
.
├── Vagrantfile
├── ansible.cfg
├── elasticsearch-1.3.4.zip
├── es.yml
├── inventory
├── ssh.config
└── templates
└── elasticsearch.yml
elasticsearch-1.3.4.zip 是从官方网站下载的文件。
虚拟机的设置
请参照以前的说明,关于box的注册等详细细节已经在上一次写过。
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.define :node1 do |node|
node.vm.box = "centos6"
node.vm.hostname = "node1"
node.vm.network :private_network, ip: "192.168.33.10"
node.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", "512"]
end
end
config.vm.define :node2 do |node|
node.vm.box = "centos6"
node.vm.hostname = "node2"
node.vm.network :private_network, ip: "192.168.33.11"
node.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", "512"]
end
end
end
[servers]
node1
node2
Host node1
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/kuryu/.vagrant.d/insecure_private_key
IdentitiesOnly yes
LogLevel FATAL
Host node2
HostName 127.0.0.1
User vagrant
Port 2200
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/kuryu/.vagrant.d/insecure_private_key
IdentitiesOnly yes
LogLevel FATAL
[defaults]
hostfile = inventory
[ssh_connection]
ssh_args = -F ssh.config
玩法手册
-
- unarchiveモジュールにunzipが必要
-
- jdkも必要
- とりあえずesのheadプラグイン入れてみる
---
- hosts: servers
user: vagrant
vars:
es_version: elasticsearch-1.3.4
tasks:
- yum: name={{item}} state=installed
sudo: yes
with_items:
- libselinux-python
- unzip
- java-1.7.0-openjdk
- unarchive: >
src=./{{ es_version }}.zip
# 何故かここだけ ~/ としてもローカルのhomeになってしまう
dest=/home/vagrant/
- template: >
src=./templates/elasticsearch.yml
dest=~/{{ es_version }}/config/
- command: bin/plugin -install mobz/elasticsearch-head
args:
chdir: ~/{{ es_version }}
creates: ~/{{ es_version }}/plugins/head
Elasticsearch的配置
首先要点。
{{ inventory_hostname }} で現在処理中のvmのnode名が取得できるので、esのnode名にそのまま使った。
vagrantのprivate_networkだとnicがeth1になるので、network.publish_host: _eth1:ipv4_でそちらを見るように指定。
http.max_content_lengthはPOSTでバルクインサートする時に、リクエストのContent-Lengthがこの値を超えるとTooLongFrameExceptionが出るので、大きめに設定しておく。
cluster.name: kuryu
node.name: {{ inventory_hostname }}
network.publish_host: _eth1:ipv4_
http.max_content_length: 500mb
启动
$ vagrant up
完成后 (shì
$ ansible-playbook es.yml
通过这个,虚拟机的 /home/vagrant/elasticsearch-1.3.4 目录下会准备好 Elasticsearch。
所以,每个人
$ vagrant ssh node1
$ vagrant ssh node2
当进入虚拟机后,启动ES。
$ cd elasticsearch-1.3.4/
$ ./bin/elasticsearch
我们组成了一个团队。
$ curl 192.168.33.10:9200/_cat/nodes
node1 127.0.0.1 3 49 0.01 d * node1
node2 127.0.0.1 3 48 0.07 d m node2
似乎能够自动找到同一网络上同名的实例并将其组合成一个集群。
暫時只需要完成這個建造階段。
请注意
由于这次是在虚拟机上进行的,所以仅在私有网络中完成了,但似乎即使在默认的配置文件之间也会形成集群。
-
- 同じネットワーク内で、
- 他の人がデフォルトの状態で起動してたりすると、
在不知不觉中成为集群并被困扰着神秘的行为,所以最好能正确指定集群名称。