elasticsearch 集群浅析及搭建

相关概念

集群(cluster): 由一个或多个节点组成, 并通过集群名称与其他集群进行区分
​
节点(node): 单个ElasticSearch实例.ES集群中每一个节点就是一个node
​
索引(index): 在ES中, 索引是一组文档的集合
​
分片(shard): 因为ES是个分布式的搜索引擎, 所以一个索引通常都会分解成不同部分, 而这些分布在不同节点的数据就是分片. 
        ES自动管理和组织分片, 并在必要的时候对分片数据进行再平衡分配, 所以用户基本上不用担心分片的处理细节,分片分为主分片和副本分配。
​
副本(replica): ES默认为一个索引创建5个主分片, 并分别为其创建一个副本分片. 也就是说每个索引都由5个主分片成本, 而每个主分片都相应的有一个copy
​
健康度:green(健康)、yellow(亚健康)、red(不可用)

elasticsearch 相关的配置优化

1 合理的创建索引
    为了减少索引数量并避免庞大的映射,考虑将相同索引结构的数据存储在相同的索引中,而不是基于数据的来源将数据分割成独立的索引,
在每个索引的索引数量和映射大小之间找到一个很好的平衡很重要
2 内存
    首先我们要清楚内存在es中的主要作用,首先每个分片都需要将自己的索引信息和位置信息保存在堆空间中,以便在搜索的时候能快速的定位分片,
节点拥有的堆内存越多,它可以处理的数据和分片越多,再者es使用Lucene作为分词搜索包,势必会造成很大程度上的内存消耗,因此在内存允许的情况下,
增大es的堆内存,能明显的提高es的性能,修改es安装目录下 config/jvm.options 文件:
        -Xms4g
        -Xmx4g
    注:当然内存分配也不是越大越好,当你内存分配超过32G这个边界的时候,你就会发现被JVM狠狠地坑一把
3 合理的分片数和副本数
    es默认的分片数是每个索引5个主分片,每个主分片对应一个副本分片,那么分片和副本分片个数如何确定?既然有主分片,
那么副本分片的存在价值体现在什么地方呢?首先我们来看es集群的健康状态:
    (1)通过如下命令可查看es的健康状态:
        curl 'http://localhost:9200/_cat/health?v' 
    返回结果中active_shards_percent字段,是指当前活跃的分片比例,也就是非空闲的分片占比,如果是 100%,
那么es集群的状态应该就是green,及分片全部可用;yellow:副本分片不可用(常见单机情况);red:部分主分片损坏不可用,
可通过如下命令查看分片信息:
        curl -XGET 'localhost:9200/_cat/shards'
    如果出现单机下副本节点不可用的情况,使用如下命令删除副本,此时集群的健康状态及为green:
        curl -XPUT "http://localhost:9200/_settings" -d' {  "number_of_replicas" : 0 } '
    (2)单机默认配置下,分片的活跃占比是50%,说明副本分片必然处于空闲状态,成为冗余副本,当然,如果不是单机,
且副本数是1的情况下,分片的使用率自然是100%,此时主分片和与其对应的副本分片必然分布在不通的集群节点上,这样就能保证集群数据的安全性,
如果某个节点挂掉了,副本分片会自动成为主分片,并且再次拷贝生成一个副本分片,所以正常情况下,es集群副本分片数为1,就能保证数据的安全性。
    (3)正常情况下分片数=node数*(1~1.5),这样一方面也是为了充分发挥集群的优势,提高搜索速度,当然如果集群中每个索引都比较小,比如小于5G,
那么一个分片就足矣,经验告诉我们,每个分片的大小最好是在20G以内,故可根据这个标准设定分片数。
        修改es的分片数和副本数,在config/elasticsearch.yml中添加如下配置:
            index.number_of_shards: 5 
            number_of_replicas: 1
4 es集群层面优化
首先需要清楚es集群中node的三种角色:
master node:(node.master: true  node.data: false)
    master节点主要用于元数据(metadata)的处理,比如索引的新增、删除、分片分配等,不存储任何索引数据,node服务器将使用自身空闲得资源,
来协调各种创建索引请求或者查询请求,将这些请求合理分发到相关得node服务器上。
data node:(node.master: false node.data: true)
    data节点只作为一个数据节点,只用于存储索引数据。它负责数据存储和数据查询,比如分片的 CRUD,以及搜索和整合操作。这些操作都比较消耗 CPU、内存和 I/O 资源;
client node:(node.master: false node.data: false)
    client 节点起到路由请求的作用,实际上可以看做负载均衡器。
在大数据生产环境中,搭建es集群,最好分工明确,各司其职,一般情况下分配一个节点做master节点,一个节点做client节点,其余节点做数据节点
5 es配置集群
修改elasticsearch.yml文件:
    node.master:true #是否作为master
    discovery.zen.ping.unicast.hosts:["192.168.1.1","192.168.1.2","192.168.1.3"]
    discovery.zen.minimum_master_nodes: 2

说明:discovery.zen.minimum_master_nodes参数默认值是1,该参数的意思是,一个节点需要看到的具有master节点资格的最小数量,然
后才能在集群中做操作,换句话说,当具备成为主节点的从节点的个数满足这个数字且都认为主节点挂了则会进行选举产生新的主节点;官方的
推荐值是(N/2)+1,其中N是具有master资格的节点的数量(比如具备master资格的节点数是3,这个参数设置为2;但对于只有2个节点的情况,
设置为2就有些问题了,一个节点DOWN掉后,两台es服务器均会出问题,只能配置成1)。

猜你喜欢

转载自blog.csdn.net/wutongyuWxc/article/details/81392546
今日推荐