首页 > 其他分享 >【转载】ElasticSearch集群搭建及集群原理详解

【转载】ElasticSearch集群搭建及集群原理详解

时间:2022-11-23 10:55:06浏览次数:75  
标签:node 详解 ElasticSearch elasticsearch 分片 集群 节点 es

  首先进行单机安装,见以下:

  Elasticsearch + Kibana + IK分词器安装 - 檀潇兵 - 博客园 (cnblogs.com)

1 集群搭建

1.1 修改配置

  每台机器修改elasticsearch.yml配置文件

cd /usr/local/es/elasticsearch-7.6.1/config/
sudo vim elasticsearch.yml
#修改以下配置,保存后重启elasticsearch即可
discovery.seed_hosts: ["124.221.237.87","124.221.243.252","180.76.177.17"]
cluster.initial_master_nodes: ["node-1","node-2","node-3"]

1.2 检查集群情况

  选择其中一个节点进行访问124.221.243.252:9200/_cat/health?v

  出现以上节点信息即搭建集群成功。

  其中参数说明:

    cluster:集群名称
    status:集群状态 green 表示集群一切正常;yellow 表示集群不可靠但可用(单节点状态);red 集群不可用,有故障。
    node.total:节点总数量
    node.data:数据节点的数量
    shards:存活的分片数量
    pri:主分片数量
    relo:迁移中的分片数量
    init:初始化中的分片数量
    unassign:未分配的分片
    pending_tasks:准备中的任务
    max_task_wait_time:任务最长等待时间
    active_shards_percent:激活的分片百分比

2 ElasticSearch-Head插件安装

  由于es服务启动之后,访问界面比较丑陋,为了更好的查看索引库当中的信息, 我们可以通过安装elasticsearch-head这个插件来实现,这个插件可以更方便快 捷的看到es的管理界面 elasticsearch-head这个插件是es提供的一个用于图形化界面查看的一个插件工 具,可以安装上这个插件之后,通过这个插件来实现我们通过浏览器查看es当中 的数据 安装elasticsearch-head这个插件这里提供两种方式进行安装,第一种方式就是 自己下载源码包进行编译,耗时比较长,网络较差的情况下,基本上不可能安装 成功。 第二种方式就是直接使用我已经编译好的安装包,进行修改配置即可 要安装elasticsearch-head插件,需要先安装Node.js。

2.1 安装node.js

复制代码
cd /usr/local/es
wget https://npm.taobao.org/mirrors/node/v8.1.0/node-v8.1.0-linux-x64.tar.gz
tar -zxvf node-v8.1.0-linux-x64.tar.gz -C /usr/local/es/
sudo ln -s /usr/local/es/node-v8.1.0-linux-x64/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm
sudo ln -s /usr/local/es/node-v8.1.0-linux-x64/bin/node /usr/local/bin/node
vi /etc/profile
export NODE_HOME=/usr/local/es/node-v8.1.0-linux-x64
export PATH=:$PATH:$NODE_HOME/bin
source /etc/profile
#验证安装成功
node -v
npm -v
复制代码

2.2 安装ElasticSearch-Head

链接:https://pan.baidu.com/s/1bPQU9AXMmLYlil_wirpfCw
提取码:89av

  通过百度网盘获取安装包并上传至/usr/local/es并解压。

tar -zxvf elasticsearch-head-compile-after.tar.gz
cd /usr/local/es/elasticsearch-head
vim Gruntfile.js
  找到代码中的93行:hostname: '192.168.100.100', 修改为:*。 复制代码
connect: {                       
 server: {                             
 options: {                                    
 hostname: '*',                                    
 port: 9100,                                    
 base: '.',                                    
 keepalive: true                              
  }                       
 }               
 }
