• 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

  • 相关阅读:
    MySQL动态添删改列字段
    关于javascript在子页面中函数无法调试问题的解决
    <T> T[] toArray(T[] a);
    MERGE INTO
    eclipse不能新建server
    关于tomcat7下websocket不能使用
    myeclipse启动tomcat报错cannot find a free socket for debugger
    checkbox提交多组数据到action
    Struts2 Action中的方法命名不要以get开头
    浅谈C#中的接口和抽象类
  • 原文地址:https://www.cnblogs.com/Applogize/p/13517402.html
Copyright © 2020-2023  润新知