ElasticSearch 集群

1.ElasticSearch 集群相关概念

1.ES集群颜色状态

①. — 红色:数据都不完整

②. — 黄色:数据完整,但是副本有问题

③. — 绿色:数据和副本全都没有问题

2.ES 集群节点类型

①. — 主节点:负责调度分配数据

②. — 数据节点:处理分配到自己的数据

3.ES 集群分片类型

①. — 主分片:存储数据,负责读写数据

②. — 副本分片:主分片的备份

4.ES 集群安全保障

①. — 数据会自动分配到多个节点

②. — 如果主分片所在节点挂掉,副本节点的分片会自动升为主分片

③. — 如果主节点挂了,数据节点会自动提升为主节点

5.集群特点

1.集群中的数据不论在哪一台机器操作,都可以看到
2.使用插件连接任意一台机器,都能看到三个节点
3.数据会自动分配到多个节点
4.如果主分片所在节点挂掉,副本节点的分片会自动升为主分片
5.如果主节点挂了,数据节点会自动提升为主节点

2.ES 集群配置注意事项

1.集群节点的配置,不需要将所有节点的 IP 都写入配置文件,只需要写本机 IP 和集群中任意一台机器的 IP 即可:

# 修改 /etc/elasticsearch/elasticsearch.yml 配置文件
122 配置:    discovery.zen.ping.unicast.hosts: ["10.0.0.121", "10.0.0.122"]
123 配置:    discovery.zen.ping.unicast.hosts: ["10.0.0.121", "10.0.0.123"]
xxx 配置:    discovery.zen.ping.unicast.hosts: ["10.0.0.121", "10.0.0.xxx"]

2.— 集群选举节点配置数量,一定是 N(集群节点总数)/2+1:

# 修改 /etc/elasticsearch/elasticsearch.yml 配置文件,当前集群节点总数 N = 3
discovery.zen.minimum_master_nodes: 2

3.ES 默认 5 个分片 1 个副本,索引创建以后,分片数量不得修改,副本数可以修改

# ======= 配置文件 ======= #
# 修改 /etc/elasticsearch/elasticsearch.yml 配置参数
# 设置索引的分片数 , 默认为 5 
index.number_of_shards: 5  

# 设置索引的副本数 , 默认为 1  
index.number_of_replicas: 1  

4.数据分配时,分片颜色

# 紫色:数据正在迁移(扩展节点时会遇到)


# 黄色:数据正在复制(节点宕机,其他节点需要补全分片副本)

5.当集群共有三个节点时,根据配置的分片副本数,可发生的故障:

 1)三个节点,没有副本时,一台机器都不能坏

​ 2)三个节点,一个副本时,可以坏两台,但是只能一台一台坏(要时间复制生成新的副本)

​ 3)三个节点,两个副本时,可以坏两台(一起坏)

3.ES 集群相关命令

# ======= ES 集群状态 ======= #
# 1.查看主节点
GET _cat/master

# 2.查看集群健康状态
GET _cat/health

# 3.查看索引
GET _cat/indices

# 4.查看所有节点
GET _cat/nodes

# 5.查看分片
GET _cat/shards

# 一般可以通过以下两个命令监控集群的健康状态,两者有一个发变化,说明集群发生故障
GET _cat/health
GET _cat/nodes
# 实际上 Kibana 会内置 X-Pack 软件,监控集群的健康状态

4.ElasticSearch 集群配置修改

1.配置分片数 & 副本数

# ES 默认 5 个分片 1 个副本,索引创建以后,分片数量不得修改,副本数可以修改

# ======= 配置文件 ======= #
# 修改 /etc/elasticsearch/elasticsearch.yml 配置参数
# 设置索引的分片数 , 默认为 5 
index.number_of_shards: 5  

# 设置索引的副本数 , 默认为 1  
index.number_of_replicas: 1  

2.修改指定索引副本数

PUT /index/_settings
{
  "number_of_replicas": 2
}

3.修改所有索引副本数

PUT _all/_settings
{
  "number_of_replicas": 2
}

4.创建索引时指定分片数 & 副本数

PUT /testone
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}

5.注意,分片数不是越多越好:

1.分片数不是越多越好,会占用资源
2.每个分片都会占用文件句柄数
3.查询数据时会根据算法去指定节点获取数据,分片数越少,查询成本越低

6.分片数 & 副本数配置建议

1.跟开发沟通
2.看一共要几个节点
    2个节点,默认就可以了
    3个节点,重要的数据,2副本5分片,不重要的数据,1副本5分片
3.在开始阶段, 一个好的方案是根据你的节点数量按照1.5~3倍的原则来创建分片. 
    例如:如果你有3个节点, 则推荐你创建的分片数最多不超过9(3x3)个.
4.存储数据量多的可以设置分片多一些,存储数据量少的,可以少分写分片

5.ElasticSearch 配置优化

1.限制内存

1.启动内存最大是32G
2.服务器一半的内存全都给ES
3.设置可以先给小一点,慢慢提高
4.内存不足时
	1)让开发删除数据
	2)加节点
	3)提高配置
5.关闭swap空间

2.文件描述符

1.配置文件描述符
[root@db02 ~]# vim /etc/security/limits.conf
* soft memlock unlimited
* hard memlock unlimited
* soft nofile 131072
* hard nofile 131072

2.普通用户
[root@db02 ~]# vim /etc/security/limits.d/20-nproc.conf 
*          soft    nproc     65535
root       soft    nproc     unlimited

[root@db02 ~]# vim /etc/security/limits.d/90-nproc.conf 
*          soft    nproc     65535
root       soft    nproc     unlimited

3.语句优化

1.条件查询时,使用term查询,减少range的查询
2.建索引的时候,尽量使用命中率高的词

5.集群的监控

1.监控内容

1.查看集群健康状态
	GET _cat/health

2.查看所有节点
	GET _cat/nodes
	
# 两者有一个产生变化,说明集群出现故障

2.脚本监控

[root@db01 ~]# vim es_cluster_status.py
#!/usr/bin/env python
#coding:utf-8
#Author:_DriverZeng_
#Date:2017.02.12

import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
import subprocess
body = ""
false = "false"
clusterip = "10.0.0.51"
obj = subprocess.Popen(("curl -sXGET http://"+clusterip+":9200/_cluster/health?pretty=true"),shell=True, stdout=subprocess.PIPE)
data =  obj.stdout.read()
data1 = eval(data)
status = data1.get("status")
if status == "green":
    print "33[1;32m 集群运行正常 33[0m"
elif status == "yellow":
    print "33[1;33m 副本分片丢失 33[0m"
else:
    print "33[1;31m 主分片丢失 33[0m"
    
[root@db01 ~]# python es_cluster_status.py
 集群运行正常 

3.监控插件 x-pack

原文地址:https://www.cnblogs.com/Applogize/p/13517402.html