搭建多地域共享存储(附视频)

2020-12-14 12:49:47 浏览数 (1)

0x00 前言

最近,隔壁部门的工程师小刘正在探索如何搞一套支持多地域容灾、且能共享访问的文件服务解决方案。在之前他尝试过本地的NAS存储,无奈扩容艰难、远程访问性能和吞吐量都很受限,管理复杂且成本高昂,多地备份服务更是代价巨大。其实这些功能,利用腾讯云的公有云基础服务,简单几步就可以实现。这篇小教程中,将和大家一起轻松探索,在腾讯云上搭建高可用的共享存储解决方案。

今天这篇教程的主角是CVM、VPC、CFS等腾讯云IaaS层的核心基础服务。

0x01 云服务器和私有网络创建

作为预热,本节我们将在创建VPC(以及相关的子网),并在不同可用区创建两台CVM云服务器实例,它们是上层应用业务的基础,也是我们后续验证部署CFS的基础。

创建私有网络(VPC)

先上段视频教程,给大家一个VPC创建的整体感受:

视频内容

腾讯云在每个地域都为用户创建了默认的VPC,方便创建云服务器实例时可以直接选用。不过,针对我们这次的多节点云服务器的应用场景,推荐在创建CVM前先创建私有网络VPC,可以更灵活地规划后续网络结构。在私有网络VPC控制台界面,可以创建VPC,点击 新建按钮后如图:

创建VPC,键入名称和CIDR即可,通常可以选择大范围一些,我们这里选择默认的/16的的IPv4地址段。另外第一次创建VPC时需要同时指定初始子网,其实就时该VPC下的第一个子网,子网的CIDR在VPC的范围内即可。注意:子网是和可用区关联的,且一个子网只可以关联一个可用区。如果需要一个跨多个可用区的VPC,需要在VPC下分别创建属于各个可用区的多个子网。另外,网络规划也是搭建基础服务前期必不可少的谋划工作。

我们这里选择创建一个新加坡地域的VPC(my-vpc-sg,10.0.0.0/16),并在其下创建关联两个子网,分别在新加坡一区(my-subnet-sg-1,10.0.0.0/24)和二区(my-subnet-sg-2,10.0.1.0/24)。

多学一点: CIDR全称Classless Inter-Domain Routing,CIDR记法用于标识一个IP地址和它所关联的路由前缀。在云服务中用可以简单地理解为一个被分配可使用的网络地址段,简称网段。IANA规定了三个可用与私有网络的IPv4地址段:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16,这些地址段均可在腾讯云被设置使用。

创建云服务器(CVM)

创建CVM实例大家想必已经非常熟悉了,唯一的不同在于指定我们刚刚创建的VPC/子网,如图:

镜像选择上,我们选择最近新上的Centos8.0和Ubuntu20.04等镜像,尝尝新鲜。

我们这里在上述两个子网下,各分别创建一台CVM

由于它们在一个VPC内,彼此是可以通过内网IP高效访问的。同一VPC下的云服务器彼此可以连通,而不论其在哪个子网或可用区,都能如同内网一样访问,这也是私有网络VPC的核心功能。

0x02 文件存储创建与挂载

腾讯云文件存储是什么?先引用一段官网的介绍:

腾讯云文件存储(CFS),即公有云上的NAS存储,帮助用户解决公有云上的高性能、共享存储需求。CFS支持容量和性能的线性扩展,现有应用无需修改即可挂载使用。腾讯文件存储具有使用便捷、高性能、高可用等特性,适用于多种业务场景。如企业文件共享(为OA、ERP、财务管理系统等实现文件共享)、流媒体处理(通过高吞吐加速视频编辑、影音制作/渲染过程)、Web服务及内容管理(提供弹性高性价比的共享存储空间)、机器学习及大数据应用(提供PB级数据,高IOPS)。CFS通常与CVM、容器、Batch、黑石等服务搭配使用,为多个计算性能提供弹性高性能的共享存储空间。

不免让人有点云里雾里,其实NAS(Network Attached Storage)最开始是指通过网络远程访问的共享文件存储设备,简单地说它跟我们常用的主机硬盘有3点不同:第一,它不是裸盘,而是已经被格式化过的符合POSIX标准(read/write等OS接口标准)的文件系统;第二,通过网络访问的,而不是挂在本地主机上的;第三,最重要的一点,它是可以共享访问的,意味着可以多个客户端同时进行读写操作。厉害吧?

