架构师系列-搜索引擎ElasticSearch(八)- 集群管理故障恢复

故障转移

      集群的master节点会监控集群中的节点状态,如果发现有节点宕机,会立即将宕机节点的分片数据迁移到其它节点,确保数据安全,这个叫做故障转移。

下图中node1是主节点,其他两个节点是从节点

节点故障

此时node1节点发生故障

 

宕机后的第一件事就是重新选主,此时选中node2

 数据迁移

node2成为主节点后,会检测集群监控状态,发现:shard-1、shard-0没有副本节点,因此需要将node1上的数据迁移到node2、node3

节点恢复

当节点1进行恢复后,则数据分布的状态从上图进行反转。

扩缩容

扩容节点

其中node4节点为需要扩容的节点

创建节点目录

# 以下为演示,请根据实际情况建立es的目录
mkdir -p /tmp/elasticsearch/node-4/{config,plugins,data,1og}#进行授权
chmod 777 /tmp/elasticsearch/node-4/{config,plugins,data,1og}

添加IK分词器

cp-R /tmp/elasticsearch/node-1/plugins/ik/ /tmp/elasticsearch/node-4/plugins/

编写配置文件


vi /tmp/elasticsearch/node-4/config/elasticsearch.ym1
#集群名称
cluster.name: elast
#当前该节点的名称
node.name: node-4
#是不是有资格竞选主节点
node.master:true
#是否存储数据
node.data: true#最大集群节点数
node.max_1oca1_storage_nodes:3#给当前节点自定义属性(可以省略)
#node.attr.rack:rl
#数据存档位置
path.data:/usr/share/elasticsearch/data#日志存放位置
path.logs:/usr/share/elasticsearch/1og#是否开启时锁定内存(默认为是)
#bootstrap.memory_lock:true#设置网关地址,我是被这个坑死了,这个地址我原先填写了自己的实际物理IP地址,
#然后启动一直报无效的IP地址,无法注入9300口,这里只需要填写0.0.0.0
network.host:0.0.0.0
#设置映射端口
http.port:9200
#内部节点之间沟通端口
transport.tcp.port:9300
#集群发现默认值为127.0.0.1:9300,如果要在其他主机上形成包含节点的群集,如果搭建集群则需要填写
#es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点,也就是说把所有的节点都写上discovery.seed hosts:["node-1","node-2","node-3"]#当你在搭建集群的时候,选出合格的节点集群,有些人说的太官方了,
#其实就是,让你选择比较好的几个节点,在你节点启动时,在这些节点中选一个做领导者,
#如果你不设置呢,elasticsearch就会自己选举,这里我们把三个节点都写上cluster.initial_master_nodes:["node-1","node-2","node-3"]#在群集完全重新启动后阻止初始恢复,直到启动N个节点
#简单点说在集群启动后,至少复活多少个节点以上,那么这个服务才可以被使用,否则不可以被使用,gateway.recover after nodes:2#删除索引是是否需要显示其名称,默认为显示
#action.destructive_requires_name: true#禁用安全配置,否则查询的时候会提示警告
xpack.security.enabled:false

编写部署文档

vi docker-compose.yml

 以下是之前的node1-node3的部署的yml

version: "3"
services:node-1:image: elasticsearch:7.17.5container_name: node-1environment:- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"- "TZ=Asia/Shanghai"ulimits:memlock:soft: -1hard: -1nofile:soft: 65536hard: 65536ports:- "9200:9200"logging:driver: "json-file"options:max-size: "50m"volumes:- /tmp/data/elasticsearch/node-1/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml- /tmp/data/elasticsearch/node-1/plugins:/usr/share/elasticsearch/plugins- /tmp/data/elasticsearch/node-1/data:/usr/share/elasticsearch/data- /tmp/data/elasticsearch/node-1/log:/usr/share/elasticsearch/lognetworks:- elasticnode-2:image: elasticsearch:7.17.5container_name: node-2environment:- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"- "TZ=Asia/Shanghai"ulimits:memlock:soft: -1hard: -1nofile:soft: 65536hard: 65536ports:- "9201:9200"logging:driver: "json-file"options:max-size: "50m"volumes:- /tmp/data/elasticsearch/node-2/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml- /tmp/data/elasticsearch/node-2/plugins:/usr/share/elasticsearch/plugins- /tmp/data/elasticsearch/node-2/data:/usr/share/elasticsearch/data- /tmp/data/elasticsearch/node-2/log:/usr/share/elasticsearch/lognetworks:- elasticnode-3:image: elasticsearch:7.17.5container_name: node-3environment:- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"- "TZ=Asia/Shanghai"ulimits:memlock:soft: -1hard: -1nofile:soft: 65536hard: 65536ports:- "9202:9200"logging:driver: "json-file"options:max-size: "50m"volumes:- /tmp/data/elasticsearch/node-3/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml- /tmp/data/elasticsearch/node-3/plugins:/usr/share/elasticsearch/plugins- /tmp/data/elasticsearch/node-3/data:/usr/share/elasticsearch/data- /tmp/data/elasticsearch/node-3/log:/usr/share/elasticsearch/lognetworks:- elastickibana:container_name: kibanaimage: kibana:7.17.5volumes:- /tmp/data/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.ymlports:- 5601:5601networks:- elasticcerebro:image: lmenezes/cerebro:0.9.4container_name: cerebroenvironment:TZ: 'Asia/Shanghai'ports:- '9000:9000'networks:- elastic
networks:elastic:driver: bridge

