准备环境
配置 elasticsearch
修改 elasticsearch.yml
ElasticSearch 默认将所有节点都设置为数据节点,这会降低集群的运行效率,因此将集群角色和数据节点分开有利于集群的任务分配和效率。
# es_master# ---------------------------------- Cluster -----------------------------------cluster.name: es_cluster# ------------------------------------ Node ------------------------------------node.name: es_masternode.master: truenode.data: false# ----------------------------------- Paths ------------------------------------# 可配置多目录,path.data: /opt/data,/opt/data2path.data: /opt/module/elasticsearch/datapath.logs: /opt/module/elasticsearch/logs# ----------------------------------- Memory -----------------------------------bootstrap.memory_lock: falsebootstrap.system_call_filter: false# ---------------------------------- Network -----------------------------------network.host: 0.0.0.0#http.port: 9200#transport.tcp.port: 9300http.cors.enabled: truehttp.cors.allow-origin: "*"# --------------------------------- Discovery ----------------------------------#discovery.seed_hosts: ["hadoop102:9300", "hadoop103:9301", "hadoop104:9302"]#cluster.initial_master_nodes: ["es_master"]discovery.zen.ping.unicast.hosts: ["hadoop102", "hadoop103", "hadoop104"]#discovery.zen.minimum_master_nodes: 2
# es_node1# ---------------------------------- Cluster -----------------------------------cluster.name: es_cluster# ------------------------------------ Node ------------------------------------node.name: es_node1node.master: falsenode.data: true# ----------------------------------- Paths ------------------------------------# 可配置多目录,path.data: /opt/data,/opt/data2path.data: /opt/module/elasticsearch/datapath.logs: /opt/module/elasticsearch/logs# ----------------------------------- Memory -----------------------------------bootstrap.memory_lock: falsebootstrap.system_call_filter: false# ---------------------------------- Network -----------------------------------network.host: 0.0.0.0#http.port: 9200#transport.tcp.port: 9300http.cors.enabled: truehttp.cors.allow-origin: "*"# --------------------------------- Discovery ----------------------------------#discovery.seed_hosts: ["hadoop102:9300", "hadoop103:9301", "hadoop104:9302"]#cluster.initial_master_nodes: ["es_master"]discovery.zen.ping.unicast.hosts: ["hadoop102", "hadoop103", "hadoop104"]#discovery.zen.minimum_master_nodes: 2
# es_node2# ---------------------------------- Cluster -----------------------------------cluster.name: es_cluster# ------------------------------------ Node ------------------------------------node.name: es_node2node.master: falsenode.data: true# ----------------------------------- Paths ------------------------------------# 可配置多目录,path.data: /opt/data,/opt/data2path.data: /opt/module/elasticsearch/datapath.logs: /opt/module/elasticsearch/logs# ----------------------------------- Memory -----------------------------------bootstrap.memory_lock: falsebootstrap.system_call_filter: false# ---------------------------------- Network -----------------------------------network.host: 0.0.0.0#http.port: 9200#transport.tcp.port: 9300http.cors.enabled: truehttp.cors.allow-origin: "*"# --------------------------------- Discovery ----------------------------------#discovery.seed_hosts: ["hadoop102:9300", "hadoop103:9301", "hadoop104:9302"]#cluster.initial_master_nodes: ["es_master"]discovery.zen.ping.unicast.hosts: ["hadoop102", "hadoop103", "hadoop104"]#discovery.zen.minimum_master_nodes: 2
调整 jvm 堆空间大小
vim /opt/es1/config/jvm.options
-Xms256m-Xmx256m
启动、测试 ElasticSearch
./bin/elasticsearch
启动报错:

问题1:max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536] elasticsearch
原因:
默认配置过低,需要修改配置或者提高性能。
解决:
允许 Elasticsearch 打开的最大文件数修改为 65536,提高线程个数、es用户描述权限。
sudo vim /etc/security/limits.conf
添加内容:
* soft nofile 65536* hard nofile 131072* soft nproc 2048* hard nproc 65536
问题2:max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
原因:
一个进程可以拥有的虚拟内存区域的数量不足。
解决:
提高内存权限、限制swap交换空间、TCP重传最大次数。
sudo vim /etc/sysctl.conf
在文件添加:
vm.max_map_count=262144vm.swappiness = 1net.ipv4.tcp_retries2=5
注:在更庞大的集群内,建议将swap空间提升至10,提高系统性能。
加载sysctl.conf参数
sysctl -p
运行测试
方式1:
curl http://hadoop102:9200/_cat/nodes?v
方式2:
在浏览器中,输入 http://hadoop102:9200/ 查看效果
方式3:
ElasticSearch Head 插件
集群脚本编写
在/home/node/bin目录下创建es.sh,并授予执行权限
#!/bin/bash# ES、kibana启停脚本es_home=/opt/module/elasticsearchkibana_home=/opt/module/kibanacase $1 in"start") {for i in hadoop102 hadoop103 hadoop104doecho "==============$i ES 启动=============="ssh $i "source /etc/profile;${es_home}/bin/elasticsearch >/dev/null 2>&1 &"doneecho "==============kibana 启动=============="nohup ${kibana_home}/bin/kibana >${kibana_home}/logs/kibana.log 2>&1 &};;"stop") {echo "==============kibana 停止=============="ps -ef|grep ${kibana_home}|grep -v grep|awk '{print $2}'|xargs killfor i in hadoop102 hadoop103 hadoop104doecho "==============$i ES停止=============="ssh $i "ps -ef|grep $es_home |grep -v grep|awk '{print \$2}'|xargs kill" >/dev/null 2>&1done};;esac
如果脚本执行出现错误:/bin/bash^M: 坏的解释器: 没有那个文件或目录 错误原因: 这个文件在Windows 下编辑过,在Windows下每一行结尾是\n\r,而Linux下则是\n,所以才会有 多出来的\r 解决: 使用指令sed -i ‘s/\r$//‘ xxxxxxx.sh,上面的指令会把 xxxxxxx.sh 中的\r 替换成空白
curl 小知识:
使用 curl 命令操作 ElasticSearch 格式如下:
curl -X<REST Verb> <Node>:<Port>/<Index>/<Type>/<ID><REST Verb>:REST风格的语法谓词<Node>:节点ip<Index>:索引名<Type>:索引类型<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 | 查看模板 |
