nebula-br local-store 模式,快速搭建主备集群实践
因为线上图数据库目前为单集群,数据量比较大,有以下缺点:
- 单点风险,一旦集群崩溃或者因为某些查询拖垮整个集群,就会导致所有图操作受影响
- 很多优化类但会影响读写的操作不好执行,比如:compact、balance leader 等;
- 双集群在升级的时候也非常有优势,完全可以做到不影响业务运行,比如先升级备集群再升级主集群。总之为了线上数据库更加稳定和高可用需要搭建双集群。
选择 BR 工具的原因
目前,我这边了解到复制集群方案有:
- 新集群重新写入数据,这种情况要么就是写程序 scan 再导入新集群(太慢了),要么就基于底表数据通过 nebula-exchange 再导入新集群(必须得有历史数据)
- (不可靠)完整复制 nebula 数据拷贝到新集群,参考:【复制 data 方式导入】(不过,这个方式我在测试环境测试失败了)
- 通过 nebula-br 备份,再还原到新集群(本文就是基于这种方式)
因为我们线上很难回溯出完整的历史数据,无法基于底表重新构建,此外 scan 方式又太慢了,所以选择了 BR 的方式。
注意:
环境介绍
- nebula 版本:3.6.0
- nebula 安装路径:
/usr/local/nebula
- nebula-metad 服务端口:9559 (可以通过安装目录下的
scripts/nebula-metad status
查看) - backup 目录:
/usr/local/nebula_backup
备份方式:full(全图备份,也可以指定部分 space)
- 3 台老集群机器(已经有历史数据的):192.168.1.2、192.168.1.3、192.168.1.4
- 3 台新集群机器(没有数据,待从老集群复制数据):192.168.2.2、192.168.2.3、192.168.2.4
备份前新集群 show hosts 情况:
备份前老集群 show hosts 情况:
大体步骤
- 老集群安装 agent(每台机器都要安装)和 br(选择任何其中一台机器安装)工具;
- 新集群安装 agent(每台机器都要安装);
- 在老集群安装 br 的机器上,利用 br 工具生成备份文件,备份 meta 执行老集群的 meta 地址;
- 复制 meta 文件,老集群中只有一台机器的备份目录有 meta,需要将 meta 复制到老集群其他机器;
- 在新集群机器创建和老集群一样的备份目录,比如:老集群备份目录为
/usr/local/nebula_bak/BACKUP_2023_09_14_13_57_33
,新集群机器需要创建相同的目录:/usr/local/nebula_bak/BACKUP_2023_09_14_13_57_33
; - 复制老集群备份文件到新集群中,这里需要注意因为老集群每台机器都有自己的备份文件,这里需要将所有的备份文件复制到新集群中整合到一起,因为每台机器的 data 下的目录名称都是以
IP + PORT
的形式,所以不会有重复; - 在老集群安装 br 的机器上,利用 br 工具恢复备份文件,恢复时 meta 指向新机器 meta 地址;
详细步骤
在老集群所有机器安装 agent,安装方法参考:angent 安装介绍,以当前示例为例,下载 nebula-agent 之后存放在 /usr/local/nebula/bin
目录下, 使用 chmod +x nebula-agent 赋予可执行权限:
192.168.1.2
nohup ./nebula-agent -agent="192.168.1.2:9999" -debug -meta="192.168.1.2:9559" > agent.log 2>&1 &
192.168.1.3
nohup ./nebula-agent -agent="192.168.1.3:9999" -debug -meta="192.168.1.3:9559" > agent.log 2>&1 &
192.168.1.4
nohup ./nebula-agent -agent="192.168.1.4:9999" -debug -meta="192.168.1.4:9559" > agent.log 2>&1 &
下载 br 工具到 nebula 的 bin 目录下,并命名为 nebula-br,并使用 chmod 命令赋予可执行权限。
此时老集群机器拓扑图:
(老集群)选择安装 br 工具的 192.168.1.4 机器执行如下命令进行备份:
./nebula-br backup full --meta="192.168.1.4:9559" --storage="local:///usr/local/nebula_backup"
(老集群)备份后每台机器的备份目录详情如图:
(老集群)复制 meta 到其他机器的备份目录下:
这里是从 192.169.1.2(只有这台机器生成了 meta,这玩意只有在 meta 的 leader 节点生成)机器复制到 192.168.1.3 和 192.168.1.4 机器目录下:
新集群安装 agent:
192.168.2.2
nohup ./nebula-agent -agent="192.168.2.2:9999" -debug -meta="192.168.2.2:9559" > agent.log 2>&1 &
192.168.2.3
nohup ./nebula-agent -agent="192.168.2.3:9999" -debug -meta="192.168.2.3:9559" > agent.log 2>&1 &
192.168.2.4
nohup ./nebula-agent -agent="192.168.2.4:9999" -debug -meta="192.168.2.4:9559" > agent.log 2>&1 &
新集群服务拓扑图:
复制老集群的备份文件到新集群机器下,完成后的拓扑图:
从老集群机器 /usr/local/nebula_backup
拷贝数据到新集群机器 /usr/local/nebula_backup
目录下
(老集群) 选择安装 br 工具的 192.168.1.4 机器执行如下命令进行还原到新集群,这里的 meta 指向新集群机器其中一台 meta 地址,storage 地址为上一步新集群创建的备份地址:
./nebula-br restore full --meta="192.168.2.4:9559" --storage="local:///usr/local/nebula_backup" --name="BACKUP_2023_09_14_13_57_33"
观察日志,不报错的情况下完成了从老集群机器还原到了新集群,可使用 nebula-console 连接新集群查看 space 情况。
新集群 show hosts 情况:
小结
官方其实不推荐 local 模式去做备份还原,操作太过复杂,很容易出错,建议使用 S3 或者 NTF 进行挂载,这样就没必要做老集群拷贝到新集群的工作。
本文正在参加 NebulaGraph 技术社区年度征文活动,征文详情:https://discuss.nebula-graph.com.cn/t/topic/13970
如果你觉得本文对你有所启发,记得给我点个 ❤️ ,谢谢你的鼓励
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
复用性风控:软件复用成本的量化管理
复用性(Reusability)是软件工程中一个被频频使用的术语,它一般作为产品的卖点被宣传,或者出现在技术设计文档之中。大部分看到这个概念的的受众只是将其作为一个积极的软件非功能属性去理解,但却忽略了其背后隐藏的风险。本文从另一个角度出发,去分析「复用性」这一概念背后的风险及成因,借助笔者在业务安全和基础安全的一点经验,提出了一个在软件研发流程中,管理「复用性成本风险」的风险管理模型。从模型出发,我们可以认识到实现复用时面临的各项挑战、开发认知谬误、复用成本的形式化定义方法等,希望这些输入能为读者在后续的技术决策和软件研发流程提供些许帮助。 本文主要分为三个部分:第一部分介绍复用性的定义以及不合理复用引入的主要技术债,第二部分分析复用性失效的原因;第三部分为复用性软件资产的构建方和使用方提供一个形式化的度量工具,该工具将奠定后续风险管理模型评估阶段定量分析的基础;第四部分提出一个用于管理「复用性风险」的模型,覆盖软件研发生命周期的全流程,通过事前评估、事中缓释和事后迭代三个环节最大程度地降低由于软件复用带来的软件开发和维护成本。 一、复用性的理想与现实 1.1 复用定义:从代码到系统...
- 下一篇
LangChain+通义千问+AnalyticDB 向量引擎保姆级教程
本文以构建AIGC落地应用ChatBot和构建AI Agent为例,从代码级别详细分享AI框架LangChain、阿里云通义大模型和AnalyticDB提供引擎的开发经验和最佳实践,给大家快速搭建AIGC应用提供参考。 前言 9月13日,通义千问大模型已通过录制方式招募,并正式向公众开放。通义模型具备的能力包括:1.创作文字,如写故事、写公文、写邮件、写剧本、写诗歌等;2.编写代码;3.提供各类语言的翻译服务,如英语、日语、法语、西班牙语等;4.进行文本润色和文本摘要等工作;5.扮演角色进行对话;6.制作我们在可以登录通义千问官网体验的同时,也可以充分发挥想象力,通过调用通义千问API的方式来构建属于自己的AI应用了。 如果直接使用通义千问API从0到1来构建应用,技术成本还是相对比较高的。幸运的是,目前已经有非常优秀的框架LangChain来串联AIGC相关的各类组件,让我们轻松构建自己由于业务上对客户支持的需要,我在几个月前就已经在LangChain模块中添加了调用通义千问API的模块代码。在这个时间点,恰好可以直接拿来使用。 在过去的一段时间里,已经有很多同学分享了LangCha...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果