1. 安装前的准备工作及下载

1.1 创建用户

创建一个es专门的用户(必须), 因为es软件不能用root用户启动.
注意: 在企业中,每个业务系统或者集群都需要申请独立的账号.

#使用root用户的操作
#添加一个用户,叫做es
useradd es 
# 使用root用户创建目录
mkdir -p /export/servers/es
mkdir -p /export/data/es
mkdir -p /export/logs/es
# 将目录的权限分配给es用户
chown -R es:es /export/servers/es
chown -R es:es /export/data/es
chown -R es:es /export/logs/es
# 设置ex用户的密码, 建议使用es作为密码,防止后续忘记密码
passwd es
<input es>
# 切换到es用户
su es

1.2 下载安装包

切换到es用户下
切换到es用户下
切换到es用户下
下载安装包

su es
# 一定要cd, 这样可以回到home目录 /home/es
cd
# 下载安装包
wget
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.tar.gz
# 解压
tar -zxvf elasticsearch-6.0.0.tar.gz -C /export/servers/es/

为了给小伙伴们更加便捷的使用es, 博主这里也提供好了现成的安装包~

1.3 修改配置文件

cd /export/servers/es/elasticsearch-6.0.0/config
vi elasticsearch.yml

主要修改如下3个地方

node.name: 节点名字
network.host: 节点ip地址
其他可能修改:
discovery.zen.ping.unicast.hosts: ["node01","node02","node03"]
  • node01
# 集群名字
cluster.name: myes
# 集群中当前的节点
node.name: node01
# 数据目录
path.data: /export/data/es
# 日志目录
path.logs: /export/logs/es
# 当前主机的ip地址
network.host: 192.168.140.131
http.port: 9200
# 集群上的节点信息
discovery.zen.ping.unicast.hosts: ["node01","node02","node03"]
# linux安装es的一个bug解决的配置
bootstrap.system_call_filter: false
bootstrap.memory_lock: false
# 是否支持跨域
http.cors.enabled: true
# *表示支持所有域名
http.cors.allow-origin: "*"
  • node02
cluster.name: myes
node.name: node02
path.data: /export/data/es
path.logs: /export/logs/es
network.host: 192.168.140.132
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node01","node02","node03"]
bootstrap.system_call_filter: false
bootstrap.memory_lock: false
# 是否支持跨域
http.cors.enabled: true
# *表示支持所有域名
http.cors.allow-origin: "*"
  • node03
cluster.name: myes
node.name: node03
path.data: /export/data/es
path.logs: /export/logs/es
network.host: 192.168.140.133
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node01","node02","node03"]
bootstrap.system_call_filter: false
bootstrap.memory_lock: false
# 是否支持跨域
http.cors.enabled: true
# *表示支持所有域名
http.cors.allow-origin: "*"

1.4 修改jvm内存大小

每台机器都修改

vi jvm.options 
-
-Xms512m
-Xmx512m

2. 启动及报错解决

2.1 启动

第一次启动,必须前台启动
第一次启动,必须前台启动
第一次启动,必须前台启动

/export/servers/es/elasticsearch-6.0.0/bin/elasticsearch

为什么第一次启动要前台启动呢? 这样能够在前台发现启动时的错误, 否则还要去/export/logs/es/myes.log下查看日志,比较麻烦

2.2 错误信息如下

[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: max number of threads [1024] for user [es] is too low, increase to at least [4096]
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[4]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

2.3 解决办法

使用root用户
使用root用户
使用root用户

[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

  • 原因: 无法创建本地文件问题, 用户最多大创建文件数太小
  • 解决方案: 切换到root用户下, 编辑limits.conf配置文件, 添加类似如下内容:
vi /etc/security/limits.conf
  • 添加如下内容: 注意*不要去掉了
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

*代表Linux所有用户名称(比如hadoop, es), 需要保存, 退出,重新登录才可以生效.

[2]: max number of threads [1024] for user [es] is too low, increase to at least [4096]

  • 原因: 无法创建本地线程问题,用户最大可创建线程数太小
  • 解决方案: 切换到root用户, 进入limits.d目录下, 修改90-nproc.conf配置文件.
vi /etc/security/limits.d/90-nproc.conf

找到如下内容

* soft nproc 1024

修改为

* soft nproc 4096

[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

  • 原因: 最大虚拟内存太小
  • 解决方案一: 次方案治标不治本, 每次启动服务器都要手动执行如下命令才有效
    root用户执行命令
[root@localhost ~]# sysctl -w vm.max_map_count=262144
  • 解决方案二: 此方法治标又治本,强烈推荐使用
vi /etc/sysctl.conf

在此配置文件最后添加一行

vm.max_map_count=262144

[4] system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

  • 原因:Centos6不支持SecComp,而ES5.4.1默认bootstravelap.system_call_filter为travelue进行检测,所以导致检测失败,失败后直接导致ES不能启动。
    详见 :https://github.com/elastic/elasticsearch/issues/22899
  • 解决方法:在elasticsearch.yml中新增配置
bootstrap.system_call_filter,设为false,注意要在Memory下面:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false

以上问题解决后,es启动成功了,但又遇到了新的问题,本地机器无法访问虚拟机的服务,两个原因:
1)9200被限制为本机访问,需要在es的配置文件elasticsearch.yml中新增配置:
network.bind_host:0.0.0.0
2)关闭虚拟机防火墙
解决了这个两个问题后,本地能够顺利访问虚拟机的ES服务了。

2.4 再次启动服务(先杀后启)

所有的机器重启
所有的机器重启
所有的机器重启

ps -ef|grep elasticsearch|grep server |awk '{print $2}' |xargs kill -9
nohup /export/servers/es/elasticsearch-6.0.0/bin/elasticsearch >/dev/null 2>&1 &

2.5 访问es

在Google Chrome浏览器中,访问以下地址

http://node01:9200/?pretty

pretty:格式化的,漂亮的。

{
  "name" : "node01",
  "cluster_name" : "myes",
  "cluster_uuid" : "Ir-WWjS8R0KirRVwcjlLlw",
  "version" : {
    "number" : "6.0.0",
    "build_hash" : "8f0685b",
    "build_date" : "2017-11-10T18:41:22.859Z",
    "build_snapshot" : false,
    "lucene_version" : "7.0.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}