Elasticsearch在AWS上的服务器集群配置
最近,因为公司需要,在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,表示所有主要分片和复制分片都可用。如此,大功告成。