Docker 搭建 ES 集群并整合 Spring Boot

一、前言

什么是 Elasticsearch ?

Elasticsearch 是一个基于 Apache Lucene(TM) 的开源搜索引擎。无论在开源还是专有领域,Lucene 可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库,并通过简单的 RESTful API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。

Elasticsearch 不仅仅是 Lucene 和全文搜索,我们还能这样去描述它:

  • 分布式的实时文件存储,每个字段都被索引并可被搜索;
  • 分布式的实时分析搜索引擎;
  • 可以扩展到上百台服务器,处理 PB 级结构化或非结构化数据。

Elasticsearch 三大要素:

  • 文档(Document):在面向对象观念就是一个对象。在 ES 里面,是一个大 JSON 对象,是指定了唯一 ID 的最底层或者根对象。文档的位置由 _index_type_id 唯一标识。
  • 索引(Index):用于区分文档成组,即分到一组的文档集合。索引,用于存储文档和使文档可被搜索。比如项目存索引 project 里面,交易存索引 sales 等。
  • 类型(Type):用于区分索引中的文档,即在索引中对数据逻辑分区。比如索引 project 的项目数据,根据项目类型 ui 项目、插画项目等进行区分。

二、ES 集群安装

基于 Dokcer ,单机安装 Docker 版集群。使用版本如下:

  • Elasticsearch 5.3.2
  • Kibana 5.3.2
  • JDK 8

安装步骤:

  1. 安装 ES 集群实例 elasticsearch001
  2. 安装 ES 集群实例 elasticsearch002
  3. 安装 Kibana 监控

1. 安装 ES 集群实例 elasticsearch001

打开命令行执行:

docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch001 -h elasticsearch001\
 -e cluster.name=lookout-es -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e xpack.security.enabled=false\
  docker.elastic.co/elasticsearch/elasticsearch:5.3.2

命令浅析如下:

  • -d 设置后台运行容器。
  • -p [宿主机端口]:[容器内端口]
  • --name 设置容器别名。
  • -h 设置容器的主机名。
  • -e 设置环境变量。这里关闭 x-pack 的安全校验功能,防止访问认证。

第一次运行会比较慢,因为拉取 es docker image,但是可以设置国内 Docker 镜像地址。如果成功,命令行会出现如图所示:

image.png

那么验证下是否启动成功,继续执行如下命令:

curl http://localhost:9200/_cat/health\?v

会出现如图所示的结果:

image.png

cluster.name ES 集群名为 lookout-es,这个后面需要指定关联。node 表示只有一个实例。默认 shards 分片为主备两个。status 状态是我们要关心的,状态可能是下列三个值之一:

  • green:所有的主分片和副本分片都已分配。你的集群是 100% 可用的。
  • yellow:所有的主分片已经分片了,但至少还有一个副本是缺失的。不会有数据丢失,所以搜索结果依然是完整的。高可用会弱化把 yellow 想象成一个需要及时调查的警告。
  • red:至少一个主分片(以及它的全部副本)都在缺失中。这意味着你在缺少数据:搜索只能返回部分数据,而分配到这个分片上的写入请求会返回一个异常。

也可以访问 http://localhost:9200/,可以看到成功运行的案例,返回的 JSON 页面。如图:

image.png

2. 安装 ES 集群实例 elasticsearch002

继续执行如下命令:

docker run -d -p 9211:9200 -p 9311:9300 --link elasticsearch001\
  --name elasticsearch002 -e cluster.name=lookout-es -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e xpack.security.enabled=false\
  -e discovery.zen.ping.unicast.hosts=elasticsearch001 docker.elastic.co/elasticsearch/elasticsearch:5.3.2

命令浅析如下:

  • -d 设置后台运行容器。
  • -p [宿主机端口]:[容器内端口],这边指定新的端口,和实例 elasticsearch001 区别开。
  • --link [其他容器名]:[在该容器中的别名] 添加链接到另一个容器, 在本容器 hosts 文件中加入关联容器的记录。
  • --name 设置容器别名。
  • -h 设置容器的主机名。
  • -e 设置环境变量。这里额外指定了 ES 集群的 cluster.name、ES 集群节点淡泊配置 discovery.zen.ping.unicast.hosts 设置为实例 elasticsearch001。

这次运行会很快,成功后命令行会出现如图所示:

image.png

Docker 启动会有一点延时,稍后再使用 health 命令检查下 ES 的集群状态:

curl http://localhost:9200/_cat/health\?v

会出现如图所示的结果:

image.png

对比上面检查数值可以看出,首先集群状态为 green , 所有的主分片和副本分片都已分配。你的集群是 100% 可用的。相应的 node 、shards 都增加。

如果你还想装个 elasticsearch003、elasticsearch004 更多 ES 实例,可以试试。

3. 安装 Kibana 监控

为了更好的监控集群,我们装个 Kibana ,命令行如下:

docker run -d --name kibana001  --link elasticsearch001 -e ELASTICSEARCH_URL=http://elasticsearch001:9200 -p 5601:5601\
 docker.elastic.co/kibana/kibana:5.3.2

命令浅析如下:

  • -d 设置后台运行容器。
  • --link [其他容器名]:[在该容器中的别名] 添加链接到另一个容器,在本容器 hosts 文件中加入关联容器的记录。
  • --name 设置容器别名。
  • -e 设置环境变量。这里额外指定了 ELASTICSEARCH_URL
收藏 收藏
分享
购买文章 ¥8.88