使用Chef Solo部署elasticsearch环境

这是我在尝试使用Chef Solo在多个服务器上部署elasticsearch环境时的笔记。由于我对chef不太熟悉,所以可能写了一些奇怪的东西。

创建仓库

首先,我们来创建一个仓库。这次我们将命名为”chef-repo”的仓库。

$ knife solo init chef-repo
$ tree chef-repo
chef-repo
├── Berksfile
├── cookbooks
├── data_bags
├── environments
├── nodes
├── roles
└── site-cookbooks

制作食谱

这次使用Berkshelf,想要使用第三方的cookbook,所以需要在Berksfile中添加elasticsearch的描述,并将其安装在cookbooks目录下。要下载cookbook,需要注册Opscode Community用户并进行一些设置,我建议参考Chef Solo的正确使用方法。

site :opscode

cookbook ‘elasticsearch’
$ berks install -p cookbooks

定义角色

在roles目录下创建elasticsearch.json文件,并进行以下配置。默认情况下,java的版本是1.6.0_28,elasticsearch的版本是0.90.5进行安装。但是由于希望使用更新版本的软件,因此通过override_attributes来覆盖属性,将java版本设置为1.7系列,elasticsearch版本设置为0.90.7进行安装。同时,将安装elasticsearch使用的kuromoji等插件的配置也一并写入elasticsearch::plugins。关于插件安装的配置将在后面介绍。

{
    “name”: “elasticsearch”,
    “default_attributes”: {},
    “override_attributes”: {
        “java”: {
            “install_flavor”: “openjdk”,
            “jdk_version”: “7”
        },
        “elasticsearch”: {
            “version”: “0.90.7”
        }
    },
    “json_class”: “Chef::Role”,
    “description”: “”,
    “chef_type”: “role”,
    “run_list”: [
        “recipe[java]”,
        “recipe[elasticsearch]”,
        “recipe[elasticsearch::plugins]”
    ]
}

插件

需要在data_bag中设置有关要安装的elasticsearch插件。首先,在data_bags目录下创建一个elasticsearch文件夹,然后在该文件夹下创建一个plugins.json文件。由于要安装elasticsearch的版本是0.90.7,所以使用1.6.0版本的kuromoji。另外,由于我经常使用HQ插件,所以也要同时安装它。

{
    “id”: “plugins”,
    “_default”: {
        “plugins”: {
            “elasticsearch/elasticsearch-analysis-kuromoji”: { “version”: “1.6.0” },
            “royrusso/elasticsearch-HQ”: {}
        }
    }
}

烹饪

如果能做到这一步,我会开始烹饪。

$ knife solo prepare <host>

执行以下操作,并将创建在nodes下的.json文件的run_list写入role[elasticsearch]。

Note: Chinese translation is written in Simplified Chinese.

{
    “run_list”: [
        “role[elasticsearch]”   
    ]
}

然后,我会做饭。

$ knife solo cook <host>

在完成后,使用ssh 进行登录,并确认安装是否成功。

$ java -version
java version "1.7.0_45"
OpenJDK Runtime Environment (rhel-2.4.3.4.el6_5-x86_64 u45-b15)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
$ curl -XPUT ‘localhost:9200/test/‘ -d ‘
{ 
  “index”:{
    “analysis”: {
      “tokenizer”: {
        “kuromoji”: {
          “type”:”kuromoji_tokenizer”,
          “mode”:”search”
        }
      },
      “analyzer” : {
        “kuromoji_analyzer” : {
          “type” : “custom”,
          “tokenizer” : “kuromoji_tokenizer”
        }
      }
    }
  }
}'
{"ok":true,"acknowledged":true}

如果出现 {“ok”:true,”acknowledged”:true},那么我认为安装已经成功了。

$ curl -XGET 'localhost:9200/test/_analyze?analyzer=kuromoji_analyzer&pretty' -d '関西国際空港'
{
  "tokens" : [ {
    "token" : "関西",
    "start_offset" : 0,
    "end_offset" : 2,
    "type" : "word",
    "position" : 1
  }, {
    "token" : "関西国際空港",
    "start_offset" : 0,
    "end_offset" : 6,
    "type" : "word",
    "position" : 1
  }, {
    "token" : "国際",
    "start_offset" : 2,
    "end_offset" : 4,
    "type" : "word",
    "position" : 2
  }, {
    "token" : "空港",
    "start_offset" : 4,
    "end_offset" : 6,
    "type" : "word",
    "position" : 3
  } ]
}

我也成功地完成了分隔符的设置。虽然还想进行更多细致的配置,但这次就到这里吧。

请提供下列资料作为参考。

烹饪书-弹性搜索
尝试使用Chef Solo的正确方式
试试使用Berkshelf

广告
将在 10 秒后关闭
bannerAds