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读写分离了吧!!!!
如果您觉得我的文章对你有一定的帮助,帮我点个赞偶
elasticsearch实现读写分离的更多相关文章
- 让Elasticsearch集群冷热分离、读写分离【转】
转自:https://blog.csdn.net/jiao_fuyou/article/details/50511255 根据Elasticsearch中文社区<ES冷热分离(读写分离) hot ...
- elasticsearch 冷热数据的读写分离
步骤 一.冷热分离集群配置 比如三个机器共六个node的es集群. 每个机器上各挂载一个ssd 和 一个sata.每个机器需要启动两个es进程.每个进程对应不同类型的磁盘. 关键配置: node.ma ...
- 读写分离&分库分表学习笔记
读写分离 何为读写分离? 见名思意,根据读写分离的名字,我们就可以知道:读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上. 这样的话,就能够小幅提升写性能,大幅提升读性能. 我简单画了一 ...
- mybatis plugins实现项目【全局】读写分离
在之前的文章中讲述过数据库主从同步和通过注解来为部分方法切换数据源实现读写分离 注解实现读写分离: http://www.cnblogs.com/xiaochangwei/p/4961807.html ...
- Spring aop应用之实现数据库读写分离
Spring加Mybatis实现MySQL数据库主从读写分离 ,实现的原理是配置了多套数据源,相应的sqlsessionfactory,transactionmanager和事务代理各配置了一套,如果 ...
- MySQL+Amoeba实现数据库主从复制和读写分离
MySQL读写分离是在主从复制的基础上进一步通过在master上执行写操作,在slave上执行读操作来实现的.通过主从复制,master上的数据改动能够同步到slave上,从而保持了数据的一致性.实现 ...
- J2EE 项目读写分离
先回答下 1.为啥要读写分离? 大家都知道最初开始,一个项目对应一个数据库,基本是一对一的,但是由于后来用户及数据还有访问的急剧增多, 系统在数据的读写上出现了瓶颈,为了让提高效率,想读和写不相互影响 ...
- mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离
数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境. 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡. 比较了 ...
- Spring 实现数据库读写分离
随着互联网的大型网站系统访问量的增高,数据库访问压力方面不断的显现而出,所以许多公司在数据库层面采用读写分离技术,也就是一个master,多个slave.master负责数据的实时更新或实时查询,而s ...
随机推荐
- Selenium2Library中select frame关键字对没有name和id的frame或者iframe的处理
elenium2Library中原有的select_frame函数(对应的关键字为select frame)可根据locator选择frame,但是,若某个frame或者iframe没有id,没有na ...
- install busybox时报error: storage size of ‘rlimit_fsize’ isn’t known struct rlimit rlimit_fsize
解决办法: 在busybox根目录下查找到文件:find -name libbb.h 在libbb.h.h中包含sys/resource.h 说明: 上述错误的原因是rlimit结构体未知,原因是相应 ...
- 项目管理模式:外瀑布内敏捷(有人称为“信封法”)--转自知乎大神:CORNERSTONE
作者:CORNERSTONE 链接:https://www.zhihu.com/question/265968122/answer/878124580 来源:知乎 著作权归作者所有.商业转载请联系作者 ...
- Java-Class-@I:io.swagger.annotation.ApiParam
ylbtech-Java-Class-@I:io.swagger.annotation.ApiParam 1.返回顶部 2.返回顶部 1. package com.ylbtech.api.cont ...
- python redis demo
上代码,redis-demo #!/usr/bin/env python #_*_ coding:UTF-8 _*_ import redis ####配置参数 host = '192.168.0.1 ...
- Java获取CPU占用率
原文链接:https://www.jianshu.com/p/015cc4805e29 最近做一个Java性能统计的问题,需要统计当前进程占用CPU的情况,最开始使用Java MxBean来获取 Op ...
- Unity通过Jar包调用Android
Unity通过Jar包调用Android 我们会需要面对下面几个问题,我们一个一个来解决: 怎样在Android Studio中打Jar包 怎样打一个Unity使用的Jar包 怎样在Unity工程中使 ...
- LintCode 汉诺塔
题目链接:https://www.lintcode.com/problem/tower-of-hanoi/description 题目大意 经典递归问题. 分析 由于是经典问题了,这里不讨论用递归实现 ...
- VMware中 CentOS7挂载windows共享文件夹
在编译自己的hadoop时,不想再次在虚拟机中下载jar包,就想到了挂载自己本地的maven仓库,使用本地仓库来进行编译,这里就需要使用VMware的VMware Tools了,直接复制官方文档如下 ...
- D3.js 弦生成器(V3版本)
弦生成器(Chord Generator) 弦生成器(Chord Generator)根据两段弧来绘制弦,共有五个访问器,分别为source().target().radius().startAn ...