TFS多机房容灾策略

简介:

TFS集群支持异地机房容灾,一个逻辑集群包含分布在多个机房的物理集群,其中一个是主集群,其他的是备份集群。客户端写文件时,都会写到主集群,主集群的Dataserver(DS)异步将数据同步到多个备集群;客户端在读取数据时,会选择离自己最近的物理集群读取数据,如果读不到数据,就重试逻辑集群里的其他物理集群。

enter image de.ion here

对集群同步的期望

1. 所有的文件都能被同步到备集群 
2. 文件尽快同步到备集群 
3. 文件尽量从DS本地同步到备集群 
4. 文件在多个集群中数据及状态保持一致 

同步实施方案

写文件时,DS会记录同步日志(binlog),并在后台不断重放binlog,将文件同步到备集群,binlog记录在DS本地系统盘。由于日志本身是不可靠的存储,可能出现同步日志丢失的情况,每天夜间对整个集群会有一次定期的增量同步,以确保所有的文件都写到备集群。

由于文件数据通常很大,所以不能像mysql那样,把数据都记录在binlog,tfs的binlog里只包含文件的blockid、fileid等信息。重放日志时,DS先尝试从本地读取文件,并写到备集群;block可能在同步前被迁移到其他DS上,故如果本地读取不到,需要通过网络尝试读取其他副本来同步数据。

当部署多个备份集群时,为了避免往多个备份集群的同步相互影响,TFS为每个备份集群单独维护一份binlog,针对每份binlog,启动一个后台线程来重放。对于binlog里同步失败的文件,为了避免影响到后续文件的同步,失败的文件会写入到一个失败队列(持久化),有专门的后台线程定期的重试同步失败队列里的文件直到成功,然后将其移出失败队列。

多机房部署

在主集群的所有DS上配置备份集群Nameserver(NS)的地址

# edit ns.conf in master cluster  
slave_nsip = slave_cluster_ns_ip_port(eg: 192.168.1.100:3100)  

如果备份集群在搭建主集群的时候就已经配置好,那么非常轻松,主备集群从零开始就一直保持数据一致;但实际上,很多是先部署了单个集群,运行了一段时间,才开始张罗容灾的事情,也就是说准备搭建备份集群的时候,主集群里已经写入了很多数据,此时就会相对麻烦一些。

1. 搭建好备份集群 
2. 在t1时间用ssm工具dump出所有block(可以过滤掉空的block) 
3. 将上述block,使用sync_by_block工具同步到备份集群 
4. 在t2时间,在主集群的DS上配置上备份集群的NS地址(需要重启DS), 从t2时间起写入主集群的数据都会被同步到备份集群 

此时,备份集群还比主集群还少t1-t2写入的文件数据,可采取以下方式来补偿:

1. 再次dump主集群上所有的block,采用sync_by_block同步到备份集群。 
或者 2. 从日志里找出t1-t2时间段写入的所有文件,使用sync_by_file将这些文件同步到备份集群 

