准备环境

elasticsearch-6.6.0

配置 elasticsearch

修改 elasticsearch.yml

ElasticSearch 默认将所有节点都设置为数据节点,这会降低集群的运行效率,因此将集群角色和数据节点分开有利于集群的任务分配和效率。
Elasticsearch 多节点基础搭建 - 图1

  1. # es_master
  2. # ---------------------------------- Cluster -----------------------------------
  3. cluster.name: es_cluster
  4. # ------------------------------------ Node ------------------------------------
  5. node.name: es_master
  6. node.master: true
  7. node.data: false
  8. # ----------------------------------- Paths ------------------------------------
  9. # 可配置多目录,path.data: /opt/data,/opt/data2
  10. path.data: /opt/module/elasticsearch/data
  11. path.logs: /opt/module/elasticsearch/logs
  12. # ----------------------------------- Memory -----------------------------------
  13. bootstrap.memory_lock: false
  14. bootstrap.system_call_filter: false
  15. # ---------------------------------- Network -----------------------------------
  16. network.host: 0.0.0.0
  17. #http.port: 9200
  18. #transport.tcp.port: 9300
  19. http.cors.enabled: true
  20. http.cors.allow-origin: "*"
  21. # --------------------------------- Discovery ----------------------------------
  22. #discovery.seed_hosts: ["hadoop102:9300", "hadoop103:9301", "hadoop104:9302"]
  23. #cluster.initial_master_nodes: ["es_master"]
  24. discovery.zen.ping.unicast.hosts: ["hadoop102", "hadoop103", "hadoop104"]
  25. #discovery.zen.minimum_master_nodes: 2
  1. # es_node1
  2. # ---------------------------------- Cluster -----------------------------------
  3. cluster.name: es_cluster
  4. # ------------------------------------ Node ------------------------------------
  5. node.name: es_node1
  6. node.master: false
  7. node.data: true
  8. # ----------------------------------- Paths ------------------------------------
  9. # 可配置多目录,path.data: /opt/data,/opt/data2
  10. path.data: /opt/module/elasticsearch/data
  11. path.logs: /opt/module/elasticsearch/logs
  12. # ----------------------------------- Memory -----------------------------------
  13. bootstrap.memory_lock: false
  14. bootstrap.system_call_filter: false
  15. # ---------------------------------- Network -----------------------------------
  16. network.host: 0.0.0.0
  17. #http.port: 9200
  18. #transport.tcp.port: 9300
  19. http.cors.enabled: true
  20. http.cors.allow-origin: "*"
  21. # --------------------------------- Discovery ----------------------------------
  22. #discovery.seed_hosts: ["hadoop102:9300", "hadoop103:9301", "hadoop104:9302"]
  23. #cluster.initial_master_nodes: ["es_master"]
  24. discovery.zen.ping.unicast.hosts: ["hadoop102", "hadoop103", "hadoop104"]
  25. #discovery.zen.minimum_master_nodes: 2
  1. # es_node2
  2. # ---------------------------------- Cluster -----------------------------------
  3. cluster.name: es_cluster
  4. # ------------------------------------ Node ------------------------------------
  5. node.name: es_node2
  6. node.master: false
  7. node.data: true
  8. # ----------------------------------- Paths ------------------------------------
  9. # 可配置多目录,path.data: /opt/data,/opt/data2
  10. path.data: /opt/module/elasticsearch/data
  11. path.logs: /opt/module/elasticsearch/logs
  12. # ----------------------------------- Memory -----------------------------------
  13. bootstrap.memory_lock: false
  14. bootstrap.system_call_filter: false
  15. # ---------------------------------- Network -----------------------------------
  16. network.host: 0.0.0.0
  17. #http.port: 9200
  18. #transport.tcp.port: 9300
  19. http.cors.enabled: true
  20. http.cors.allow-origin: "*"
  21. # --------------------------------- Discovery ----------------------------------
  22. #discovery.seed_hosts: ["hadoop102:9300", "hadoop103:9301", "hadoop104:9302"]
  23. #cluster.initial_master_nodes: ["es_master"]
  24. discovery.zen.ping.unicast.hosts: ["hadoop102", "hadoop103", "hadoop104"]
  25. #discovery.zen.minimum_master_nodes: 2

调整 jvm 堆空间大小

  1. vim /opt/es1/config/jvm.options
  1. -Xms256m
  2. -Xmx256m

启动、测试 ElasticSearch

  1. ./bin/elasticsearch

启动报错:

image.png
问题1:max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536] elasticsearch
原因:
默认配置过低,需要修改配置或者提高性能。
解决:
允许 Elasticsearch 打开的最大文件数修改为 65536,提高线程个数、es用户描述权限。

  1. sudo vim /etc/security/limits.conf

添加内容:

  1. * soft nofile 65536
  2. * hard nofile 131072
  3. * soft nproc 2048
  4. * hard nproc 65536

