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