Elasticsearch在AWS上的服务器集群配置

2015-05-26

最近,因为公司需要,在AWS上进行了Elasticsearch服务器的集群配置。用的是AWS上的ubuntu服务器,将相关的命令和碰过的坑整理在此处,希望有相关需求的朋友能避免踩坑。

安装Java环境

因为Elasticsearch是基于java的,所以第一步是安装java环境。

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get -y install oracle-java8-installer

这样我们就完成了java8的安装。

安装Elasticsearch

下面是Elasticsearch的安装,这个我们先用wget从服务器下载deb包

wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.5.2.deb

然后用dpkg命令进行安装,并加入开机启动(没有添加systemd)

sudo dpkg -i elasticsearch-1.5.2.deb
sudo update-rc.d elasticsearch defaults 95 10

ES插件安装

这儿主要安装了两个插件,一个是elasticsearch-cloud-aws,一个是大名鼎鼎的中文分词插件ik,第一个插件安装很简单,到ES的主目录执行命令即可:

cd /usr/share/elasticsearch/
sudo bin/plugin -install elasticsearch/elasticsearch-cloud-aws/2.5.0

这样,我们就完成了elasticsearch-cloud-aws的安装。ik的安装稍微复杂点,因为是空服务器,连git都没有,所以我们先安装git以及后面需要的maven:

sudo apt-get install git
sudo apt-get install maven

然后就是插件的安装了:

git clone https://github.com/medcl/elasticsearch-analysis-ik
cd elasticsearch-analysis-ik
mvn compile
mvn package
cd /usr/share/elasticsearch/bin/
sudo ./plugin --install analysis-kit --url file:///home/ubuntu/elasticsearch-analysis-ik/target/releases/elasticsearch-analysis-ik-1.3.0.zip

还有一个千万不能忘了,官方文档里面也没提,就是需要把配置文件整个儿copy到ES的目录下:

sudo cp  -r ~/elasticsearch-analysis-ik/config/ik/    /etc/elasticsearch/ik/

这样,我们就把两个最主要的插件安装完了。

ubuntu服务器的相关配置

AWS的EC2服务把服务器的硬盘分成了两部分,一份系统盘,一份数据盘,数据盘未挂载,所以我们要进行一些简单的配置,这里面碰到了一个坑,就是,我把数据盘挂载在/mnt一个新建的名为my-data的目录下,在这个新的目录里建了es-data,es-log两个目录分别用来存放es的数据和日志,建完之后用df -h命令查看是挂载上的,但是重启之后再次用df -h查询发现数据盘变成挂载在/mnt下面了,es-data,es-log两个目录也从/mnt/my-data下转移到了/mnt下,这个原因暂未找到,所以我就索性把数据盘直接挂载在/mnt下了。

sudo mkfs -t ext4 /dev/xvdb
sudo mount /dev/xvdb /mnt
cd /mnt
sudo mkdir es-log
sudo mkdir es-data
sudo chown -R elasticsearch:elasticsearch /mnt/

Elasticsearch的相关配置

这儿主要设置elasticsearch.yml这个配置文件,因为要配置集群,所以要把服务器上的cluster.name都设置成同样的名字,然后需要设置的还有节点的名字,es的数据路径和日志路径,配置如下:

sudo vim /etc/elasticsearch/elasticsearch.yml
###es配置
cluster.name: elasticsearch
node.name: "Kiwee"
path.data: /mnt/es-data
path.logs: /mnt/es-log

然后就是一些其他的es配置了,比如开启动态执行脚本功能,还有插件的相关配置,这儿我也直接贴出我的配置来:

###开启动态执行脚本功能
script.disable_dynamic: false

###ik插件的相关配置
index:
  analysis:
    analyzer:
      ik:
          alias: [ik_analyzer]
          type: org.elasticsearch.index.analysis.IkAnalyzerProvider
      ik_max_word:
          type: ik
          use_smart: false
      ik_smart:
          type: ik
          use_smart: true

###aws的相关配置
cloud:
    aws:
        region: [your aws region]
        access_key: [your access key]
        secret_key: [your secret key]
###aws s3的配置
repositories:
    s3:
        bucket: [bucketname]
        region: [your aws region]
###让es服务器能够互相发现以组成集群
discovery:
    type: ec2

重启并查看日志

至此,我们就完成了Elasticsearch集群在AWS上的配置,配置完了之后我们需要把ES的服务重启,并查看日志,如果发现有问题,根据日志进行修改:

sudo service elasticsearch restart
tail -f /mnt/es-log/elasticsearch.log

这个环节因为之前不谨慎,出现了很多问题,最大的坑是一个在starkoverflow上暂时还没人回答的问题Elasticsearch backup to S3 using AWS Cloud plugin,但其实评论区已经给出了答案,这个不是服务器的配置问题,yml文件没有错误,是S3服务的存储策略出了问题,这儿可以参考elasticsearch-cloud-aws下的S3配置。如果没有什么其他问题的话,我们就可以直接在服务器的日志中看到ES正确的启动起来,发现了其他节点,并通过“选举”产生了master节点。

查看集群状况

最后,我们可以通过一个简单的命令来查看集群的状况。

curl -XGET http://127.0.0.1:9200/_cluster/health

无意外的话我们能看到返回结果status是green,表示所有主要分片和复制分片都可用。如此,大功告成。