问题2:max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
原因:
一个进程可以拥有的虚拟内存区域的数量不足。
解决:
提高内存权限、限制swap交换空间、TCP重传最大次数。

  1. sudo vim /etc/sysctl.conf

在文件添加:

  1. vm.max_map_count=262144
  2. vm.swappiness = 1
  3. net.ipv4.tcp_retries2=5

注:在更庞大的集群内,建议将swap空间提升至10,提高系统性能。
加载sysctl.conf参数

  1. sysctl -p

运行测试

方式1:

  1. curl http://hadoop102:9200/_cat/nodes?v

方式2:
在浏览器中,输入 http://hadoop102:9200/ 查看效果
方式3:
ElasticSearch Head 插件

集群脚本编写

在/home/node/bin目录下创建es.sh,并授予执行权限

  1. #!/bin/bash
  2. # ES、kibana启停脚本
  3. es_home=/opt/module/elasticsearch
  4. kibana_home=/opt/module/kibana
  5. case $1 in
  6. "start") {
  7. for i in hadoop102 hadoop103 hadoop104
  8. do
  9. echo "==============$i ES 启动=============="
  10. ssh $i "source /etc/profile;${es_home}/bin/elasticsearch >/dev/null 2>&1 &"
  11. done
  12. echo "==============kibana 启动=============="
  13. nohup ${kibana_home}/bin/kibana >${kibana_home}/logs/kibana.log 2>&1 &
  14. };;
  15. "stop") {
  16. echo "==============kibana 停止=============="
  17. ps -ef|grep ${kibana_home}|grep -v grep|awk '{print $2}'|xargs kill
  18. for i in hadoop102 hadoop103 hadoop104
  19. do
  20. echo "==============$i ES停止=============="
  21. ssh $i "ps -ef|grep $es_home |grep -v grep|awk '{print \$2}'|xargs kill" >/dev/null 2>&1
  22. done
  23. };;
  24. esac

如果脚本执行出现错误:/bin/bash^M: 坏的解释器: 没有那个文件或目录 错误原因: 这个文件在Windows 下编辑过,在Windows下每一行结尾是\n\r,而Linux下则是\n,所以才会有 多出来的\r 解决: 使用指令sed -i ‘s/\r$//‘ xxxxxxx.sh,上面的指令会把 xxxxxxx.sh 中的\r 替换成空白

curl 小知识:

使用 curl 命令操作 ElasticSearch 格式如下:

  1. curl -X<REST Verb> <Node>:<Port>/<Index>/<Type>/<ID>
  2. <REST Verb>:REST风格的语法谓词
  3. <Node>:节点ip
  4. <Index>:索引名
  5. <Type>:索引类型
  6. <ID>:操作对象的ID
http://hadoop102:9200/_cat/
1 /_cat/allocation 提供一个快照,反映当前节点有多少个分片(shard)以及用了多少磁盘空间(disk)
2 /_cat/shards 反应每个节点有那些分片,告诉我们,那些是主分片,那些是从分片,每个分片的document数量,以及在该节点占用的磁盘空间
3 /_cat/shards/{index} 查看具体索引的分片信息
4 /_cat/master 查看master信息
5 /_cat/nodes 查看节点信息
6 /_cat/tasks 查看任务
7 /_cat/indices 查看索引信息
8 /_cat/indices/{index} 查看具体索引信息
9 /_cat/segments 查看存储片段信息
10 /_cat/segments/{index} 查看具体索引的存储片段信息
11 /_cat/count 该指令可以获取当前集群中有多少个document,类似mysql中有多少条记录,查看文档总数
12 /_cat/count/{index} 查看具体索引的文档总数
13 /_cat/recovery 反应当前系统中,索引分片的恢复信息,包括正在进行的以及已经完成了的。
恢复,指的是当节点添加或者减少时发生的数据移动造成的。
14 /_cat/recovery/{index} 查看具体索引的数据恢复状态
15 /_cat/health 反应当前集群的健康指数信息
16 /_cat/pending_tasks 查看待处理任务
17 /_cat/aliases 可以查询出当前索引的filter以及routing所配置的别名信息。
18 /_cat/aliases/{alias} 指定别名查看信息
19 /_cat/thread_pool 查看线程池信息
20 /_cat/thread_pool/{thread_pools} 查看线程池下插件
21 /_cat/plugins 提供一个视图,反应当前节点中处在运行状态的插件。
22 /_cat/fielddata 查看fielddata占用内存情况(查询时es会把fielddata信息load进内存)
23 /_cat/fielddata/{fields} 针对某一字段进行查看
24 /_cat/nodeattrs 反应出当前数据节点的属性信息
25 /_cat/repositories 查看存储库
26 /_cat/snapshots/{repository} 查看快照库
27 /_cat/templates 查看模板