一、集群的介绍
1.集群的介绍
1.集群部署好以后,不论在哪一台节点操作,都可以互相看到数据
2.head插件连接任意一台机器都能看到三台
3.数据会自动调度到多个分片
4.如果主节点的分片出现故障,副节点的分片会自动切换为主分片
5.如果主节点出现问题,那么数据节点会自动切换为主节点
2.查看集群状态
1.查看节点信息
GET _cat/nodes
[root@es01 ~]
2.查看集群状态
GET _cat/health
3.查看集群中的主节点
GET _cat/master
4.查看索引
GET _cat/indices
5.查看分片信息
GET _cat/shards
6.查看指定索引的分片
GET _cat/shards/index
3.注意事项
1.配置集群时,配置集群的IP,不需要把所有机器IP都写到配置文件,只需要有一台机器IP是集群中的
discovery.zen.ping.unicast.hosts: ["172.16.1.71" , "172.16.1.72" ]
2.集群选举相关参数,一定要设置集群数量的半数以上
discovery.zen.minimum_master_nodes: 2
3.索引创建,默认是一个副本五个分片
4.数据分配时分片颜色变化
1)紫色:数据正在迁移(节点恢复时)
2)黄色:数据正在复制(节点出现问题时)
3)绿色:正常
5.3个节点时
1)0副本情况,一台机器都不能损坏
2)1副本情况,可以一台机器一台机器的坏
3)2副本时,可以同时坏两台
6.索引一旦建立就不能修改分片数量了,但是可以修改副本数
4.监控
1.监控的时候,不能只监控集群颜色状态
1)集群的节点数
2)集群的状态
3)以上两个内容,有一个改变就告警
2.使用插件监控
二、集群信息修改
1.修改指定索引的副本数
PUT /index/_settings
{
"number_of_replicas" : 2
}
2.修改所有索引的副本数
PUT /_all/_settings
{
"number_of_replicas" : 2
}
3.设置分片数
1)创建索引时指定分片书
PUT /fenpian
{
"settings" : {
"number_of_replicas" : 1
, "number_of_shards" : 3
}
}
2)创建索引规则
1.每分配一个分片,都会有额外的成本。
2.每个分片本质上就是一个Lucene索引,因此会消耗相应的文件句柄,内存和CPU资源。
3.每个搜索请求会调度到索引的每个分片中。如果分片分散在不同的节点倒是问题不太。
但当分片开始竞争相同的硬件资源时,性能便会逐步下降。
4.ES使用词频统计来计算相关性。当然这些统计也会分配到各个分片上。
如果在大量分片上只维护了很少的数据,则将导致最终的文档相关性较差。
3)企业中如何设置
2个节点:默认分片和副本即可
3个节点:比较重要的数据,配置2个副本,不重要的数据默认1个副本
如果你有3个节点, 则推荐你创建的分片数最多不超过9(3x3)个.
是否有必要在每个节点上只分配一个索引的分片. 另外, 如果给每个分片分配1个副本,
你所需的节点数将加倍. 如果需要为每个分片分配2个副本, 则需要3倍的节点数.
三、集群检测
1.检测脚本
[root@elkstack01 ~]
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 "\033[1;32m 集群运行正常 \033[0m"
elif status == "yellow" :
print "\033[1;33m 副本分片丢失 \033[0m"
else :
print "\033[1;31m 主分片丢失 \033[0m"
[root@elkstack01 ~]
集群运行正常
2.增强插件 x-pac
kibana 6.6自带监控插件 x-pac
四、ES优化
1.设置ES的JVM最大最小内存限制
1.ElasticSearch设置的内存不要超过32G
一旦你越过那个神奇的30-32G的边界,指针就会切回普通对象的指针,
每个对象的指针都变长了,就会使用更多的CPU内存带宽,也就是说你实际上失去了更多的内存。
2.ES的服务器,一半的内存都给到ES使用
内存对于Elasticsearch来说绝对是重要的,用于更多的内存数据提供更快的操作。
而且还有一个内存消耗大户-Lucene,Lucene的性能取决于和OS的交互,如果你把所有的内存都分配给Elasticsearch,
不留一点给Lucene,那你的全文检索性能会很差的,最后标准的建议是把50%的内存给elasticsearch,
剩下的50%也不会没有用处的,Lucene会很快吞噬剩下的这部分内存。不要超过32G
3.如何设置
刚开始给一个很小的值,查看内存消耗,内存消耗过快慢慢的提高值,监控读写速率达到最高时确定设置的内存
2.问题
1.数据过多怎么办,磁盘空间不足怎么办?
1)跟开发沟通,先尝试删除没有用的数据
2)如果删除后资源还是不足,在考虑添加资源
3.优化文件描述符
[root@es01 ~]
* - nofile 65535
[root@es01 ~]
* soft nproc 4096
root soft nproc unlimited
4.语句优化
1.条件程序时,尽量使用term查询,减少range查询
2.建立索引的时候,尽量使用大集合的方式
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步