尝试使用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

似乎能够自动找到同一网络上同名的实例并将其组合成一个集群。

暫時只需要完成這個建造階段。

请注意

由于这次是在虚拟机上进行的,所以仅在私有网络中完成了,但似乎即使在默认的配置文件之间也会形成集群。

    • 同じネットワーク内で、

 

    他の人がデフォルトの状態で起動してたりすると、

在不知不觉中成为集群并被困扰着神秘的行为,所以最好能正确指定集群名称。

广告
将在 10 秒后关闭
bannerAds