复制代码   第一台机器修改app.js。
cd /usr/local/es/elasticsearch-head/_site
vim app.js
在Vim中输入「:4354」,定位到第4354行,修改 http://localhost:9200为http://124.221.237.87:9200
#启动
cd /usr/local/es/elasticsearch-head/node_modules/grunt/bin/
./grunt server
#后台启动
nohup ./grunt server >/dev/null 2>&1 &
Running "connect:server" (connect) taskWaiting forever...Started connect web server on http://192.168.52.100:9100
如何停止:elasticsearch-head进程
执行以下命令找到elasticsearch-head的插件进程,然后使用kill  -9  杀死进程即可
netstat -nltp | grep 9100
kill -9 8328

  访问http://ip:9100/地址出现以下界面即配置成功。

  注意:搭建es集群,启动三个es节点,访问elasticsearch-head时只显示一个master。   解决方案:进到节点2、3的/elasticsearch-7.6.1/data/目录下删除nodes文件,之后重启节点2、3的es进程即可。

3 集群原理详解

3.1 ElasticSearch的节点类型   在ElasticSearch主要分成两类节点,一类是Master,一类是DataNode。    3.1.1  Master节点   在Elasticsearch启动时,会选举出来一个Master节点。当某个节点启动后,然后使用Zen Discovery机制找到集群中的其他节点,并建立连接。discovery.seed_hosts: ["192.168.21.130", "192.168.21.131", "192.168.21.132"],并从候选主节点中选举出一个主节,cluster.initial_master_nodes: ["node1", "node2","node3"]。   Master节点主要负责:     管理索引(创建索引、删除索引)、分配分片     维护元数据     管理集群节点状态     不负责数据写入和查询,比较轻量级    一个Elasticsearch集群中,只有一个Master节点。在生产环境中,内存可以相对小一点,但机器要稳定。   3.1.2  DataNode节点   在Elasticsearch集群中,会有N个DataNode节点。DataNode节点主要负责数据写入、数据检索,大部分Elasticsearch的压力都在DataNode节点上。在生产环境中,内存最好配置大一些。   3.2 分片和副本机制 3.2.1 分片(Shard)    ElasticSearch是一个分布式的搜索引擎,索引的数据也是分成若干部分,分布在不同的服务器节点中分布在不同服务器节点中的索引数据,就是分片(Shard)。Elasticsearch会自动管理分片,如果发现分片分布不均衡,就会自动迁移一个索引(index)由多个shard(分片)组成,而分片是分布在不同的服务器上的。   3.2.2 副本   为了对Elasticsearch的分片进行容错,假设某个节点不可用,会导致整个索引库都将不可用。所以,需要对分片进行副本容错。每一个分片都会有对应的副本。在Elasticsearch中,默认创建的索引为1个分片、每个分片有1个主分片和1个副本分片。每个分片都会有一个Primary Shard(主分片),也会有若干个Replica Shard(副本分片)。Primary Shard和Replica Shard不在同一个节点上。   2.3  指定分片、副本数量 复制代码
# 创建指定分片数量、副本数量的索引
PUT /job_idx_shard_temp
{
"mappings":{
"properties":{
"id":{"type":"long","store":true},
"area":{"type":"keyword","store":true},
"exp":{"type":"keyword","store":true},
"edu":{"type":"keyword","store":true},
"salary":{"type":"keyword","store":true},
"job_type":{"type":"keyword","store":true},
"cmp":{"type":"keyword","store":true},
"pv":{"type":"keyword","store":true},
"title":{"type":"text","store":true},
"jd":{"type":"text"}
}
},
"settings":{
"number_of_shards":3,
"number_of_replicas":2
}
}

# 查看分片、主分片、副本分片
GET /_cat/indices?v
复制代码

3.3 Elasticsearch重要工作流程

3.3.1 ElasticSearch文档写入原理

1.选择任意一个DataNode发送请求,例如:node2。此时,node2就成为一个coordinating node(协调节点)。

2.计算得到文档要写入的分片:  `shard = hash(routing) % number_of_primary_shards`。  routing 是一个可变值,默认是文档的 _id。 3.coordinating node会进行路由,将请求转发给对应的primary shard所在的DataNode(假设primary shard在node1、replica shard在node2)。 4.node1节点上的Primary Shard处理请求,写入数据到索引库中,并将数据同步到Replica shard。 5.Primary Shard和Replica Shard都保存好了文档,返回client。   3.3.2  ElasticSearch检索原理

  client发起查询请求,某个DataNode接收到请求,该DataNode就会成为协调节点(Coordinating Node),协调节点(Coordinating Node)将查询请求广播到每一个数据节点,这些数据节点的分片会处理该查询请求,每个分片进行数据查询,将符合条件的数据放在一个优先队列中,并将这些数据的文档ID、节点信息、分片信息返回给协调节点,协调节点将所有的结果进行汇总,并进行全局排序,协调节点向包含这些文档ID的分片发送get请求,对应的分片将文档数据返回给协调节点,最后协调节点将数据返回给客户端。

