【ELK】【docker】6.Elasticsearch 集群启动多节点 + 解决ES节点集群状态为yellow

本章其实是ELK第二章的插入章节。

本章ES集群的多节点是docker启动在同一个虚拟机上

=====================================================================================

ELK系列的示例中,启动的是单个的ES节点。

 系列文章:

【ELK】【docker】【elasticsearch】1. 使用Docker和Elasticsearch+ kibana 5.6.9 搭建全文本搜索引擎应用 集群,安装ik分词器

【ELK】【docker】【elasticsearch】2.使用elasticSearch+kibana+logstash+ik分词器+pinyin分词器+繁简体转化分词器  6.5.4 启动   ELK+logstash概念描述

【ELK】【ElasticSearch】3.es入门基本操作

【ELK】4.spring boot 2.X集成ES spring-data-ES 进行CRUD操作 完整版+kibana管理ES的index操作

【ELK】5.spring boot日志集成ELK,搭建日志系统

【ELK】【docker】6.Elasticsearch 集群启动多节点 + 解决ES节点集群状态为yellow

【ELK】7. elasticsearch linux上操作es命令详解

======================================================================================

一、单节点的问题描述----ES集群状态可能为yellow

单节点ES使用起来,没有多大的问题。

但有一点无法避免,即index创建多分片和多备份的话,会显示ES节点状态为yellow。

1.ES集群健康状态为yellow

那,即图中所描述的:备份虽然设置为1  但是每个分片的备份其实都没有成功。因为没有另一个节点可以提供备份的场所。

最终导致的结果就是ES集群的健康状态为yellow。

而如果本ES节点挂掉,则数据完全丢失。

 

2.spring boot对接ES或spring boot日志对接ELK多数默认index的replicas为1

在前几章中,其实都是使用的ES单节点提供服务。

而spring boot中如果不是用自定义settings设置index的shards和replicas,那默认的index的shards=5,而replicas=1。

同样spring boot日志logback对接logstash,搭建ELK分布式日志系统,默认的index的shards=5,而replicas=1。

如果依旧启动的是单节点Nodes=1,那么就会导致

 

 

二、ElasticSearch 6.5.4版本启动集群

本章其实是ELK系列文章 第二章的插入章节。

1.前提步骤就是拉取镜像  和  跳转第一步一样

2.先分别启动es1和es2

docker run  -d --name es1  -p 9200:9200 -p 9300:9300 --restart=always  elasticsearch:6.5.4
docker run  -d --name es2  -p 9201:9201 -p 9301:9301 --restart=always  elasticsearch:6.5.4

注意:和启动单节点少了个参数 

-e "discovery.type=single-node"

 

3.分别查询es1和es2容器的IP

docker inspect es1

docker inspect es2

 

4.分别进入es1和es2容器中,修改elasticsearch.yml文件内容

elasticsearch.yml文件路径

cd   /usr/share/elasticsearch/config

 

文件原内容

 

分别修改elasticsearch.yml文件内容为:

cluster.name: "docker-cluster"
network.host: 0.0.0.0

# minimum_master_nodes need to be explicitly set when bound on a public IP
# set to 1 to allow single node clusters
# Details: https://github.com/elastic/elasticsearch/pull/17288
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping.unicast.hosts: ["127.0.0.1","172.17.0.2:9200","172.17.0.7:9201","172.17.0.2:9300","172.17.0.7:9301"]

注释1:

  discovery.zen.minimum_master_nodes: 2  是保证集群中的节点知道集群中有N个master资格的节点

注释2:

  discovery.zen.ping.unicast.hosts: ["127.0.0.1","172.17.0.2:9200","172.17.0.7:9201","172.17.0.2:9300","172.17.0.7:9301"]  标明集群初始的master节点列表

  需要注意的是,这里的IP是docker容器自己的IP,而不是宿主机的IP。【在同一台虚拟机上启动两个es实例的情况下】

注释3:

  修改内容的说明可以参考elasticsearch.yml配置文件详解或者【ELK】【docker】【elasticsearch】1. 使用Docker和Elasticsearch+ kibana 5.6.9 搭建全文本搜索引擎应用 集群,安装ik分词器

  这两篇中都有详细说明

注释4:

  es1的配置文件和es2配置文件内容都修改为上面的内容即可

 

5.分别推出容器,分别重启es1和es2容器实例

exit
docker restart  es1   es2

 

6.分别观察es1的启动日志和es2的启动日志,并查看集群健康状态

docker logs -f es1

其中一个节点启动后,一定会报错,提示目前集群中只有一个master节点但是配置文件中 need 2  需要两个。

 

 而这种情况一直会持续到 另一个节点也启动成功,并且成功加入集群后, 集群的健康状态 会由  yellow变成 Green.

 

查看另外一个节点的启动日志,可以发现两个节点已经互相发现

 

 

 

 

当然,最后可以通过请求查看集群状态

curl '192.168.92.130:9200/_cluster/health?pretty'

 

 

 

 

7.如果成功安装kibana了,也可以查看ES的节点状况

kibana的安装以及ELK整个环境的搭建 还是得回到ELK系列文件的第二章节

 

不仅上面这张图可以反映   创建集群成功后,一个Index分别设置shards=5  replicas=1 后,集群的health=Green

下面这张图更能清晰的看出来

 

 

 

8.最后要注意的

其实在第6步看到日志以后,就可以确定ES的集群启动成功了。

第7步只是在kibana上直观的可以感受到集群的分布。

最后需要注意的一点,就是es1和es2如果需要应用于业务,其实还需要将ik分词器,pinyin分词器,繁简体转换等插件分别安装完成。

这个安装的步骤,还是回到ELK系列 第二章去继续看吧。

 

==========================================================================结束=====================================================================

 

posted @ 2019-02-28 11:35  Angel挤一挤  阅读(6286)  评论(0编辑  收藏  举报