elasticsearch实现读写分离

简介

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

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

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

elasticsearch实现读写分离

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

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区)

 elasticsearch实现读写分离

 

导入数据到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分区上)

 elasticsearch实现读写分离

 

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

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

 

上一篇:Android NDK 初探,生成so文件以及调用so文件方法


下一篇:【推荐算法】推荐系统中的特征工程(五):特征样本构造工具的实现3