Portworx是一个现代的分布式云原生存储平台,旨在与诸如Kubernetes之类的协调器一起使用。该平台和公司同名,将适用于传统存储架构的一些成熟技术引入了云原生环境。
云原生存储时代关注有状态工作负载和云存储产品相关的系列,本文将重点介绍Portworx的体系结构。
什么是Portworx?
Portworx是为容器和微服务构建的软件定义的存储平台。它抽象了多个存储设备,以将统一的存储层暴露给云本机应用程序。Portworx用户可以在数据中心的多个物理主机之间部署高可用性的有状态应用程序,计算实例可以运行在多个zones,regions甚至不同的云提供商的环境中。
Portworx可以轻松安装在运行容器运行时(container runtime)的任何主机上,例如Docker。由于平台依赖于其自己的分布式服务,因此可以配置多节点Portworx存储集群,而无需安装Kubernetes。但是,通过与Kubernetes的紧密集成,Portworx可以使超融合或分解部署成为可能。在超融合方案中,计算和存储在同一节点上运行,而在分解方案中,只有指定的节点充当存储节点。
去年,Portworx已从覆盖存储层发展为企业数据平台。当前的产品包括从集成安全性到业务连续性再到动态扩展存储池的所有内容。
Portworx体系结构
与大多数分布式平台一样,Portworx实现了控制平面和数据平面。控制平面充当参与集群的所有存储节点的命令和控制中心。每个存储节点运行一个数据平面,负责管理I/O和连接的存储设备。
控制平面和数据平面均以分布式模式运行。这样可以确保存储服务的高可用性。为了获得最佳的正常运行时间,Portworx建议在集群中至少运行三个存储节点。根据集群的大小,每个节点都可以运行控制平面以及数据平面组件。在大型集群中,可能有不参与数据平面的节点,这意味着它们未被指定为存储节点。
上面的插图描绘了一个三节点的Portworx存储集群。控制平面在共享相同键/值数据库的三个单独节点上运行。集群由控制平面的所有参与节点使用的唯一ID标识进行验证。当运行控制平面的新节点加入时,应该使用相同的cluster-id。
数据平面在具有连接的块存储设备的一个或多个存储节点上运行。数据平面负责管理跨存储节点的节点级操作和I/O重定向。
控制平面使用gRPC与数据平面进行通信。
让我们仔细看一下控制平面和数据平面的组件。
Portworx控制平面
控制平面公开了用于管理集群的外部接口。它是利用Portworx,原生CLI pxctl,执行所有与存储相关的任务,例如创建卷和存储池。诸如Kubernetes之类的编排人员可以使用此API来协调有状态Pod的放置和调度。
Portworx服务API可作为REST端点、gRPC服务以及通过容器存储接口(CSI)使用。Portworx已开源OpenStorage SDK、规范和库,该规范和库定义了在云本机环境中执行的常见存储操作。该SDK具有用于Golang和Python的绑定,可以轻松调用该API。Portworx集群中还有一个Swagger UI可用,可以在任何节点的端口9021上进行访问。
控制平面中的节点使用gossip协议(也称之为流行病协议)在节点之间发送心跳、I/O使用情况以及可用CPU和内存的实时统计信息。该机制确保了控制平面的高可用性。来自控制平面的统计信息也与数据平面共享,有助于做出调度决策。
集群的元数据存储在etcd(分布式键/值数据库)中。KVDB的根由所有节点共有的集群ID以及其他信息(例如卷配置和节点注册状态)组成。这是反映集群当前状态的单一事实来源。
调配管理组件负责配置存储池、调配卷、向数据平面发送指令以安装和卸载卷,甚至跨多个故障域分布存储块的副本。从本质上讲,预配服务可以处理存储池和卷的生命周期。
最后,后台任务组件执行RAID扫描,增加HA计数,强制复制副本重新同步以及根据预定义的时间表执行卷的快照。
Portworx数据平面
控制平面和数据平面通过gRPC协议相互通信。控制平面做出的所有决策都作为指令发送到数据平面中的相应节点。
数据平面通过POSIX接口对设备执行I/O。数据平面的每个节点都通过RPC与另一个节点通信,该RPC用于跨多个节点复制数据。
在Portworx群集中,磁盘或块存储设备一次只能连接到一个节点,而该节点承担数据路径的责任。
将数据通过Container/Pod内的绑定写入公开的卷时,它会通过I/O队列进入Linux内核。然后,数据进入直写式高速缓存,后者最终将数据提交到磁盘。如果数据在高速缓存中可用,则它将对读取操作做出响应,而无需转到基础存储。每个写操作还与时间戳相关联,这将有助于识别所有节点上的最新数据。如果参与复制的节点之一不可用,时间戳将帮助重新同步节点上丢失的数据。
I/O调度组件用目标存储量标识该节点,然后将操作重定向到该特定节点。如果一个卷具有多个副本,则I/O调度程序确保每个节点都接收一个副本。设备存储充当附加存储和节点之间的接口。
块存储设备连接到的节点成为事务协调器。面向卷的I/O始终通过事务协调器进行。Portworx还支持所有节点可见的共享卷。即使在使用共享卷的情况下,事务协调器也负责提交写入并向上流组件发送确认信息。
当跨仲裁副本执行写操作时,Linux内核将确认该写操作,并将其转发给用户。
Portworx的数据平面还确保静态数据的安全性。它是通过dm-crypt完成的,dm-crypt是内置在Linux内核中的基于加密子系统和设备映射器的磁盘加密系统。在Intel CPU上,Portworx利用硬件加速功能来最大程度地减少主机负担。每个写入操作在提交到磁盘之前都要经过加密过程。
Portworx具有出色的体系结构,可以实现现代的分布式云原生存储平台。关注本公众号,后面我们将会介绍更多云原生存储的相关技术和介绍。敬请关注!
参考连接:https://thenewstack.io/a-closer-look-at-the-portworx-storage-cluster-architecture/
欣赏