首先进行单机安装,见以下:
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