Elasticsearch集群搭建(Docker)
Es简介
ElasticSearch(https://www.elastic.co/cn/elasticsearch/) 是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
Es版本
Es6.x版本前后,变化较大,本文只针对6.x以上版本介绍
使用场景
- 全文搜索
- 联想查询
优势 (以下引用来自elastic官方)
-
查询速度很快:
快速获得结果:
如果您能够立即获得答案,您与数据的关系就会发生变化。这样您就有条件进行迭代并涵盖更大的范围。强大的设计:
但是要达到这样的速度并非易事。我们通过有限状态转换器实现了用于全文检索的倒排索引,实现了用于存储数值数据和地理位置数据的 BKD 树,以及用于分析的列存储。无所不包:
而且由于每个数据都被编入了索引,因此您再也不用因为某些数据没有索引而烦心。您可以用快到令人惊叹的速度使用和访问您的所有数据。 -
友好的查询和分析功能:
定义自己的搜索方式:
通过 Elasticsearch,您能够执行及合并多种类型的搜索(结构化数据、非结构化数据、地理位置、指标),搜索方式随心而变。分析大规模数据:
找到与查询最匹配的 10 个文档并不困难。但如果面对的是十亿行日志,又该如何解读呢?Elasticsearch 聚合让您能够从大处着眼,探索数据的趋势和规律。 -
可扩展性,开发环境和生产环境可以无缝切换:
分片功能:
能够水平扩展,每秒钟可处理海量事件,同时能够自动管理索引和查询在集群中的分布方式,以实现极其流畅的操作 -
相关度:
搜索所有内容,找到所需的具体信息:
基于各项元素(从词频或新近度到热门度等)对搜索结果进行排序。将这些内容与功能进行混搭,以优化向用户显示结果的方式。Elasticsearch 具备齐全功能,可以处理包括各种复杂情况(例如拼写错误)在内的人为错误。 -
弹性:
弹性收缩特点:
硬件故障。网络分割。Elasticsearch 为您检测这些故障并确保您的集群(和数据)的安全性和可用性。通过跨集群复制功能,辅助集群可以作为热备份随时投入使用。
集群搭建
使用版本:Elasticsearch6.3.2,Centos:7
环境中需要包含Docker,Java
拉取镜像(其他版本: https://www.elastic.co/guide/en/elasticsearch/reference/6.3/docker.html)【三个服务器节点都需要安装镜像,如果镜像下载过慢可以使用镜像打包,上传至其他两个节点上】
docker pull docker.elastic.co/elasticsearch/elasticsearch:6.3.2
挂载宿主机文件【所有服务器节点】
#es配置文件夹
mkdir /usr/local/elk/es/config
#es插件文件夹
mkdir /usr/local/elk/es/plugins
#es数据存放文件夹
mkdir /usr/local/elk/es/data
设置文件权限【所有服务器节点】
#修改文件权限
chmod -R 777 /usr/local/elk/es/
修改内存使用最大限制,如果服务器本身没有这么多内存,可以修改es启动变量来减少使用的内存大小【所有服务器节点】
#内存修改
vi /etc/sysctl.conf
#添加以下配置:
vm.max_map_count=262144 #具体大小可以查看es最小内存配置
#执行以下命令生效
sysctl -p
设置配置文件elasticsearch.yml,这里我只用了部分配置,具体配置详解:https://www.elastic.co/guide/en/elasticsearch/reference/6.3/modules.html
#【服务器节点_1】
vi /usr/local/elk/es/config/elasticsearch.yml
#配置内容
#集群模式下 cluster.name 必须一致
cluster.name: es
node.name: node-1
node.master: true
node.data: true
#es绑定本地ip
network.bind_host: 0.0.0.0
#es对外发布的ip
network.publish_host: node-1_外网ip
http.port: 9200
#主节点最少配置两个
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping.unicast.hosts: ["node-1_外网ip", "node-2_外网ip","node-3_外网ip"]
transport.tcp.port: 9300
transport.tcp.compress: true
#【服务器节点_2】
vi /usr/local/elk/es/config/elasticsearch.yml
#配置内容
cluster.name: es
node.name: node-2
node.master: true
node.data: true
network.bind_host: 0.0.0.0
network.publish_host: node-2_外网ip
http.port: 9200
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping.unicast.hosts: ["node-1_外网ip", "node-2_外网ip","node-3_外网ip"]
transport.tcp.port: 9300
transport.tcp.compress: true
#【服务器节点_3】
vi /usr/local/elk/es/config/elasticsearch.yml
#配置内容
cluster.name: es
node.name: node-3
node.master: true
node.data: true
network.bind_host: 0.0.0.0
network.publish_host: node-3_外网ip
http.port: 9200
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping.unicast.hosts: ["node-1_外网ip", "node-2_外网ip","node-3_外网ip"]
transport.tcp.port: 9300
transport.tcp.compress: true
启动docker-es ,不变更es使用最大最小内存数
docker run -d \
--restart=always \
--name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-v /usr/local/elk/es/plugins:/usr/share/elasticsearch/plugins \
-v /usr/local/elk/es/data:/usr/share/elasticsearch/data \
-v /usr/local/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
docker.elastic.co/elasticsearch/elasticsearch
启动docker-es ,变更es使用最大最小内存数
docker run -d \
--restart=always \
--name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-v /usr/local/elk/es/plugins:/usr/share/elasticsearch/plugins \
-v /usr/local/elk/es/data:/usr/share/elasticsearch/data \
-v /usr/local/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
docker.elastic.co/elasticsearch/elasticsearch
查看集群健康状态
http://服务器节点ip:9200/_cat/health?v