3.4 ElasticSearch准实时索引实现

3.4.1 溢写到文件系统缓存

  当数据写入到ES分片时,会首先写入到内存中,然后通过内存的buffer生成一个segment,并刷到文件系统缓存中,数据可以被检索(注意不是直接刷到磁盘),ES中默认1秒,refresh一次。   3.4.2  写translog保障容错   在写入到内存中的同时,也会记录translog日志,在refresh期间出现异常,会根据translog来进行数据恢复等到文件系统缓存中的segment数据都刷到磁盘中,清空translog文件。   3.4.3  flush到磁盘   ES默认每隔30分钟会将文件系统缓存的数据刷入到磁盘。   3.4.4  segment合并   Segment太多时,ES定期会将多个segment合并成为大的segment,减少索引查询时IO开销,此阶段ES会真正的物理删除(之前执行过的delete的数据)。

标签:node,详解,ElasticSearch,elasticsearch,分片,集群,节点,es
From: https://www.cnblogs.com/licaibin666/p/16917596.html

相关文章

  • Day20:继承详解
    继承的理解继承:对类进行抽象化;也就是将存在的类构造成新的类;比如说学生是一个类,老师是一个类,那么我们可以将学生类和老师类收纳进人这个类;那么学生和老师则为子类(派生类)......
  • 详解蓝牙模块的分类
        摘要:蓝牙模块,是一种集成蓝牙功能的PCBA板,用于短距离无线通讯,蓝牙模块将芯片和外围硬件电路集成到一个PCB上,开发出所需的内置程序实现蓝牙功能的设备。可以通过......
  • elasticSearch基础(一)
    es的一些概念索引:相同类型的文档的集合,相当于MySQL的表的概念文档:es是面向文档(Document)存储的,可以是数据库中的一条商品数据,一个订单信息。文档数据会被序列化为jso......
  • elasticsearch bucket 之rare terms聚合
    1、背景我们知道当我们使用terms聚合时,当修改默认顺序为_countasc时,统计的结果是不准备的,而且官方也不推荐我们这样做,而是推荐使用rareterms聚合。rareterms是一个稀少......
  • C++语言类的详解和示例
     超女选秀的例子我们玩了很久,为了教学的需要,暂时离开美眉们,我将采用实际项目开发的例子。在C语言基础知识中已学习过文件操作,在实际开发中,我会把文件操作封装成一个类,类的......
  • C++语言函数重载详解和示例
     C++函数重载的概念在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如把变量的值写入文件,变量的类型int、long、double、char,需要通过参数把变量......
  • elasticsearch bucket 之rare terms聚合
    目录1、背景2、需求3、前置准备3.1准备mapping3.2准备数据4、实现需求4.1dsl4.2java代码4.3运行结果5、max_doc_count和search.max_buckets6、注意事项7、完整代码8......
  • 聊聊如何让办公网络直连Kubernetes集群PodIP/ClusterIP/Service DNS等
    想象一下,如果您日常使用的研发测试Kubernetes集群,能够有以下效果:在办公网络下直接访问PodIP在办公网络下直接访问ServiceClusterIP在办公网络下直接访问集群内部域......
  • Pod控制器详解(HPA)
    HorizontalPodAutoscaler(HPA)前面可以实现通过手工执行`kubectlscale`命令实现Pod扩容或缩容,但是这显然不符合Kubernetes的定位目标--自动化、智能化。Kubernetes期......
  • 关于Spring注解的基础详解(补充上次并不清楚的内容)
    注解,需要在.xml文件里面加这么一句话:<context:component-scanbase-package=""/>(组件)Component注解主要用于接口的实现类里面,代替掉.xml文件里面的这句话:(主要作用:代替......