这个所谓的云上NAS是什么意思呢?功能特性还是和NAS一样,即刚才那核心的三点都没变。区别首先是其非功能的特性大大提升,如容量弹性可扩展、更高读写性能、以及高吞吐量支持更多的客户端并发访问;另外是增加了一些方便的如监控统计、权限管理等。二者两方面都是公有云服务的共有必备特性,无需太多理解。

文件存储和块存储/对象存储的关系如何呢?CFS相比云盘CBS(公有云上的硬盘),区别在于主机是通过NFS协议挂载而非直接挂载,以及无需格式化;相比对象存储COS,区别在于其与POSIX标准兼容,而COS是通过HTTP协议访问的(你无法 ls命令 读取COS的目录)。总之,需要共享访问大量文件的场景用CFS,没错的。

创建CFS实例

在CFS的文件系统列表页面,可以创建CFS文件系统。过程很简单,除了起名称外,最重要的是选择可用区和网络。如下图:

这里我们选择新加坡一区的子网。由于都在一个VPC下,上一节创建的两台CVM云服务器将都可以访问(挂载)它,后续我们将详细介绍挂载命令。

多学一点: CVM里是无法通过ping命令来验证和CFS的连通性的,对于NFSv4协议的CFS,其验证可以通过如下telnet命令:

代码语言:javascript复制
telnet YOUR.CFS.IP.ADDR 2049

挂载CFS文件系统

同样的页面,还可以查看刚刚创建的CFS实例。我们点击该CFS实例ID进入实例详情页,在挂载点信息标签下,可以查看该CFS实例的挂载点信息详情,包括所在VPC/子网信息,内网IPv4地址,以及最关键的——挂载命令。如图,而且命令还可以方便的复制,即便对于NFS新手都很友好。

我们这里按照提示的命令,将CFS文件系统的根目录挂载到CVM的指定目录/mnt/cfs下。

代码语言:javascript复制
# ubuntu下需要用sudo或者先su到root下
mkdir -p /mnt/cfs
mount -t nfs -o vers=4.0,noresvport YOUR.CFS.IP.ADDR:/ /mnt/cfs

mount命令,-t参数指定了挂载类型为nfs-o参数是的挂载选项的意思,这里我们指定NFS版本(vers)为4.0版本,noresvport的意思是nfs客户端采用非特权的源端口,这样可以提升客户端的最大挂载点数量。两个必选参数先后分别是远端地址&目录、以及本地目录,和普通的挂载场景用法没有任何区别。

无需紧张: Centos里第一次创建镜像启动CVM实例时,是没有预装nfs的相关命令的,用yum安装nfs-utils包即可:

代码语言:javascript复制
mount mntcfs bad option; for several filesystems (e.g. nfs, cifs) you might need a sbinmount.type helper program.
# 没有/sbin/mount.nfs4,安装相关软件包即可
yum install -y nfs-utils

验证挂载可以用df命令

0x03 对等连接创建与配置

对等连接(Peer Connection,简称PC)是VPC领域下的一个子产品,提供了大带宽、高质量的云上资源互通服务,可以帮助我们打通腾讯云上的资源通路。对等连接可以做到在多区域之间、多账户间以及多种异构网络之间打通链路。对于我们接下来要做的事:使跨多地域之间的VPC互联。腾讯云的对等连接产品就是一大利器。

首先,可以参考第二节完全一样的方法,我们先在东京地域创建了一个VPC(my-vpc-jp, 172.16.0.0/16),以及其初始的子网(my-subnet-jp-1, 172.16.0.0/24),并在其下创建云服务器CVM(jp-server-1)。不同的VPC下的云服务器是默认完全不内网互通的,若要使我们的东京服务器可以和新加坡地域的两台服务器互相连通,只需要为两个VPC创建对等连接即可。需要以下两步。

创建对等连接

在VPC的对等连接控制台,可以新建对等连接实例。需要选定两端的VPC,以及对应的带宽上限大小,如图:

