• elasticsearch实现读写分离


    简介

    今天我们不讲三国,我们讲一讲elasticsearch(以下简称ES)读写分离,这是个好东西,全文索引的时候使用它贼得劲,对elasticsearch索引原理不太清楚的,请自行查找相关的文章

    这里不做阐述,最近我在网上找了好多,可是关于elasticsearch读写分离的文章确实少之又少,因为es不想MySQL那样的数据库有主从复制的机制,使用mycat等第三方的插件

    也可以实现读写分离的效果;所以我们要根据es的分片的机制去实现读写分离,具体的原理如下图所示:

    图画的比较丑,我这里再详细说明一下

    1、首先我们需要配置es集群的配置文件,让es集群分为hot和cool两个区

    2、然后我们在导入数据到es集群之前,首先需要创建settings,在创建settings的时候,我们需要指定分片全部分到hot区、副本数为0(增加导入数据的速度),

    3、导入数据到es,这样我们导入数据的时候就是在hot区进行的

    4、调整副本数为1,这样是为了后面的操作

    5、修改settings,指定分区为cool区,这样数据就会复制到cool区

    6、读取数据,这样我们读取数据的时候就会从cool区去读取了

    ES集群环境

    IP地址

    端口

    Es版本号

    分区

    10.122.33.103

    9202/9302

    6.4.2

    Hot

    10.122.33.104

    9202/9302

    6.4.2

    hot

    10.122.33.96

    9202/9302

    6.4.2

    Cool

    10.122.33.97

    9202/9302

    6.4.2

    Cool

    10.122.33.97

    9202/9302

    6.4.2

    Cool

     

     #######################################

    配置流程

     Elasticsearch配置文件:

    首先我们需要配置es集群的配置文件(以下只列出了读写分离所需要的配置):

    #指定node的属性标签名(也就是上面说的分区名)

     node.attr.rack: hot   

    #强制使分片与副本分离。若只有hot标签的节点,索引只有分片可以写入,副本无法分配;若有hot、cool两种标签节点,相同分片与其副本绝不在相同标签节点上

    cluster.routing.allocation.awareness.force.rack.values: hot,cool

    cluster.routing.allocation.awareness.attributes: rack

    指定分片分到hot区

      #创建索引setting,指定分片在那个分区上(index_test1为索引名)

      curl -H "Content-Type: application/json" -XPUT 'http://10.122.33.103:9202/ dm_transaction_service_sum /' -d '{

     "settings" : {       

            "index.routing.allocation.require.rack": "hot",

            "number_of_replicas" : 0 

    }

    }'

      #查看分片的情况(从查看分片的信息我们可以看到,默认的五个分片都在hot区)

     

    导入数据到hot区

      #插入数据到es

      按照上面分片的结果,可以知道所有的写操作都在103和104两台机器上

    更改副本数

      #更改副本数为1

      curl -H "Content-Type: application/json" -XPUT 'http://10.122.33.103:9202/ dm_transaction_service_sum_v20190114_new /_settings' -d '{

        "number_of_replicas" : 1

    }' 

    指定分片分区为cool

      #把分片都挪到cool分区上,供后续索引查询使用

      curl -H "Content-Type: application/json" -XPUT 'http://10.122.33.103:9202/ dm_transaction_service_sum_v20190114_new /_settings' -d '{

           "index.routing.allocation.require.rack": "cool",

           "number_of_replicas" : 0

    }'

      #查看集群分片的情况(现在所有的分片都在cool分区上)

     

    怎么样,看到这里,应该明白了es读写分离了吧!!!!

    如果您觉得我的文章对你有一定的帮助,帮我点个赞偶

  • 相关阅读:
    js实现分享到QQ
    js 复制粘贴
    js弹窗 js弹出DIV,并使整个页面背景变暗
    PHP实现大转盘抽奖算法
    ext 树节点操作
    ExtJS4图片验证码的实现
    随笔分类
    Oracle、MySql、SQLServer 数据分页查询
    Repeater控件使用(含删除,分页功能)
    SQL compute by 的使用
  • 原文地址:https://www.cnblogs.com/madq-py/p/10304316.html
Copyright © 2020-2023  润新知