h2.post_title { background-color: rgba(43, 102, 149, 1); color: rgba(255, 255, 255, 1); font-size: 18px !important; font-weight: bold !important; line-height: 38px !important; padding-left: 10px; border-radius: 4px }

一、Elasticsearch 集群理论基础

我们之所以使用 Elasticsearch,就是希望它能帮助我们存储海量的数据,并且可以很快的将我们需要的数据查找出来,即解决海量数据搜索的问题,其次才是解决海量数据统计的问题。

Elasticsearch 本身的设计就是分布式的,也是高可用性的。Elasticsearch 通过集群,可以将数据分布式存储,虽然一个节点(服务器)的存储空间有限,但是集群就可以增加节点,横向扩展存储空间,同时,集群还能将节点的数据联合进行计算,允许部分节点出现异常但不影响整体的使用,这是 Elasticsearch 高可用性的表现。

有人可能会问,数据分布式存储就可以提高系统的高可用性吗?其实,Elasticsearch 不是简单的将数据分布在若干节点(服务器)上就可以的,这涉及到一些基本概念。当我们建立一个索引时,这个索引将被分成 n 个主分片,每个主分片又各自复制了 m 份,复制的分片简称为副分片,这样一来,主分片、副分片一共 n*(m+1) 个,将主分片、副分片分布在若干节点服务器上,各个服务器节点可以互相访问,互相合作,就构成集群,但是要注意,主分片和它对应的副分片一般不存放在同一节点上,这是因为如果一个分片和它对应的副分片都存放在一起,当这个节点出现问题,其它节点就找不到对应的数据,会造成数据丢失,从而影响Elasticsearch的计算结果,这也不符合集群的理念。

Elasticsearch 搭建集群很简单,每个节点配置一个节点名,各个打算连成集群的节点都配置一样的集群名,然后各个节点可以互相访问,便成为集群。

二、集群配置与搭建

下面以 Windows10 单机为例,建立一个集群,首先按下图建好目录,即是准备3个节点的集群

文件目录 node1、node2、node3 分别存放官方下载的 Elasticsearch 包,如下图

node1 文件夹 config 中的配置文件 elasticsearch.yml  添加以下配置:

#集群名称,保证唯一
cluster.name: logelasticsearch
#节点名称,必须不一样
node.name: node1
#必须为本机的ip地址
network.host: 0.0.0.0
http.host: 0.0.0.0
#服务端口号,在同一机器下必须不一样
http.port: 9210
#集群间通信端口号,在同一机器下必须不一样
transport.tcp.port: 9310
#设置集群自动发现机器ip集合
discovery.zen.ping.unicast.hosts: ["0.0.0.0:9310","0.0.0.0:9311","0.0.0.0:9312"]
#设置主节点
cluster.initial_master_nodes: node1
http.cors.enabled: true
http.cors.allow-origin: "*"

node2 文件夹 config 中的配置文件 elasticsearch.yml  添加以下配置:

#集群名称,保证唯一
cluster.name: logelasticsearch
#节点名称,必须不一样
node.name: node2
#必须为本机的ip地址
network.host: 0.0.0.0
http.host: 0.0.0.0
#服务端口号,在同一机器下必须不一样
http.port: 9211
#集群间通信端口号,在同一机器下必须不一样
transport.tcp.port: 9311
#设置集群自动发现机器ip集合
discovery.zen.ping.unicast.hosts: ["0.0.0.0:9310","0.0.0.0:9311","0.0.0.0:9312"]
#设置主节点
cluster.initial_master_nodes: node1
http.cors.enabled: true
http.cors.allow-origin: "*"

node3 文件夹 config 中的配置文件 elasticsearch.yml  添加以下配置:

#集群名称,保证唯一
cluster.name: logelasticsearch
#节点名称,必须不一样
node.name: node3
#必须为本机的ip地址
network.host: 0.0.0.0
http.host: 0.0.0.0
#服务端口号,在同一机器下必须不一样
http.port: 9212
#集群间通信端口号,在同一机器下必须不一样
transport.tcp.port: 9312
#设置集群自动发现机器ip集合
discovery.zen.ping.unicast.hosts: ["0.0.0.0:9310","0.0.0.0:9311","0.0.0.0:9312"]
#设置主节点
cluster.initial_master_nodes: node1
http.cors.enabled: true
http.cors.allow-origin: "*"

注意:上面的配置中,各个节点的名称不一样,但是集群名称都是 logelasticsearch,这样3个节点的集群配置完成。

打开 powershell  启动第一个节点:

cd  E:\es-cluster\node1\bin

./elasticsearch.bat

访问    http://localhost:9210/

再用同样的方式启动第二个节点、第三个节点,分别访问 http://localhost:9211/   、  http://localhost:9212/

启动head插件:

cd  D:\ES\elasticsearch-head-master

npm start

访问  http://localhost:9100/

这时候,集群搭建完成,可以在head插件上看一下效果。

三、建立索引

上面已经建立好一个3个节点的集群,现在建立一个索引,指定分片数是 3,每个分片复制 2份,建立语句如下:

PUT   http://localhost:9210/logdb
{
"mappings": {
"properties": {
"ID": {
"type": "integer"
},
"Url": {
"type": "text",
"analyzer":"ik_max_word"
},
"Title": {
"type": "text",
"analyzer":"ik_max_word"
}
}
},
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}

打开head插件,可以看到类似以下的效果图:

