单机es可以用,没毛病,但是有一点我们需要去注意,就是高可用是需要关注的,一般我们可以把es搭建成集群,2台以上就能成为es集群了。集群不仅可以实现高可用,也能实现海量数据存储的横向扩展。

新的阅读体验地址: http://www.zhouhong.icu/post/138

一、Elasticsearch分片机制:

  • 每个索引可以被分片,每个主分片都包含索引的数据。
  • 副本分片是主分片的备份,主挂了,备份还是可以访问,这就需要用到集群了。
  • 同一个分片的主与副本是不会放在同一个服务器里的,因为一旦宕机,这个分片就没了。

如下图:左边每个索引主备分片都会分配在三台服务器上的不同节点上面,右图粗方框表示主分片,细节点表示备节点。

二、搭建Elasticsearch集群

1、前置操作
  • ​ES中之前的data目录,一定要清空,这里面包含了原先的索引库数据。
  • 使用三台服务器:
  • 192.168.1.184(主), 192.168.1.185(从), 192.168.1.186(从)
  • 关于Elasticsearch单机的简介、安装配置请转到:http://www.zhouhong.icu/post/128
2、配置集群
  • 修改每台服务器上ES的elasticsearch.yml这个配置文件如下,每台服务器node.name不一样分别为es-node1、es-node2、es-node3.
