CentOS7 + Elasticsearch 6.x 集群部署实战

下面是本博主在CentOS7环境下 部署 Elasticsearch集群的文档,真实可靠。

Elasticsearch集群机器信息如下:

==========

es01    10.70.27.3

es02    10.70.27.6

es03    10.70.27.9

版本信息

===========

OS: CentOS 7.4.x

JDK 1.8.x

ES 6.1.2

安装步骤

1)安装 Java jdk 和 Elastic Search

jdk-8u161-linux-x64.rpm下载地址:

http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/jdk-8u161-linux-x64.rpm

elasticsearch-6.1.2.rpm 下载地址:

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.2.rpm

# rpm -ivh jdk-8u161-linux-x64.rpm

# rpm -ivh elasticsearch-6.1.2.rpm

NOTE. 在其余的主机上重复执行上面的步骤来安装elasticsearch 和 JDK

2)配置 ES 

在所有的主机上都按下面的步骤来配置ES和JDK

注意在每个主机的elasticsearch.yml中,node.name,主机地址相关是不一样的,得修改为与本机相匹配的信息。

# cd /etc/elasticsearch/

# ls

elasticsearch.yml jvm.options log4j2.properties  

 

2.1 配置 elasticsearch.yml

# cat elasticsearch.yml|grep -v "#"           //集群中每个节点的配置内容都基本一致

elasticsearch.yml的内容如下:

cluster.name: image_search                      //集群名称

node.name: image_search_node_4                 //集群中本节点的节点名称,这里定义即可

path.data: /data/es6/data                      //服务目录路径
path.logs: /data/es6/log                       //服务日志路径

discovery.zen.ping.unicast.hosts: ["10.70.27.3","10.70.27.6","10.70.27.9"]  //这里是各节点的ip地址

network.host: 0.0.0.0                             //服务绑定的网络地址

bootstrap.memory_lock: false                      //别设置为true

http.port: 9200                                  // 默认elasticsearch服务端口时9200

discovery.zen.minimum_master_nodes: 2
gateway.recover_after_nodes: 3
action.destructive_requires_name: true

# mkdir -p /data/es6/data

# mkdir -p /data/es6/log 

# chown -R elasticsearch:elasticsearch /data/es6

 

注意:

ES不能以ROOT方式运行,否则是起不来的,所以这里要确保用户 elasticsearch 对这两个目录有访问权限。

你可以 cat /usr/lib/systemd/system/elasticsearch.service,就会发现这个文件指定了运行ES是用户elasticsearch,如下所示,

User=elasticsearch
Group=elasticsearch

明白了上面的chown操作了吧!

 

2.2 配置 jvm.options

 

# cat jvm.options

-Xms8g
-Xmx8g
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+AlwaysPreTouch
-server
-Xss1m
-Djava.awt.headless=true
-Dfile.encoding=UTF-8
-Djna.nosys=true
-XX:-OmitStackTraceInFastThrow
-Dio.netty.noUnsafe=true
-Dio.netty.noKeySetOptimization=true
-Dio.netty.recycler.maxCapacityPerThread=0
-Dlog4j.shutdownHookEnabled=false
-Dlog4j2.disable.jmx=true
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/lib/elasticsearch

 

对内存的设置规则:https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html

总结出来的内存规则是:

1. 最大heap size的大小为是可用内存的一半,mini heap size最好和max heaap size设置为一样。如下所示

-Xms16g
-Xmx16g

这两个要设置为一样,否则启动会报警报。

   2. 最大heap size的大小不要超过可用内存的50%。

  3. 别把max heap size设置超过压缩的 oops (很多系统上是32G),最好低于zero-based compressed oops(很多系统上是26G)。

 

2.3 启动ES

# systemctl enable elasticsearch.service

# systemctl start elasticsearch

# systemctl status elasticsearch

# ps -ef|grep elasticsearch

# lsof -i:9200

COMMAND   PID          USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    12104 elasticsearch  411u  IPv4 358159      0t0  TCP VM_27_9_centos:wap-wsp (LISTEN)

 检查elasticsearch的健康状态

# curl '10.70.27.6:9200'

{
  "name" : "node-6",
  "cluster_name" : "irootech-oversea-es",
  "cluster_uuid" : "Vspu559iR5ijhz52k_Ib4Q",
  "version" : {
    "number" : "6.1.2",
    "build_hash" : "5b1fea5",
    "build_date" : "2018-01-10T02:35:59.208Z",
    "build_snapshot" : false,
    "lucene_version" : "7.1.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

把10.70.27.6 换成 10.70.27.9, 10.70.27.3,逐一测试即可。

 

顺便说一下: 可以使用curl命令来获取集群的相关的信息,

  • _cat代表查看信息
  • nodes为查看节点信息,默认会显示为一行,所以就用刀了?preety让信息更有好的显示
  • ?preety让输出信息更友好的显示

例如: 

curl -XGET http://10.70.27.6:9200/_cat/nodes?pretty

10.70.27.9 11 34 0 0.14 0.05 0.06 mdi * node-9
10.70.27.3  9 34 0 0.00 0.01 0.05 mdi - node-3
10.70.27.6 11 34 0 0.00 0.01 0.05 mdi - node-6

带*的那个节点就是 master节点,如上图的node-9.

到此,配置和启动完毕。

===================================

2.4  9200上启动用户认证

上面的安装不会对9200上的用户访问限制,会有安全漏铜。这里采用安装x-pack来设置端口9200上用户访问。步骤如下

在三台机器上,均执行下面的步骤

# cd  /usr/share/elasticsearch/
# ./bin/elasticsearch-plugin install x-pack

选其中的一台机器上,执行下面的步骤。 

# ./bin/setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,kibana,logstash_system.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]yes
Did not understand answer 'yes'
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]: 
Reenter password for [elastic]: 
Enter password for [kibana]: 
Reenter password for [kibana]: 
Enter password for [logstash_system]: 
Reenter password for [logstash_system]: 
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [elastic]

 然后重启所有的机器。

# systemctl restart elasticsearch

这是用浏览器去访问 http://10.70.27.6:9200/_cat/nodes?pretty, 就会提示要输入用户名和密码了。用户名为: elastic, 密码就是上面的最后一步你自己设置的。

 

后记

一些有用的步骤。

  1. 动态添加一个新的ES主机 

注意:如果往elasticsearch集群中新增一个节点,做法如下:

1)在新节点上安装jdk和elasticsearch服务,配置elasticsearch.yml文件了,启动elasticsearch服务

2)在集群中其他节点上配置elasticsearch.yml文件,不需要启动elasticsearch服务

3)在新节点上执行curl 'localhost:9200/_cat/indices?v'命令,查看健康状态以及数据同步情况

4)在代码中增加新增elasticsearch节点的配置,上线更新后,查看新增节点的elasticsearch日志是否有信息写入.

 2) 如果关闭某个节点或将其从集群中提出来,需要提前通知该节点停止同步数据(迁移的时候会用到)。

# curl -XPUT 'localhost:9200/_cluster/settings' -d '{"transient" : {"cluster.routing.allocation.enable" : "none”}}’

 

其它有用的文章

 

1. Elasticsearch 6.x 问题解决和添加验证  https://www.jianshu.com/p/f53da7e6469c

2. 重置elasticsearch的超级管理员密码  https://www.jianshu.com/p/2ecac3ae1b67

3. elasticsearch 9200端口登录认证方案 https://blog.csdn.net/qq_28429443/article/details/81167123

你可能感兴趣的:(elasticsearch)