在我们日常的运维工作中,经常会涉及到需要在多台云服务器之间共享数据的情况。如果都在同一个局域网,那么使用 SMB/CIFS、NFS 等文件级共享协议就可以。但要是服务器都在云上,位于不同的可用区,或是分布在不同的云平台上,这种情况下共享数据就会存在一定的难度。
以下分享几种我在不同场景下会使用的数据共享方案,以供大家参考。
1. 对象存储
对象存储是一种通过平台无关的 RESTful API 进行读写访问的云存储服务,相比传统的共享协议要更简单也更安全,加之它采用扁平化的存储结构,不但能够高效的读写数据,同时也具有良好的扩容能力。
亚马逊 AWS S3 是首个在公有云上提供的对象存储服务,可以说 S3 是对象存储领域的事实标准,目前绝大多数云平台提供的对象存储服务几乎都是 S3 兼容的。也就是说,一个系统或工具只要支持访问 S3,那么它就可以使用所有兼容 S3 接口定义的其他对象存储服务。这样的兼容性,让我们在工具和存储服务方面都有了很多的选择。
比如腾讯云 COS 就是我们经常使用的对象存储服务,它完美兼容 S3 API,存储区域全面覆盖国内的基础上,海外主要国家和地区也做了很好的覆盖。不论业务运行在哪里,腾讯云都能提供理想的技术支撑。
对象存储比较适合运行在不同服务器上的应用之间共享数据,可以通过云计算平台提供的 SDK 开发实现访问对象存储的功能。
2. 云 NAS
综合型的云计算平台目前都有提供 NAS 存储服务,比如腾讯云的文件存储 CFS 就是典型的云 NAS 产品。通常是按存储容量计费,NAS 的存储性能取决于数据规模,存入的数据量越大,平台给分配的带宽也越大。
NAS 存储通过文件级共享协议对外提供服务,云平台普遍支持 SMB/CIFS 和 NFS 两种共享类型。由于这些共享协议的安全性无法满足互联网通信的要求,因此只能在云平台的自身的网络生态内才能使用。
如果你的多台服务器都在同一个云平台上,那么就可以考虑使用云 NAS 在服务器之间共享数据。很显然,想要在不同公有云或是混合云环境中共享数据,肯定需要其他的方案。
3. JuiceFS
JuiceFS 是一个开源的分布式存储系统,它采用对象存储作为存储引擎,采用 Redis 或 MySQL 等数据库作为元数据引擎。所有存入 JuiceFS 的文件,都会按照一定规则分块存储在云端的对象存储,数据对应的元数据全部存储在云端的数据库中。因为所有数据都在云端,任何有权限的主机,不论位于哪里,都可以挂载访问 JuiceFS 存储。
JuiceFS 的技术特性决定了它非常适合在多台服务器之间共享数据,它的数据强一致性设计,可以确保在多台服务器同时挂载时,数据的变化可以实时在每一个挂载端同步。
与云 NAS 不同,JuiceFS 是面向互联网链路设计的,所有通信都会经过 SSL 加密通道传输,具有良好的安全性。更重要的是,它没有平台限制,任何服务器都可以挂载 JuiceFS 存储,完全可以满足公有云或混合云等场景的数据共享需求。
JuiceFS 的客户端非常轻量,使用起来也非常简单。你只需要在云平台上开通对象存储和云数据库服务,然后在云服务器上使用 JuiceFS 客户端创建存储即可。你可以访问 JuiceFS GitHub 项目主页免费下载自由使用。
4. 虚拟专用网
当需要在多台服务器之间共享敏感数据时,公有云提供的存储服务通常不是最优选择。在这种情况下,我一般会考虑搭建虚拟专用网,将分布在不同平台、不同地理位置的服务器接入到同一个虚拟的网络当中。
这样一来,所有服务器在逻辑上都连接在同一个虚拟的网络中,彼此通过加密的通道进行通信。这就等同于所有的服务器都在同一个内网中,所有在内网中适用的数据共享方案都可以在这个场景下使用。
虚拟专用网的架构主要分为中心化和去中心化两种,限于篇幅这里不做展开。专业的云计算平台通常也会提供相关的服务,大家可以根据企业的实际业务场景去选择采用的方案。
总结
本文主要为大家分享几种笔者在实际工作中会采用的几种服务器之间共享数据的方案,从主观角度上说,对象存储和 JuiceFS 因为更简单方便,我在工作中使用的会更多一些。当然,可用的数据共享方案绝对不至于本文介绍的这几种,如果你有更好方案,欢迎评论区交流。