下面是本博主在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命令来获取集群的相关的信息,
例如:
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, 密码就是上面的最后一步你自己设置的。
一些有用的步骤。
注意:
如果往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