-
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