为什么要使用Elasticsearch

为什么要使用 Elasticsearch?

系统中的数据, 随着业务的发展,时间的推移, 将会非常多, 而业务中往往采用模糊查询进行数据的搜索, 而模糊查询会导致查询引擎放弃索引,导致系统查询数据时都是全表扫描,在百万级别的数据库中,查询效率是非常低下的,而我们使用 ES 做一个全文索引,将经常查询的系统功能的某些字段,比如说电商系统的商品表中商品名,描述、价格还有 id 这些字段我们放入 ES 索引库里,可以提高查询速度。
Elasticsearch 的 master 选举流程?

    Elasticsearch的选主是ZenDiscovery模块负责的,主要包含Ping(节点之间通过这个RPC来发现彼此)
    和Unicast(单播模块包含-一个主机列表以控制哪些节点需要ping通)这两部分。
    对所有可以成为master的节点(node master: true)根据nodeId字典排序,每次选举每个节点都把自
    己所知道节点排一次序,然后选出第一个(第0位)节点,暂且认为它是master节点。
    如果对某个节点的投票数达到一定的值(可以成为master节点数n/2+1)并且该节点自己也选举自己,
    那这个节点就是master。否则重新选举一直到满足上述条件。
    master节点的职责主要包括集群、节点和索引的管理,不负责文档级别的管理;data节点可以关闭http
    功能。

Elasticsearch 集群脑裂问题?

“脑裂”问题可能的成因:

    网络问题:集群间的网络延迟导致一些节点访问不到master, 认为master 挂掉了从而选举出新的master,并对master上的分片和副本标红,分配新的主分片。
    节点负载:主节点的角色既为master又为data,访问量较大时可能会导致ES停止响应造成大面积延迟,此时其他节点得不到主节点的响应认为主节点挂掉了,会重新选取主节点。
    内存回收:data 节点上的ES进程占用的内存较大,引发JVM的大规模内存回收,造成ES进程失去响应。

脑裂问题解决方案:

    减少误判:discovery.zen ping_ timeout 节点状态的响应时间,默认为3s,可以适当调大,如果master在该响应时间的范围内没有做出响应应答,判断该节点已经挂掉了。调大参数(如6s,discovery.zen.ping_timeout:6),可适当减少误判。

    选举触发:discovery.zen.minimum. _master_ nodes:1,该参數是用于控制选举行为发生的最小集群主节点数量。当备选主节点的个數大于等于该参数的值,且备选主节点中有该参数个节点认为主节点挂了,进行选举。官方建议为(n / 2) +1, n为主节点个数(即有资格成为主节点的节点个数)。

    角色分离:即master节点与data节点分离,限制角色
        主节点配置为:node master: true,node data: false
        从节点配置为:node master: false,node data: true

posted @ 2022-03-03 23:30  durtime  阅读(312)  评论(0)    收藏  举报