初看起来,第2种补偿反感应该快很多,实际上,sync_by_block时,如果文件已经同步到备份集群了,sync_by_block是不会再次重复同步的(会先对比下元信息,确定是否需要同步),所以规模不大时上述2种方案效率差别不大,更推荐第1种方案,实施起来比较简单(第2种方案需要了解TFS的日志文件的格式,找出写文件记录,并从这条记录解析出TFS文件名)。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
Java Maven Android开发
在Eclipse里配置Maven插件
Maven是一款比较常用的Java开发拓展包,它相当于一个全自动jar包管理器,会导入用户开发时需要使用的相应jar包。使用Maven开发Java程序,可以极大提升开发者的开发效率。下面我就跟大家介绍一下如何在Eclipse里安装和配置Maven插件。
611 0
|
网络协议 jenkins 调度
Docker【部署 06】Swarm实践及Operation not permitted和No chain/target/match by that name问题处理
Docker【部署 06】Swarm实践及Operation not permitted和No chain/target/match by that name问题处理
1103 0
Docker【部署 06】Swarm实践及Operation not permitted和No chain/target/match by that name问题处理
|
8月前
|
算法 测试技术 API
从自学到实战:一位测试工程师的成长之路
在技术快速发展的今天,自动化测试已成为提升职场竞争力的关键技能。本文讲述了一位测试工程师从自学到实战的成长之路,分享他在学习UI、APP和API自动化过程中遇到的挑战,以及如何通过实际项目磨炼技术、突破瓶颈。他从最初自学的迷茫,到实战中发现问题、解决问题,再到得到导师指导,逐步掌握测试开发的核心思维,并向测试平台建设方向迈进。文章总结了他从理论到实践、从执行到思考的转变经验,强调了实战、导师指导和技术服务于业务的重要性。最后,邀请读者分享自己的技术突破故事,共同交流成长。
|
消息中间件 负载均衡 监控
skynet框架:批量服务管理方案
【10月更文挑战第7天】Skynet 框架下的批量服务管理方案通过高效、可靠及可扩展的设计,实现了对大量服务实例的集中管理。该方案涵盖服务注册与发现、消息队列、负载均衡及集群管理等关键技术,确保系统稳定运行并提升响应速度。其优势在于提高系统性能、增强可靠性、便于扩展及简化管理操作,适用于大规模分布式系统、微服务架构、实时数据处理及游戏服务器等多种场景。通过定制化优化,可充分发挥 Skynet 框架的优势,构建高效稳定的分布式系统。
715 6
|
9月前
|
消息中间件 存储 API
抖音私信协议软件,抖音群发私信的工具,抖音自动私信插件【python框架】
这个框架包含配置管理、消息队列、API客户端和主程序四个主要模块。配置管理负责存储账号信息和设置
|
机器学习/深度学习 人工智能 搜索推荐
AI训练师入行指南(五):模型评估
本文从珠宝鉴定类比出发,探讨AI模型从训练到优化的全流程。首先介绍模型评估的四大核心指标:准确率、精确率与召回率、F1-Score及AUC-ROC,帮助明确模型性能。接着分析阈值调节、正则化与集成学习等调优方法的实际应用,如支付宝动态人脸识别和腾讯金融风控系统。此外,针对GPT-4o、Stable Diffusion和滴滴ETA模型的具体案例,展示参数微调与审美争议解决策略。最后提供避坑指南,强调数据泄漏、过拟合和冷启动问题的应对之道,总结模型评估应以商业价值、伦理规范和用户体验为导向,确保AI模型真正成为“智能珍宝”。
827 0
|
数据采集 Java 数据处理
Python实用技巧:轻松驾驭多线程与多进程,加速任务执行
在Python编程中,多线程和多进程是提升程序效率的关键工具。多线程适用于I/O密集型任务,如文件读写、网络请求;多进程则适合CPU密集型任务,如科学计算、图像处理。本文详细介绍这两种并发编程方式的基本用法及应用场景,并通过实例代码展示如何使用threading、multiprocessing模块及线程池、进程池来优化程序性能。结合实际案例,帮助读者掌握并发编程技巧,提高程序执行速度和资源利用率。
697 0
|
机器学习/深度学习 人工智能 算法
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-15
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-15
|
编解码 网络协议 芯片
以太网口硬件知识分享
该文介绍了网络通信的基本原理,涉及PHY、MAC和RJ45接口的角色。PHY芯片负责物理层的信号处理,MAC则处理帧同步和MAC地址。网络通信中,MAC通常集成在CPU内,PHY通过MDIO总线与MAC交互,配置PHY芯片实现不同模式和功能。文中还提到了常见的网络信号模式(如MII、RMII)及其差异,并指出网络变压器的作用。此外,文章详细解析了KSZ8081RNB PHY芯片的电路原理,包括底板和扩展板的网口设计,以及网口电路和PCB设计的注意事项。最后,提供了网口问题的排查思路。
1455 1
|
机器学习/深度学习 算法
XGBoost中正则化的9个超参数
本文探讨了XGBoost中多种正则化方法及其重要性,旨在通过防止过拟合来提升模型性能。文章首先强调了XGBoost作为一种高效算法在机器学习任务中的应用价值,并指出正则化对于缓解过拟合问题的关键作用,具体包括降低模型复杂度、改善泛化能力和防止模型过度适应训练数据。随后,文章详细介绍了四种正则化方法:减少估计器数量(如使用`early_stopping_rounds`)、使用更简单的树(如调整`gamma`和`max_depth`)、采样(如设置`subsample`和`colsample`)以及收缩(如调节`learning_rate`, `lambda`和`alpha`)。
753 0
XGBoost中正则化的9个超参数

热门文章

最新文章

下一篇
开通oss服务