网站建设-部署与发布的题目,app推广服务部,做网页制作怎么样,简单网站制作代码需求
将数据从node-23-1节点中迁移到node-83-1节点。但是现在node-83-1并没有加入到集群中#xff0c;因此首先将node-83-1加入到node-23-1的集群
解决方案
使用ES版本为7.17.9#xff0c;最开始设置集群为一个节点#xff0c;node-23-1的配置如下
cluster.name: my-app…需求
将数据从node-23-1节点中迁移到node-83-1节点。但是现在node-83-1并没有加入到集群中因此首先将node-83-1加入到node-23-1的集群
解决方案
使用ES版本为7.17.9最开始设置集群为一个节点node-23-1的配置如下
cluster.name: my-application
node.name: node-23-1
path.data: /mnt/sdb/app/elasticsearch-7.17.9-23-1/data
path.logs: /mnt/sdb/app/elasticsearch-7.17.9-23-1/logs
network.host: 0.0.0.0
ingest.geoip.downloader.enabled: false
http.port: 9200
cluster.initial_master_nodes: [node-23-1, node-83-1]
search.max_open_scroll_context: 1024将node-83-1节点加入集群 node-83-1的配置如下
cluster.name: my-application
node.name: node-83-1
path.data: /home/iie4bu/app/elasticsearch-7.17.9/data/
path.logs: /home/iie4bu/app/elasticsearch-7.17.9/logs/
ingest.geoip.downloader.enabled: false
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: [10.26.120.23:9300,10.26.120.83:9300]
cluster.initial_master_nodes: [node-23-1,node-83-1]
search.max_open_scroll_context: 1024
indices.query.bool.max_clause_count: 10240由于node-23-1中存在数据因此要将node-83-1节点加入到集群中需要设置discovery.seed_hosts。
加入集群后自动平衡数据当集群状态变为green后就可以将node-23-1踢出集群。
将node-23-1踢出集群
将node-23-1踢出集群后报错信息如下
master not discovered or elected yet, an election requires at least X nodes with ids from [XXXXX]它其实是说未能选举出一个主节点。
解决办法参考https://www.cnblogs.com/shanfeng1000/p/14691301.html
如果ES集群是第一次启动那么需要 cluster.initial_master_nodes 配置指定一个master类型的节点列表来进行选举一个主节点。另外已经加入集群的节点信息保存在data目录下以供下次启动使用这样也就是说cluster.initial_master_nodes就不在起作用了。
每个ES集群都维护一个选举配置集合Voting Configurations这个选举集合由可以选举为主节点的master类型节点组成。它除了提供选举功能还决定者集群的状态当选举配置集合中超过一半的节点存活时集群才提供服务也就是过半原则通常集群解决脑裂问题都是采用这种方式
我们可以通过ES提供的API接口来查看选举配置集合中有哪些节点
curl -X GET http://localhost:9200/_cluster/state?filter_pathmetadata.cluster_coordination.last_committed_configprettyES官方在删除节点建议中大致说了3点重要信息
1、一次性删除节点不要太多比如我们原来集群选举有7个master类型的节点如果要缩减到只有3个节点的集群如果直接关掉4个节点会发现集群挂了因为不满足过半原则同时抛出警告master not discovered or elected yet。
2、建议一个个的删除节点然后留给集群足够的时间让它自动调整Voting Configurations中的配置
3、如果只剩下最后两个节点了那么都不能删除如果要删除就要配置Voting configuration exclusions来实现事实上ES有个cluster.auto_shrink_voting_configuration配置默认是true表示当节点挂掉之后是否调整Voting Configurations也就是说自动将挂掉的节点从Voting Configurations中剔除这样也会影响过半原则的判定比如本来Voting Configurations中有5个节点它最多可容忍2个节点丢失如果停了2个节点那么等ES自动调整Voting Configurations后集群中还有3个节点这也就是说还能容忍一个节点丢失所以我们可以一台一台的停止一些节点让ES自动从Voting Configurations中剔除掉停止了的节点切记不要一次停止过多节点否则可能在Voting Configurations自动调整前而导致不满足过半原则而导致集群停止服务但是需要注意的是它旨在master节点大于等于3时有效也就是说Voting Configurations中至少会保存3个master类型的节点信息。
可能这与上面的描述有点差入自动调整只能将Voting Configurations中的节点减少到3个但是当Voting Configurations中有3个master类型节点时虽然Voting Configurations不会再自动减少节点数当有一个节点挂掉时集群还是可以提供服务的因为它满足过半原则所以可能作者认为2个和3个节点是一样的吧。
换句话说对于只有2个或者3个节点的集群我们就要结合Voting configuration exclusions还实现了。
具体实现
现在要将现在两个节点的集群降为单节点集群如果我们直接关闭node-23-1个节点那么集群因为不满足过半原则而无法提供服务。
Voting configuration exclusions是一个类似于Voting configuration的集合只是处于这个排除列表中的节点不会被选举等同于从选举集合中删除了链接:
# 查看排除列表curl -X GET http://localhost:9200/_cluster/state?filter_pathmetadata.cluster_coordination.voting_config_exclusionspretty# 添加排除也就是从配置集合中删除可以使用节点Id(node_ids)或者节点名称(node_names)来排除如果执行失败加上参数 wait_for_removalfalse 试试curl -X POST http://localhost:9200/_cluster/voting_config_exclusions?node_namesnode_namescurl -X POST http://localhost:9200/_cluster/voting_config_exclusions?node_idsnode_ids# 清空排除列表curl -X DELETE http://localhost:9200/_cluster/voting_config_exclusions如果执行结果返回timed out waiting for removal of nodes; if nodes should not be removed, set waitForRemoval to false
可以在执行时在url中添加参数 wait_for_removalfalse
上面我这里将node-23-1加入到排除列表之后node-83-1就会被选举为主节点这个时候就可以将node-23-1停掉而后node-83-1还是正常提供服务的
注操作完成之后记得清空Voting configuration exclusions