# 配置集群名称,保证每个节点的名称相同,如此就能都处于一个集群之内了
cluster.name: es-cluster
# 每一个节点的名称,必须不一样
node.name: es-node1
# http端口(使用默认即可)
http.port: 9200
# 主节点,作用主要是用于来管理整个集群,负责创建或删除索引,管理其他非master节点(相当于企业老总)
node.master: true
# 数据节点,用于对文档数据的增删改查
node.data: true
# 集群列表
discovery.seed_hosts: ["192.168.1.184", "192.168.1.185", "192.168.1.186"]
# 启动的时候使用一个master节点,未指定ES会进行选举
cluster.initial_master_nodes: ["es-node1"]
3、最后可以通过如下命令查看配置文件的内容:(过滤掉“#”后面的注释)
more elasticsearch.yml | grep ^[^#]
4、切换到esuser后启动,访问集群各个节点,查看信息:
  • http://192.168.1.184:9200/
  • http://192.168.1.185:9200/
  • http://192.168.1.186:9200/
主节点宕机之后会从生下的两个从节点选举新的主节点,主节点恢复后成为从节点。

三、Elasticsearch集群脑裂现象

1、什么是脑裂
  • 如果发生网络中断或者服务器宕机,那么集群会有可能被划分为两个部分,各自有自己的master来管理,那么这就是脑裂。

2、脑裂解决方案
  • master主节点要经过多个master节点共同选举后才能成为新的主节点。就跟班级里选班长一样,并不是你1个人能决定的,需要班里半数以上的人决定。
  • 解决实现原理:半数以上的节点同意选举,节点方可成为新的master。
discovery.zen.minimum_master_nodes=(N/2)+1
  • N为集群的中master节点的数量,也就是那些 node.master=true 设置的那些服务器节点总数。
3、ES 7.X
  • 在最新版7.x中,minimum_master_node这个参数已经被移除了,这一块内容完全由es自身去管理,这样就避免了脑裂的问题,选举也会非常快。‘’

四、Elasticsearch集群的文档读写原理

  • 文档写原理:p1,p2,p0是主节点,r0,r1,r2是副本节点
  • 如果客户端选择了中间节点进行写数据,那这个节点就会变成协调节点,接受用户请求,会对文档进行路由,计算这个文档会写入到哪个主分片中,有主分片把数据同步到副本分片,都写入完成之后,在跳回到协调节点,由协调节点相应请求。

  • 文档读原理:p1,p2,p0是主节点,r0,r1,r2是副本节点
  • 如果客户端请求到了第一个节点,那第一个节点也会变成协调节点,然后根据文档的数据进行路由,然后从主分片或者副本分片轮询读数据。不管从主分片还是副本分片读取数据,最后都会跳回到协调节点,由协调节点相应客户端

五、Elasticsearch集群与SpringBoot整合

1、创建工程,引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2、配置yml文件:客户端连接的是 9300
spring:
data:
elasticsearch:
cluster-name: es-cluster
cluster-nodes: 192.168.1.184:9300,192.168.1.185:9300,192.168.1.186:9300
版本协调:
目前springboot-data-elasticsearch中的es版本贴合为es-6.4.3,如此一来版本需要统一,把es进行降级。等springboot升级es版本后可以在对接最新版的7.4。
3、解决启动时 Netty issue fix 问题
在启动类同一级目录下创建 ESConfig.java 配置类
@Configuration
public class ESConfig {
/**
* 解决netty引起的issue
*/
@PostConstruct
void init() {
System.setProperty("es.set.netty.runtime.available.processors", "false");
}
}

Elasticsearch 分片集群原理、搭建、与SpringBoot整合的更多相关文章

  1. MongoDB分片集群原理、搭建及测试详解

    随着技术的发展,目前数据库系统对于海量数据的存储和高效访问海量数据要求越来越高,MongoDB分片机制就是为了解决海量数据的存储和高效海量数据访问而生. MongoDB分片集群由mongos路由进程( ...

  2. elasticsearch 基础 —— 集群原理

    空集群 如果我们启动了一个单独的节点,里面不包含任何的数据和 索引,那我们的集群看起来就是一个 图 1 "包含空内容节点的集群". 图 1. 包含空内容节点的集群 一个运行中的 E ...

  3. mongo 分片集群的搭建

    MongoDB版本当前使用的MongoDB版本为4.2.0,下载地址.https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2. ...

  4. MongoDB分片集群环境搭建记录

    --创建配置服务器mongod.exe --logpath "G:\USERDATA\MONGODB\Test2\Log\mongodb.log" --logappend --db ...

  5. 【MongoDB】在windows平台下搭建mongodb的分片集群(二)

    在上一片博客中我们讲了Mongodb数据库中分片集群的主要原理. 在本篇博客中我们主要讲描写叙述分片集群的搭建过程.配置分片集群主要有两个步骤.第一启动全部须要的mongod和mongos进程. 第二 ...

  6. Windows 搭建MongoDB分片集群(二)

    在本篇博客中我们主要讲描述分片集群的搭建过程.配置分片集群主要有两个步骤,第一启动所有需要的mongod和mongos进程.第二步就是启动一个mongos与集群通信.下面我们一步步来描述集群的搭建过程 ...

  7. MongoDB Sharding(二) -- 搭建分片集群

    在上一篇文章中,我们基本了解了分片的概念,本文将着手实践,进行分片集群的搭建 首先我们再来了解一下分片集群的架构,分片集群由三部分构成: mongos:查询路由,在客户端程序和分片之间提供接口.本次实 ...

  8. MongoDB 分片集群实战

    背景 在如今的互联网环境下,海量数据已随处可见并且还在不断增长,对于如何存储处理海量数据,比较常见的方法有两种: 垂直扩展:通过增加单台服务器的配置,例如使用更强悍的 CPU.更大的内存.更大容量的磁 ...

  9. MongoDB之分片集群(Sharding)

    MongoDB之分片集群(Sharding) 一.基本概念 分片(sharding)是一个通过多台机器分配数据的方法.MongoDB使用分片支持大数据集和高吞吐量的操作.大数据集和高吞吐量的数据库系统 ...

随机推荐

  1. linux驴杂记

    1. 命令行 vim下 的Ctrl + S ,ctrl +Q: 这个功能可以用于长时间编译的时候随时把屏幕输出停住,但是编译仍然会继续,这样就不会影响到编译时间了. S:是锁屏  q:是开屏 2. S ...

  2. C++基本之 运算符重载

    =====>友元运算符#include <iostream> using namespace std; class Test { public: Test(int a = 0) { ...

  3. OpenStack (neutron 网络服务)

    neutron介绍 提供 OpenStack 虚拟网络服务,也是 OpenStack 重要的核心模块之一,该模块最开始是 Nova 的一部分,叫 nova-network,后来从 Nova 中分离出来 ...

  4. Java开发中POJO和JSON互转时如何忽略隐藏字段

    1. 前言 在Java开发中有时候某些敏感信息我们需要屏蔽掉,不能被消费这些数据的客户端知道.通常情况下我们会将其设置为null或者空字符 "",其实还有其它办法,如果你使用了Ja ...

  5. AtCoder Beginner Contest 168

    比赛链接:https://atcoder.jp/contests/abc168/tasks A - ∴ (Therefore) 题意 给出一个由数字组成的字符串 $s$,要求如下: 如果 $s$ 以 ...

  6. 【noi 2.6_9280】&【bzoj 1089】严格n元树(DP+高精度+重载运算符)

    题意:定义一棵树的所有非叶节点都恰好有n个儿子为严格n元树.问深度为d的严格n元树数目. 解法:f[i]表示深度为<=i的严格n元树数目.f[i]-f[i-1]表示深度为i的严格n元树数目.f[ ...

  7. python+requests爬取百度文库ppt

    实验网站:https://wenku.baidu.com/view/c7752014f18583d04964594d.html 在下面这种类型文件中的请求头的url打开后会得到一个页面 你会得到如下图 ...

  8. Codeforces Round #650 (Div. 3) E. Necklace Assembly (暴力)

    题意:有一个字符串,要求使用其中字符构造一个环(不必全部都用),定义一个环是k美的,如果它转\(k\)次仍是原样,现在给你\(k\),要求最长的k美环的长度. 题解:我们首先看\(k\),如果一个环转 ...

  9. k8s-0-集群

    Docker回顾 docker容器封装应用程序好处 内核在3.8以上,才能完整使用docker隔离功能(所有centos6不推荐用) Docker容器化封装应用程序缺点 容器编排工具有哪些 一: K8 ...

  10. Zabbix 微信监控报警

    Zabbix-Server 设置 # 使脚本目录生效 [root@zabbix ~]# grep 'script' /etc/zabbix/zabbix_server.conf # AlertScri ...