mac 环境,es6.6.0 * 3
es下载 : https://repo.huaweicloud.com/elasticsearch/7.2.0/?C=N&O=D
ik分词器下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.0/elasticsearch-analysis-ik-6.6.0.zip
pinyin分词器下载地址:https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v6.6.0
kibana下载: https://mirrors.huaweicloud.com/kibana/6.6.0/
elasticsearch-head下载:https://github.com/mobz/elasticsearch-head
如果ik分词器下载慢,可以下载源代码,切换tag再打包。
git clone https://github.com/medcl/elasticsearch-analysis-ik
cd elasticsearch-analysis-ik
git checkout tags/{version} 【git checkout v7.3.0】
mvn clean
mvn compile
mvn package
cluster.name: xly-es
node.name: node00
node.master: true
network.host: 127.0.0.1
http.port: 9200
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
discovery.zen.minimum_master_nodes: 2
#允许其他插件访问
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.name: xly-es
node.name: node01
node.master: true
network.host: 127.0.0.1
http.port: 9200
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
discovery.zen.minimum_master_nodes: 2
#允许其他插件访问
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.name: xly-es
node.name: node02
node.master: true
network.host: 127.0.0.1
http.port: 9200
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
discovery.zen.minimum_master_nodes: 2
#允许其他插件访问
http.cors.enabled: true
http.cors.allow-origin: "*"
下载并启动elasticsearch-head
npm start
启动后访问http://localhost:9100 连接http://localhost:9200
es集群存储
- es采取分片存储数据
- 分片都均衡地分布在每一个节点中
- 主分片不能和自己的副本分片存储在同一个节点中
- 主分片可以进行读写,保证集群对外提供能力
只有一个master节点,是否会成为集群的性能瓶颈?
数据存储主要看分片,主分片主要存储在主、从节点中,应此从节点也具有读写能力,
分担每一个服务器的读写能力,应此master不会成为性能瓶颈。
集群节点说明:
1. ⭐️ 主节点 (master节点)
2. ⭕️ 副本节点 (slave节点,node节点)
主分片/副本分片:
1.边框比较粗,主分片(primary shard)
2. 边框比较细,副本分片 (replica shard)
节点类型:
1.master节点
维护集群状态
2.数据节点
存储数据(索引)
3.协调节点
根据路由算法,把请求转发给相应的分片进行处理。
节点类型:配置
1.master
node.master : true — 具有参与选举成为master的候选节点,true是默认
node.data : true — 既可以作为master节点,也可以存储数据,true是默认
2. 数据节点
node.master : false
node.data : true – 只能存储数据,不能参与master选举
3. 协调节点:
每个节点都可以作为协调节点
注意:每一个节点默认具有3中身份角色(master候选,数据存储节点,协调节点)
问题:
1.为什么索引一旦写入磁盘(内存),就不可更改
1)数据无需更改,就可以防止兵法修改,不需要加锁,不需要担心多个线程同时写索引库,保护索引库的安全。
2)防止索引库,索引被频繁修改,写入,浪费性能,占用io资源
3)把索引写入内存,索引不能被修改,索引一直驻留在内存中,搜索时候只需要命中内存索引即可,提升搜索效率。
2.索引不能被修改,索引在segment中进行存储,相当于是segment也不能修改,如何实现curd?
- 添加 ---- 直接添加一个新的segment
- 删除 — 不是真正的删除,而是在一个commit point 文件中记录删除的文档id,标记删除。等segment合并再执行删除
3)更新-- 先删除,再添加
4)查询 — 从多个段中查询,把查询的结果进行合并