zoukankan      html  css  js  c++  java
  • elasticsearch 集群详解

    ES为什么要实现集群

    在单台ES服务器节点上,随着业务量的发展索引文件慢慢增多,会影响到效率和内存存储问题等。

    如果使用ES集群,会将单台服务器节点的索引文件使用分片技术,分布式的存放在多个不同的物理机器上,从而可以实现高可用、容错性等。

    es核心存放的是索引。

    什么是分片技术

    将数据拆分成多台节点进行存放。

    ES是如何解决高并发

    ES是一个分布式全文检索框架,隐藏了复杂的处理机制,内部使用 分片机制、集群发现、分片负载均衡请求路由。

    Shards 分片:代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。

    Replicas分片:代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

    ES集群核心原理分析

    1、每个索引会被分成多个分片shards进行存储,默认创建索引是分配5个分片进行存储,每个分片都会分布式部署在多个不同的节点上进行部署,该分片成为primary shards 主分片。

    查看索引分片信息

    http://192.168.0.110:9200/myindex/_settings

    结果为:

    {
        "myindex":{
            "settings":{
                "index":{
                    "creation_date":"1559964953858",
                    "number_of_shards":"5",  //主分片
                    "number_of_replicas":"1", //副分片
                    "uuid":"PPLrlfo6Re2z6KMrVfaMWg",
                    "version":{
                        "created":"6040399"
                    },
                    "provided_name":"myindex"
                }
            }
        }
    }

    在ES 中每一个主的分片都有一个对应的副分片,这里总共由10分片。

    注意:索引的主分片数量定义好后,不能被修改。主分片数量一旦定义好之后就不能修改,但是副分片的数量是可以修改的。

     

    2、每一个主分片为了实现高可用,都会有自己对应的备分片,主分片对应的备分片不能存放同一台服务器上,主分片可以和其他备分片存放在同一个node节点上。

    单台 ES 服务器中是没有副分片的。

    documnet routing(数据路由)

    当客户端发起创建document的时候,es需要确定这个document放在该index哪个shard上。这个过程就是数据路由。

    路由算法:shard = hash(routing) % number_of_primary_shards

    如果number_of_primary_shards在查询的时候取余发生的变化,无法获取到该数据

     

     ES是相关名词

    Cluster:代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。

     Shards:代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。  replicas:代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

    Recovery:代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。

     

     

    ES集群环境搭建

    服务集群配置

    修改配置文件 

    目录:/usr/local/es/elasticsearch-6.4.3/config

    vi elasticsearch.yml

    cluster.name: myes  ###保证三台服务器节点集群名称相同

    node.name: node-1 #### 每个节点名称不一样 其他两台为node-1 ,node-2

    network.host: 192.168.212.110 #### 实际服务器ip地址

    discovery.zen.ping.unicast.hosts: ["192.168.0.105", "192.168.0.108","192.168.212.110"]##多个服务集群ip

    discovery.zen.minimum_master_nodes: 1

     

    关闭防火墙 systemctl stop firewalld.service

    默认底层开启9300 集群

     

     

    验证集群效果

     

    http://192.168.0.110:9200/_cat/nodes?pretty

    注意克隆data文件会导致数据不同步

    报该错误解决办法

    failed to send join request to master

    因为克隆导致data文件也克隆呢,直接清除每台服务器data文件,data目录:/usr/local/es/elasticsearch-6.4.3/data 。

     效果如下,第一张图是添加索引,第二张是查询索引。注意它们的 ip 不一致,这样说明集群环境搭建成功了。

     

     

  • 相关阅读:
    ZipOutputStream SharpZipLib 插件加密无法解密
    Bootstrap可视化页面布局
    Centos7中加载验证码图片报错
    Centos7中安装多版本dotnet core sdk
    NetCore中使用MySql操作数据库时发生异常
    NetCore写属性过滤时遇到的AutoFac注入的问题
    微信小程序采坑记
    PC共享网络,非软件
    hibernate HQL —— ReflectHelper.java:343
    hibernate SQL聚合查询
  • 原文地址:https://www.cnblogs.com/ming-blogs/p/11001282.html
Copyright © 2011-2022 走看看