在以上的配置中加入node4,执行一下命令

docker-compose up -d
PUT /_cluster/settings
{"persistent":{"cluster.routing.allocation.exclude._name": null}
}

可以观察到数据有迁移到新加入的node4节点中 

 节点缩容

禁止数据分配

PUT /_cluster/settings
{"persistent":{"cluster.routing.allocation.exclude._name": node-4}
}

关闭节点node-4

docker-compose stop node-4

此时观察集群状态,发现节点4已经移除,并且整个集群正常运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/618752.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数模 线性规划模型理论与实践

线性规划模型理论与实践 1.1 线性规划问题 在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济效益的问题。此类问题构成了运筹学的一个重要分支一数学规划,而线性规划(Linear Programming 简记LP)则是数学规划的一个…

深入剖析MongoDB集群架构设计

目录 一、MongoDB集群架构介绍 1.1 主从复制 1.2 副本集 1.3 分片集群 二、副本集 3.1 主节点选举 3.2 oplog 3.2 主从同步 三、分片集群 3.1 分片策略 3.2 分片键的选择 3.3 何时选择分片集群 四、总结 一、MongoDB集群架构介绍 MongoDB 有三种集群架构模式,分…

bugku-web-文件上传

提示他的名字是margin,给他一个图片文件,不要php文件 上传一句话木马的图片 抓包,后缀改为php 提示无效文件,即后台还会检测一次后缀 测试后台系统 为linux系统 开始绕过 截断绕过 上传成功,但是会变为jpg 开始分析…

【opencv】示例-stiching.cpp 图像拼接

#include "opencv2/imgcodecs.hpp" // 导入opencv图像编码功能库 #include "opencv2/highgui.hpp" // 导入opencv高层用户界面功能库 #include "opencv2/stitching.hpp" // 导入opencv图像拼接功能库#include <iostream> // 导入输入输出…

解决 php 连接mysql数据库时报错:Fatal error: Class ‘mysqli’ not found in问题

如果你没找到php.ini但只有php.ini-development或者php.ini-production。 首先先创建一个php.ini然后复制php.ini-development或者php.ini-production到里面去。 然后在php.ini里面进行操作。一共两步。 第一步&#xff0c;将extension前面的分号去掉 第二步&#xff0c;更换为…

AutoGen - Build Powerful AI Agents with ChatGPT/GPT-4

原文:AutoGen - Build Powerful AI Agents with ChatGPT/GPT-4 | MLExpert - Crush Your Machine Learning interview In this tutorial, well explore AutoGen1, a Microsoft library that lets you create LLM applications with agents. These agents can communicate and …

基于Docker构建CI/CD工具链(六)使用Apifox进行自动化测试

添加测试接口 在Spring Boot Demo项目里实现一个简单的用户管理系统的后端功能。具体需求如下&#xff1a; 实现了一个RESTful API&#xff0c;提供了以下两个接口 &#xff1a; POST请求 /users&#xff1a;用于创建新的用户。GET请求 /users&#xff1a;用于获取所有用户的列…

ChatGPT在线网页版

ChatGPT镜像 今天在知乎看到一个问题&#xff1a;“平民不参与内测的话没有账号还有机会使用ChatGPT吗&#xff1f;” 从去年GPT大火到现在&#xff0c;关于GPT的消息铺天盖地&#xff0c;真要有心想要去用&#xff0c;途径很多&#xff0c;别的不说&#xff0c;国内GPT的镜像…

YOLTV8 — 大尺度图像目标检测框架(欢迎star)

YOLTV8 — 大尺度图像目标检测框架【ABCnutter/YOLTV8: &#x1f680;】 针对大尺度图像&#xff08;如遥感影像、大尺度工业检测图像等&#xff09;&#xff0c;由于设备的限制&#xff0c;无法利用图像直接进行模型训练。将图像裁剪至小尺度进行训练&#xff0c;再将训练结果…

Matlab隐式方程拟合【案例源码+视频教程】|隐函数拟合|非线性拟合|视频教程

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《复杂函数拟合案例分享》本专栏旨在提供 1.以案例的形式讲解各类复杂函数拟合的程序实现方法&#xff0c;并提供所有案例完整源码&#xff1b;2.…

OpenHarmony实战开发-Actor并发模型对比内存共享并发模型

内存共享并发模型指多线程同时执行复数任务&#xff0c;这些线程依赖同一内存并且都有权限访问&#xff0c;线程访问内存前需要抢占并锁定内存的使用权&#xff0c;没有抢占到内存的线程需要等待其他线程释放使用权再执行。 Actor并发模型每一个线程都是一个独立Actor&#xf…

synchronized底层原理

1synchronized关键字的底层原理 Monitor 举个例子&#xff1a; 1.线程1执行synchronized代码块&#xff0c;里面用到了lock(对象锁)。首先会让这个lock对象和monitor关联&#xff0c;判断monitor中的owner属性是否为null。如果为null直接获取对象锁。owner只能关联一个线程。 2…