从上图就可以看出这个集群的相关信息:

    1. 集群名称是 logelasticsearch
    2. 集群总共包含3个节点,分别是 node1、node2、node3
    3. 索引名称是 logdb
    4. 索引包含3个分片,如上图红色框所示,分别存放在3个节点上,同时每个分片有2个备份,存储在其他节点上

从上图可以看出,如果节点 node1 挂了,那么节点2完全可以找到全部的数据,因为节点2包含了 0、1、2 这三部分数据,

节点三也可以完全找到这三部分数据,这就是为什么集群可以提高系统的稳定性和高可用性。

当这9部分数据都可用时,集群健康为绿色,当复制分片不可用时,集群出于亚健康状态,为黄色,应该及时排查原因,

当主分片出现问题时,集群为红色,应该引起高度重视。

Elasticsearch 第九篇:集群配置与搭建的更多相关文章

  1. Elasticsearch分布式搜索集群配置

    配置文件位于%ES_HOME%/config/elasticsearch.yml文件中,用Editplus打开它,你便可以进行配置.   所有的配置都可以使用环境变量,例如:node.rack: ${ ...

  2. Elasticsearch 安装与集群配置

    一.软件版本 操作系统:CentOS-6.5-x86_64 ES版本:5.0 主机:192.168.63.246 主机: 192.168.63.242 二.部署环境规划:   1. 需求:jdk版本: ...

  3. elasticsearch集群配置 (Tobe Continue)

    elasticsearch集群配置 (Tobe Continue)   准备 首先需要在每个节点有可以正常启动的单节点elasticsearch   elasticsearch集群配置仅需要在elas ...

  4. ElasticSearch入门 第二篇:集群配置

    这是ElasticSearch 2.4 版本系列的第二篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  5. ES2:ElasticSearch 集群配置

    ElasticSearch共有两个配置文件,都位于config目录下,分别是elasticsearch.yml和logging.yml,其中,elasticsearch.yml 用来配置Elastic ...

  6. Elastic Stack之ElasticSearch分布式集群yum方式搭建

    Elastic Stack之ElasticSearch分布式集群yum方式搭建 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.搜索引擎及Lucene基本概念 1>.什么 ...

  7. Ubuntu 14.04中Elasticsearch集群配置

    Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成 ...

  8. 大数据系列(1)——Hadoop集群坏境搭建配置

    前言 关于时下最热的技术潮流,无疑大数据是首当其中最热的一个技术点,关于大数据的概念和方法论铺天盖地的到处宣扬,但其实很多公司或者技术人员也不能详细的讲解其真正的含义或者就没找到能被落地实施的可行性方 ...

  9. MySQL Cluster 7.3.5 集群配置参数优化(优化篇)

    按照前面的教程:MySQL Cluster 7.3.5 集群配置实例(入门篇),可快速搭建起基础版的MySQL Cluster集群,但是在生成环境中,还是有很多问题的,即配置参数需要优化下, 当前生产 ...

随机推荐

  1. 《剑指offer》面试题56 - II. 数组中数字出现的次数 II

    问题描述 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次.请找出那个只出现一次的数字. 示例 1: 输入:nums = [3,4,3,3] 输出:4 示例 2: 输入:nums ...

  2. Redis Hyperloglog的原理及数学理论的通俗理解

    redis中有一种数据格式,hyperloglog,本文就此数据结构的作用.redis的实现及其背后的数学原理作一个整理.当然本文不包含任何数学公式,而是希望用直观的例子帮大家理解. 主要内容如下: ...

  3. Android开发----EditText&ImageView&第三方库的加载

    EditText组件 一个实例描述该组件的全部属性(虚假的登录界面) 在activity.xml中 <?xml version="1.0" encoding="ut ...

  4. 第08讲:Flink 窗口、时间和水印

    Flink系列文章 第01讲:Flink 的应用场景和架构模型 第02讲:Flink 入门程序 WordCount 和 SQL 实现 第03讲:Flink 的编程模型与其他框架比较 第04讲:Flin ...

  5. MySQL 5.7.19 简易安装、卸载教程

    前言:传统的 exe 文件安装的MySQL,安装后特别难卸载,而且一旦处理不好,就容易出错,想再安装别的版本也不容易.因为这种方式的安装,虽然是不断的下一步,但是卸载的时候需要处理很多,在本文最后,有 ...

  6. Dapr 和 Azure Functions : Hello world

    本篇文章内容来自 https://charliedigital.com/2021/07/01/dapr-and-azure-functions-part-1-hello-world/ ,是按这篇文章的 ...

  7. 洛谷P7814 「小窝 R3」心の記憶

    题意 第一行给定两个数字\(n\) \(m\) \((m \ge n)\)分别代表给定字符串长度以及需要构造出的字符串长度 第二行给定一个长度为\(n\)的字符串 (假设原来的字符串是\(a\) 需要 ...

  8. 计算机电子书 2016 BiliDrive 备份

    下载方式 根据你的操作系统下载不同的 BiliDrive 二进制. 执行: bilidrive download <link> 链接 文档 链接 Go入门指南.epub (1.87 MB) ...

  9. JavaBeginnersTutorial 中文系列教程·翻译完成

    原文:JavaBeginnersTutorial 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 学习资源 目录 ...

  10. 使用require.context实现前端工程自动化

    require.context是什么 一个webpack的api,通过执行require.context函数获取一个特定的上下文,主要用来实现自动化导入模块,在前端工程中,如果遇到从一个文件夹引入很多 ...