es集群的搭建及理解

技术文章1年前 (2024)更新 gyx131
131 0 0

一、配置ES

详细步骤 下载es:https://www.elastic.co/cn/downloads/past-releases/

我选择的是7.6.2,注意es与jdk的版本

或者直接命令行输入:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-

然后解压

tar -xzf elasticsearch-7.6.2-linux-x86_64.tar.gz

现在启动es

./bin/elasticsearch

有JSON日志输出,说明es启动成功!!!

在虚拟机中使用node1节点克隆出node2 和 node3

 

至此,es集群搭建完成!!!

二、集群配置

打开es的配置文件

配置如下

node1节点配置

cluster.name: elastic
node.name: node1
#node.roles: []
network.host: 192.168.193.129
bootstrap.memory_lock: true // 生产环境务必配置
#path.data: // 生产环境务必配置到和es不同的目录下
#path.logs: // 生产环境务必配置到和es不同的目录下
http.port: 9201
transport.port: 9301
discovery.seed_hosts: ["192.168.193.129:9301","192.168.193.130:9302","192.168.193.131:9303"]
cluster.initial_master_nodes: ["node1"]

node2节点配置

cluster.name: elastic
node.name: node2
#node.roles: []
network.host: 192.168.193.130
bootstrap.memory_lock: true // 生产环境务必配置
#path.data: // 生产环境务必配置到和es不同的目录下
#path.logs: // 生产环境务必配置到和es不同的目录下
http.port: 9202
transport.port: 9302
discovery.seed_hosts: ["192.168.193.129:9301","192.168.193.130:9302","192.168.193.131:9303"]
cluster.initial_master_nodes: ["node1"]
node.name: node2

node3节点配置

cluster.name: elastic
node.name: node3
#node.roles: []
network.host: 192.168.193.131
bootstrap.memory_lock: true // 生产环境务必配置
#path.data: // 生产环境务必配置到和es不同的目录下
#path.logs: // 生产环境务必配置到和es不同的目录下
http.port: 9203
transport.port: 9303
discovery.seed_hosts: ["192.168.193.129:9301","192.168.193.130:9302","192.168.193.131:9303"]
cluster.initial_master_nodes: ["node1"]


分别启动三个节点服务

  • cluster.name: 这个参数定义了Elasticsearch集群的名称。确保所有想要加入同一集群的节点配置相同的集群名称。在您的配置中,所有节点都设置为elastic,表示它们属于同一个名为elastic的集群。

  • node.name: 指定单个节点的名称,用于标识集群中的不同节点。在您的例子中,分别设为node1node2node3,方便管理和识别。
  • network.host: 配置节点监听的网络地址。这里是各节点的IP地址,确保节点间可以相互通信。
  • bootstrap.memory_lock: 当设置为true时,尝试锁定Elasticsearch进程使用的内存,防止操作系统交换内存,这对于生产环境中的稳定性和性能至关重要。这通常需要操作系统支持和相应的启动参数。
  • http.port 和 transport.port: 分别指定了节点的HTTP接口端口和节点间通信的Transport端口。在您的配置中,分别为9201、9202、9200,确保这些端口在节点间不冲突,并且可从需要访问的地方访问。
  • discovery.seed_hosts: 这个配置项列出了集群中用于发现其他节点的初始主机列表。在启动时,Elasticsearch会尝试连接这些种子节点以发现集群的其他成员。您为每个节点都配置了所有节点的IP和对应的transport端口。
  • cluster.initial_master_nodes: 在Elasticsearch 7.x及更高版本中,此配置用于指定集群启动时的初始主节点列表,用于防止脑裂情况。您为所有节点都指定了["node1"]作为初始主节点列表,这意味着在集群首次启动或完全重启时,只有名为node1的节点被允许成为主节点。通常,如果所有节点都可以成为主节点,这里应列出所有预期的主节点名称。

 

 

可以看到三个node都添加进去,至此es集权搭建完成

 

当Elasticsearch集群中的一台节点(比如B服务器)关机后,再重新启动,其数据同步行为取决于几个因素:

  1. 数据复制策略:Elasticsearch通过分片和副本机制保证数据的高可用性。每个主分片(primary shard)都有一个或多个副本分片(replica shard),分布在不同的节点上。如果B服务器上有副本分片,在它离线期间,写入操作仍可以在其他副本上成功执行,当B服务器重新上线后,缺失的数据会从主分片或者其他活跃的副本分片自动同步过来,完成数据恢复。
  2. 集群健康状态:在B服务器离线期间,集群可能会因失去足够的主分片副本而影响其健康状态。如果B服务器上托管了任何主分片,这部分数据在它离线时将无法写入或更新。一旦B服务器重新加入集群,Elasticsearch会尝试恢复这些主分片到正常状态,如果有必要,还会重新分配副本分片以维持预定的副本数量。
  3. 集群自平衡:Elasticsearch具有自动平衡功能,可以自动管理和重新分配分片,以优化数据分布和查询性能。当B服务器重新加入集群后,如果之前因它离线导致数据分布不均,系统会自动触发再平衡过程,这可能包括移动分片以恢复最佳的分布状态。
  4. 节点恢复设置:Elasticsearch节点在启动时会尝试从磁盘恢复最近的状态,包括事务日志中的未确认操作,以确保数据一致性。这意味着如果B服务器上的数据在关机前是最新且一致的,重新启动后通常不需要从其他节点大量同步数据,除非有新的写操作在其离线期间发生。

服务器重新启动后,数据会根据集群当前的状态和配置自动进行同步和恢复,以确保数据的完整性和集群的健康状态。不过,为了最小化数据不一致的风险和恢复时间,建议在计划维护或预期停机期间,采取适当的措施,比如避免重要数据写入或暂时调整副本策略。

 

 

理论上,你可以设置Elasticsearch集群包含任意数量的节点,包括只设置2个节点的集群。然而,这样的配置并不推荐用于生产环境,原因在于以下几点:

1. **容错性**:Elasticsearch推荐至少有3个主节点(最好是奇数个)以避免所谓的“脑裂”(split-brain)现象。脑裂发生在集群分裂为两个独立部分时,每个部分都足以形成多数派,从而可能导致数据不一致。通过设置`discovery.zen.minimum_master_nodes`参数为`(number_of_master_eligible_nodes / 2) + 1`,可以防止这种情况发生。在只有两个节点的集群中,如果一个节点失败,就不存在多数派,无法选举出新的主节点。

2. **高可用性**:如果集群只有两个节点,并且其中之一是主节点同时持有数据(在较小集群中常见),那么当这个节点故障时,整个集群将无法处理写操作,也无法进行完整的故障恢复,直到该节点恢复。

尽管可以配置只有两个节点的集群,但这样做会显著降低系统的稳定性和可靠性。在生产环境中,至少需要3个节点来维持基本的高可用性和容错性。如果资源有限,可以考虑将某些节点设置为既是主节点也是数据节点,但依然建议遵循至少3个节点的指导原则。对于开发或测试环境,2个节点的集群可能足够使用,但在规划生产环境时应遵循最佳实践。

© 版权声明

相关文章

暂无评论

暂无评论...