CentOS 6安装Elasticsearch 1.7

我现在专注于公司的搜索项目,初期框架选择时最后范围缩小到Elasticsearch(简称ES)与Solr之间,但考虑到ES从诞生的第一天就是面向分布式架构的,因此最终敲定ES。接下来有空时会整理一系列的ES使用心得,今天正好要在新节点上部署ES,顺便把部署的完整过程同步到博客里供大家参考:

如上列表所示,ES的安装与环境配置,官方文档是散布在各处的,第一次部署的时候确实很头大,生怕错配了什么东西,现在汇总一下自己的经验:

1.安装Java

“Elasticsearch requires at least Java 7. Specifically as of this writing, it is recommended that you use the Oracle JDK version 1.8.0_25.”

因为ES 2.x版本刚正式发布不久,根据ES交流群(211682609)里朋友们的反馈来看,2.0还存在一些问题,因此我们继续使用1.7的版本。在1.7对应的官方文档中有说明,Java版本要求大于7,并且推荐Oracle JDK 1.8.0_25,我在之前的博客中有提到CentOS 6安装Java 1.8,我们安装的版本是1.8.0_65,实践中使用一切正常。

2.Running as a Service on Linux

默认的安装方式虽然简单(下载压缩包,解压,用ES目录下的bin/elasticsearch启动服务),但并不适用于生产环境。这里还是推荐使用CentOS的软件包管理工具yum来安装ES,如果对yum还是感觉云里雾里,可以看看我之前写的yum、rpm、repo到底有什么关系,理解三者关系之后相信你不会像我当初一样只是单纯地跟着官方文档黏贴命令,而不知道在做什么:

# 下载并安装public signing key
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

# 添加ES 1.7资源库
vim /etc/yum.repos.d/elasticsearch.repo

# 输入如下文本:
[elasticsearch-1.7]
name=Elasticsearch repository for 1.7.x packages
baseurl=http://packages.elastic.co/elasticsearch/1.7/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

这里有个小插曲是:我刚开始研究ES的时候最新的稳定版本还是1.7.1,因为ES更新实在太迅猛,所以要部署的时候已经到了1.7.3。为了保持线上与线下的一致防止莫名的问题,因此我们仍然希望安装1.7.1,这里需要做一些处理:

# 查看当前可安装的ES版本
yum --showduplicates list elasticsearch
# 输出:
# 可安装的软件包
# elasticsearch.noarch                 1.7.0-1                  elasticsearch-1.7
# elasticsearch.noarch                 1.7.1-1                  elasticsearch-1.7
# elasticsearch.noarch                 1.7.2-1                  elasticsearch-1.7
# elasticsearch.noarch                 1.7.3-1                  elasticsearch-1.7

# 安装1.7.1版本
yum install elasticsearch-1.7.1-1

3.目录分布

Type Description Location RHEL/CentOS
home 主目录 /usr/share/elasticsearch
bin bin脚本目录 /usr/share/elasticsearch/bin
conf 配置文件目录:elasticsearch.yml 与 logging.yml. /etc/elasticsearch
conf 环境变量目录:heap size, file descriptors. /etc/sysconfig/elasticsearch
data 索引的数据文件目录 /var/lib/elasticsearch
logs 日志文件目录 /var/log/elasticsearch
plugins 插件目录 /usr/share/elasticsearch/plugins

4.系统与环境配置

4.1 内存

# 将机器一半的内存分配给ES但不要超过31g
vim /etc/sysconfig/elasticsearch

# 在相应位置进行修改(我的机器是62g内存,正好设为最大的31g):
ES_HEAP_SIZE=31g

# 关闭Swapping(Swapping会影响ES性能)
# use mlockall to try to lock the process address space into RAM, preventing any Elasticsearch memory from being swapped out. 
vim /etc/elasticsearch/elasticsearch.yml

# 在相应位置进行修改:
bootstrap.mlockall: true

# 重启ES
service elasticsearch restart

# 查看mlockall属性是否变为true
curl 127.0.0.1:9200/_nodes/process?pretty

# 如果没有修改成功,可能是由于运行ES的用户没有锁定内存的权限,用root用户运行:
ulimit -l unlimited
# 再重启,应该就成功了。

4.2 确认files descriptors的数量

# 启动ES
service elasticsearch start

# 查看max_file_descriptors属性是否足够大,官方文档推荐64k,yum安装的话默认是655350
curl 127.0.0.1:9200/_nodes/process?pretty

4.3 确认virtual address space足够多

# yum安装默认已配置好为262144,通过如下命令进行确认
sysctl vm.max_map_count

5.ES配置文件

找到相应配置并修改:

# 集群名称
cluster.name : aaa

# 节点名称
node.name : "n1"

# 索引默认分片数与复制分片数
index.number_of_shards: 1
index.number_of_replicas: 0

# 取消swapping(前面的步骤中已修改)
bootstrap.mlockall: true

# 做整个集群重启时,防止由于每个节点的启动时长不同,而导致的数据被不断恢复与转移
# Allow recovery process after N nodes in a cluster are up:
gateway.recover_after_nodes: 2

# Set how many nodes are expected in this cluster. Once these N nodes
# are up (and recover_after_nodes is met), begin recovery process immediately
# (without waiting for recover_after_time to expire):
gateway.expected_nodes: 2

# 取消multicast discovery(防止有机器意外地加入集群)
discovery.zen.ping.multicast.enabled: false
# 指定可加入集群的机器
discovery.zen.ping.unicast.hosts: ["1.1.1.1", "1.1.1.2"]

# 取消Marvel的自动日志索引(如果安装了Marvel插件)
marvel.agent.enabled: false

到目前为止ES的安装与配置算是完成了,既然是分布式的搜索框架,难免会诸多跨服务器文件同步问题(比如ES配置同步、停用词同步、同义词同步……),需要建议的朋友可以看看我之前的文章:CentOS本地与跨服务器文件同步

接下来就靠大家对ES的了解尽情享用这个框架吧!

发表评论

电子邮件地址不会被公开。 必填项已用*标注