Elasticsearch 集群基本概念

构建集群命令

启动es节点:
bin/elasticsearch -Ecluster.name=my_cluster -Epath.data=my_cluster_node1 -Enode.name=node1 -Ehttp.port=5200 -d
bin/elasticsearch -Ecluster.name=my_cluster -Epath.data=my_cluster_node2 -Enode.name=node2 -Ehttp.port=5200 -d

基本概念

Cluster State

记录集群的相关数据称为: cluster state,主要记录如下信息
· 节点信息,如节点名称,连接地址等
· 索引信息,如索引名称、配置等
· …

Master Node

· 可以修改 Cluster State 的节点叫做Master Node,一个集群只有一个存在
· cluster state 存储在每个节点上,master维护最新版本,并同步给其他节点
· master节点是集群所有节点选举出来的,可称为master eligible节点,相关配置:node.master:true : 这个节点是可选举的节点(默认true )

Coordinating Node

处理请求的节点称为Coordinating Node,该节点为所有节点的默认角色,不能取消
· 路由请求到正确的节点处理,比如创建索引请求到master节点

Data Node

存储数据的节点为 data 节点,默认节点都是data类型,相关配置:
· node.data:true

Cluster Health

GET _cluster/health
查看集群的健康状态:
green健康状态,所有主副分片正常分配
yellow 所有主分片正常分配,有副本分片未进行正常分配
red 有主分片未分配

高可用保证

服务可用性:
- 2个节点的情况下,允许一个节点停止服务
数据可用性
- 引入副本(Replication)解决
- 每个节点都有完备的数据

故障转移

node1: P0,R1
node2: P1,R2
node3: P3,R0
====> node1挂了 ===>
1、重新发起master选举,Node2变成master,此时P0没有,集群处于red状态
2、R0升级为主分片变成P0,集群处于yellow状态
3、在Node2中创建R0,集群处于green状态
====> 最终成为 ===>
node2: P1,R0,R2
node3: P2,P0,R1

文档分布式存储

通过某种算法实时计算,将文档映射到 分片上
计算分片公式:
- shard = hash(routing) % number_of_primary_shards
- hash算法保证均匀散列在分片中
- routing默认是文档id,可自行制定
- number_of_primary_shard是主分片数(这就是为什么分片术不能修改的原因)

倒排索引不可更改

· 好处:
- 不用考虑并发写文件问题,杜绝锁机制带来的性能问题
- 由于文件不再更改,可以充分利用文件系统缓存
- 利于生成缓存数据
- 利于文件压缩存储,节省磁盘空间
· 弊端: 写入新文档时,必须重新构建倒排索引文件,替换老的,导致文档实时性差

### Elasticsearch基本概念 Elasticsearch 是一种分布式开源搜索引擎,它将全文搜索、结构化搜索和数据分析三大功能整合在一起,能够以近实时的速度存储、搜索和分析大型数据集[^2]。 #### 节点的概念 节点是一个 Elasticsearch 实例,本质上就是一个 Java 进程。一台机器可以运行多个 Elasticsearch 进程,但在生产环境中通常建议每台机器仅运行一个 Elasticsearch 实例[^1]。 #### 集群的组成 一个集群由至少一个节点组成,而每个节点实际上就是 Elasticsearch 的一个进程。这些节点共同协作完成数据的存储、检索以及分布式的计算任务[^4]。 #### 数据的组织形式 在 Elasticsearch 中,数据被划分为索引(Index),每一个索引又进一步细分成若干个分片(Shard)。默认情况下,当创建一个新的索引时,该索引会被划分成 5 个主分片(Primary Shard),并且每个主分片都会有一个对应的副本分片(Replica Shard)。 #### 数据路由机制 当向 Elasticsearch 插入一条记录时,系统会依据指定的关键字(Key)来决定这条记录应当存放在哪一个分片上。如果没有特别指明关键字,则使用自动生成的 ID 来进行哈希运算并定位目标分片。具体来说,通过公式 `shard_num = hash(_routing) % num_primary_shards` 可以确定某条记录所属的具体分片位置[^5]。 #### 应用场景对比 虽然 MySQL 和其他传统的关系型数据库擅长处理那些需要强一致性保障及复杂关联查询的任务,例如金融交易系统的实现;然而对于诸如海量日志文件解析或者跨文档关键词匹配这样的需求而言,Elasticsearch 凭借其卓越的可扩展性能与接近即时响应速度显得更为合适[^3]。 ```python from elasticsearch import Elasticsearch es_client = Elasticsearch() def create_index(index_name, settings=None): if not es_client.indices.exists(index=index_name): response = es_client.indices.create(index=index_name, body=settings) return response['acknowledged'] create_index('test-index') ``` 上述代码展示了如何利用 Python 客户端库连接到 Elasticsearch 并尝试新建名为 'test-index' 的索引实例。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值