多学一点:同地域下基本免费,跨地域的费用结算默认是日峰值阶梯计算(也可申请月95计算)。另外,对等连接还可以支持跨账户间建立,由连接发起方支付,效果一样,有兴趣可以试试。

更新两端VPC的路由表

创建完对等连接实例后,控制台会提示去修改路由表。在VPC的路由表列表页,找到我们VPC的default路由表,点击ID进入详情。然后选择 新增路由策略,加入对端VPC的下一跳规则即可。目的端选择对端VPC(也可以是对端子网的)的网段,下一跳类型选择对等连接

新加坡VPC的路由表更新:

东京VPC的路由表更新:

注意:两端VPC的路由表都要增加下一跳策略。对等连接私有网络网段不能有冲突。

路由表规则生创建后,网络连通性即时生效。东京的服务器立即可以和新加坡的服务器互相ping通对方,并且自然地,可以挂载新加坡地域的CFS了。mount命令不变:

代码语言:javascript复制
mount -t nfs -o vers=4.0,noresvport YOUR.CFS.IP.ADDR:/ /mnt/cfs

0x04 网络结构&访问性能分析

网络拓扑总结

至此,我们整体总结下上述实验的网络拓扑。两个地域各有一个VPC(私有网络),并通过对等连接实现了内部的互通。新加坡地域两个子网分别在两个不同的可用区,东京地域一个可用区部署一个子网。每个子网下各有一台服务器,且CFS部署在其中一个子网下。网络拓扑结构如下图所示:

最底层依托腾讯云CFS文件存储,仅需通过一个CFS挂载点进行接入,即可保证文件存储层的灵活扩展和高性能/高吞吐要求;而上层用于运行业务的CVM服务器可以做到两地三中心部署,任何一个宕机都不影响其余业务服务器正常访问共享文件存储,这也是常见的支持容灾备份的高可用方案。

CFS访问性能分析

我们将上述的三种典型的CVM/CFS挂载访问方式总结一下:

CVM与CFS放置关系

访问CFS存储的方式

访问性能

通常用途

CVM实例与CFS在同一地域,同一可用区

直接挂载

最高

在线业务生产中心

CVM实例与CFS在同一地域,不同可用区

直接挂载

很高

同城灾备双活中心

CVM实例与CFS在不同地域

需对两个VPC创建对等连接

一般

异地容灾备份中心

CVM对CFS的写入性能简单评测

我们在三台CVM里,通过dd命令测试一下其对挂载的CFS目录写性能,命令具体如下:

代码语言:javascript复制
# 注意:命令需要root权限,ubuntu下需要先:sudo su -
echo 3>/proc/sys/vm/drop_caches && dd if=/dev/urandom of=/mnt/cfs/data bs=1M count=1K

注意:由于有操作系统缓存的存在,通常用dd命令进行硬盘读写测试前,最好清空一下系统的缓存。不过对于上述随机写入数据的场景,缓存影响较小。

我们根据写入block size的大小,本实验中我们取block size为1KB、4KB、16KB ... 512KB、1MB。结果如下图:

从上图可以看出,同一地域,即便不同可用区之间的CVM到CFS访问性能都是相对高且近似的,平均写性能到80~120MB/s之间。然而,对于通过对等连接(peer connection)连接起来的不同地域的CVM,其访问CFS存储的性能瓶颈不在于存储,而是和对等连接的带宽以及各地域网络的具体情况相关。新加坡和东京地域本次的实测是20MB/s,也还不错。

0x05 结语

至此,本篇教程进入尾声。如果你一路跟着实践下来,相信已经更加熟悉了VPC、CVM、CFS等云服务的核心基础产品、了解了对等连接的使用场景,以及熟悉了如何设计高可用的网络拓扑结构和简单的存储性能测试,并最终搭建一套跨地域支持容灾的云上共享存储。腾讯云上还有各种更多好玩的各种服务等待着我们一起探索、组合与构建。让我们一起享受搭积木的快感吧~

0x06 参考资料

  • 腾讯云云服务器CVM
  • 腾讯云私有网络VPC
  • 腾讯云文件存储CFS
  • 腾讯云对等连接PC
  • Network File System (NFS) Version 4 Protocol
  • nfs(5) - Linux man page
  • mount(8) - Linux man page

0 人点赞