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

  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的数据)。

原文地址:http://www.cnblogs.com/licaibin666/p/16917596.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性