Elasticsearch 的可伸缩性基于集群、节点和分片的概念。
集群(Cluster):一组执行搜索和数据处理的Elasticsearch节点,通常是多个节点的集合,它们共享数据并提供资源和负载的负载均衡。
节点(Node):Elasticsearch的单个实例,可以是集群的一部分,也可以是独立的。每个节点都有唯一的名称,可以配置成执行不同的任务,例如协调节点或数据节点。
分片(Shard):Elasticsearch数据的水平分区,用于分布式索引的可伸缩性。一个分片是一个Elasticsearch的索引的子集。
以下是一个简单的Elasticsearch集群配置示例:
{
"cluster.name": "my-cluster",
"node.name": "node-1",
"network.host": "192.168.1.1",
"discovery.seed_hosts": ["192.168.1.2", "192.168.1.3"],
"cluster.initial_master_nodes": ["192.168.1.2", "192.168.1.3"]
}
在这个配置中:
cluster.name
定义了集群的名字,相同cluster.name
的节点会组成一个集群。node.name
是节点的名字。network.host
是节点监听的IP地址。discovery.seed_hosts
是集群中已知节点的列表,新节点可以通过它们发现集群。cluster.initial_master_nodes
是最初的主节点集合,用于启动新集群。
通过这样的配置,你可以启动多个节点并将它们加入到同一个集群中。分片则是在索引创建时指定的,以确保数据的分布和可伸缩性。
PUT /my_index
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}
在这个例子中,number_of_shards
设置为3,意味着索引会被分成3个分片;number_of_replicas
设置为2,意味着每个分片将会有2个副本。总共,集群将有 (3 * (1 + 2)) = 9 个分片,以实现高可用性和提供高并发的搜索能力。