Vitastor Distributed Software Defined Storage

repository·master·Indexed 42 days ago

https://github.com/vitalif/vitastor

A high-performance distributed Software Defined Storage (SDS) system designed for block, file, and object storage in low-latency SSD environments. Includes a Kubernetes CSI driver (version 3.2.1) supporting block volumes with snapshots and expansion, as well as VitastorFS for filesystem-based volumes with ReadWriteMany (RWX) support.

Tokens
130.5K
Snippets
336
Records
571
Agent score
48%

What's inside Vitastor

  1. Overview of Vitastor Server Features

    master

    Vitastor is a reliable clustered block storage system designed without single points of failure. Key server-side capabilities include:

    • High Performance: Supports NVMe atomic writes to minimize Write Amplification (targeting WA=1).
    • Fault Tolerance Schemes: Supports replication, XOR n+1 (parity disk), and Reed-Solomon erasure coding (via jerasure or ISA-L) with configurable data and parity counts.
    • Data Distribution: Automatic distribution across OSDs using mathematical optimization to ensure uniformity and minimize data movement. Supports:
      • Multiple pools with different redundancy schemes.
      • Distribution trees with device class selection (e.g., only SSD, only HDD).
      • Customizable failure domains (disk, server, rack, etc.).
    • Storage Management: Includes degraded block recovery, rebalancing (moving data between OSDs), snapshots, and copy-on-write clones.
    • Network & Optimization: Supports RDMA/RoCEv2 (via libibverbs or RDMA-CM), local reads for multi-datacenter optimization, and "lazy" fsync support.
    • Integrity & Security: Background integrity scrubbing, checksums, and AES-256-XTS end-to-end encryption with Vault/OpenBao support for key management.
    • Observability: Statistics collection in etcd (I/O, space usage per inode) and a built-in Prometheus exporter.
  2. Overview of Vitastor configuration categories

    master

    Vitastor configuration is organized into several functional areas. Depending on your deployment needs, you may need to configure:

    • Parameters (Key-Value): General settings categorized by scope.
    • Pool Settings: Configuration for storage pools.
    • OSD Tree Settings: Placement tree configurations.
    • Individual OSD Settings: Specific configurations for OSDs.
    • Inode Settings: Metadata settings for images (e.g., name, size, and parent image references).

    Parameter Categories:

    • Common: General system settings.
    • Network: Networking and connectivity.
    • Client Code: Settings for client-side logic.
    • Global Disk Parameters: Cluster-wide disk layout settings.
    • OSD Disk Parameters: Disk-specific layout settings.
    • Other OSD Parameters: Miscellaneous OSD settings.
    • Monitor Parameters: Settings for Vitastor monitors.
    • Security Parameters: Security and access control settings.
  3. Overview of Vitastor plugins and tools

    master

    Vitastor integrates with various virtualization and orchestration platforms through dedicated plugins and tools:

    Orchestration & Cloud Integration

    • Kubernetes: CSI plugin available.
    • Proxmox: Dedicated storage plugin and packages.
    • OpenNebula: Storage plugin available.
    • OpenStack: Supports Cinder driver, and includes Nova and libvirt patches.

    Client & Access Methods

    • CLI Tools: vitastor-cli for image management and vitastor-disk for disk management.
    • Kernel Mounts: Supports UBLK and NBD servers.
    • Virtualization: Native QEMU driver and a simplified NFS proxy for file-based image access emulation (useful for VMWare).
    • Protocols: S3 support and NFS RDMA support (potentially usable for GPUDirect).
    • Libraries: Generic user-space client library and a loadable fio engine for benchmarking.
  4. Overview of Vitastor

    master

    Vitastor is a distributed Software-Defined Storage (SDS) system providing block, file, and object storage. It is designed as a high-performance, simplified alternative to Ceph (RBD, CephFS, RGW) and cloud provider storage services.

    Key Characteristics

    • Architecture: Similar to Ceph, featuring atomicity, strong consistency, and replication via a primary OSD. It uses symmetric clustering without a single point of failure.
    • Data Distribution: Automatically distributes data across any number of disks of any size using configurable redundancy schemes (replication or Erasure Coding).
    • Performance: Optimized for SSD and SSD+HDD clusters with at least 10 Gbps networking. Supports TCP and RDMA. On high-end hardware, it can achieve ~0.1 ms latency for 4 KB reads/writes.
    • Protocols & Drivers: Supports QEMU, UBLK, NBD, NFS, OpenStack, OpenNebula, Proxmox, and Kubernetes CSI.
  5. Overview of Vitastor server-side features

    master

    Vitastor provides a highly-available block storage system with symmetric clustering and no single point of failure (SPOF). Key server-side capabilities include:

    Data Redundancy & Reliability

    • Redundancy Schemes: Supports Replication, XOR n+1, and Reed-Solomon erasure codes (using jerasure and ISA-L libraries).
    • Data Integrity: Uses checksums and scrubbing (automated verification of copies).
    • Recovery: Automatic recovery of degraded blocks and rebalancing (data movement between OSDs).

    Performance & Optimization

    • NVMe Support: Supports atomic writes to reduce write amplification (aiming for Write Amplification = 1).
    • Network: Supports RDMA/RoCEv2 via libibverbs or RDMA-CM.
    • I/O Management: Features write throttling for smoothing random write workloads in hybrid SSD+HDD configurations, lazy fsync support, and localized read support for cross-datacenter optimizations.
    • Caching: Supports client write-back caching.

    Management & Configuration

    • Configuration: Managed via JSON data structures stored in etcd (parameters, pools, and images).
    • Observability: Built-in Prometheus metric exporter and per-OSD/per-image I/O and space usage statistics in etcd.
    • Storage Features: Supports snapshots and copy-on-write image clones.
  6. Compare Vitastor with Ceph

    master

    Vitastor shares several architectural similarities with Ceph, making it familiar to users of that system:

    • Core Abstractions: Uses Pools, PGs (Placement Groups), OSDs, Monitors, Failure Domains, and a distribution tree (similar to CRUSH).
    • Data Distribution: Images are distributed uniformly across all PGs in a pool.
    • Atomicity: Vitastor is transactional; every write to the cluster is atomic.
    • Metadata/Journaling: OSDs have journals and metadata, which can be placed on separate disks.
    • Resilience: Like Ceph, the client library is designed to wait for cluster recovery. You can restart the entire cluster, and clients will hang temporarily rather than disconnecting.
  7. Vitastor Drivers and Integration Tools

    master

    Vitastor provides a wide range of drivers and tools for integrating with virtualization, orchestration, and testing frameworks:

    • Orchestration & Cloud:
      • Proxmox plugin
      • OpenNebula plugin
      • Kubernetes CSI plugin
      • OpenStack support (Cinder driver, Nova and libvirt patches)
    • Management Tools:
      • vitastor-cli: Console interface for image management.
      • vitastor-disk: Disk management tool.
      • General-purpose client library for cluster interaction.
    • Storage Interfaces:
      • QEMU disk driver
      • NFS proxy for emulating file access (compatible with VMWare)
      • UBLK and NBD servers for kernel-level image mounting (user-space block device)
    • Testing:
      • fio disk driver for performance testing.
    • OS Packages: Available for Debian and CentOS.
  8. Overview of Vitastor security features

    master

    Starting from version 3.1.0, Vitastor provides three layers of data protection. All security features are optional and disabled by default in their simplest configuration. By default, only transport-layer data checksums (proto_checksums=payload) are enabled for supporting clients (>= 3.1.0). For older clients, connections without checksums are allowed by default (force_proto_checksums is empty).

    Security Layers:

    1. Control Plane Protection (etcd):

      • TLS encryption for connections to etcd.
      • Client authentication via TLS (X.509) certificates.
      • Client access control to etcd data.
    2. Data Plane Protection (OSD):

      • Full AES-GCM encryption for connections to OSD (faster than TLS).
      • Alternative: AES-GCM encryption for command headers only, using data checksums with a secret "salt".
      • Client authentication via TLS (X.509) certificates.
      • Client access control on the OSD side.
    3. End-to-End Encryption:

      • Data is encrypted using AES-XTS on the client side; the Vitastor cluster never sees plaintext data.
      • AES-XTS keys can be stored in etcd or an external Vault/OpenBao instance.
  9. Overview of Vitastor configuration types

    master

    Vitastor configuration is organized into several distinct functional areas:

    • Configuration parameters: General key-value pairs.
    • Pool configuration: Settings related to storage pools.
    • OSD placement tree configuration: Defines how OSDs are organized in the placement tree.
    • Separate OSD settings: Specific configurations for individual OSDs.
    • Inode configuration: Manages image metadata such as name, size, and parent references.
  10. Configure certificate-based authentication

    master

    When encryption is enabled, clients, OSDs, and Vitastor monitors authenticate via certificates.

    • OSDs and Monitors: Must use separate certificates, either self-signed or signed by distinct CAs (osd_ca and mon_ca).
    • OSD/Monitor Certificates: Multiple OSDs can share the same certificate, as can multiple monitors, because their privileges are currently identical.
    • Monitors: If Antietcd is embedded within the monitor, a monitor certificate may not be required as the monitor has direct access to etcd data in memory.
  11. Understand the Vitastor Network Public License (VNPL) 1.1

    master

    Vitastor is licensed under the VNPL 1.1 (Vitastor Network Public License). This is a copyleft license based on GNU GPLv3.0 that includes a "Network Interaction" clause.

    Unlike standard AGPL, VNPL extends copyleft requirements to Proxy Programs: micro-service modules that interact with Vitastor over a network and are specifically designed to work with it. If you use Vitastor in a way that provides its functionality to users via a Proxy Program, you must open-source those Proxy Programs under a GPL-compatible license (e.g., GPL, LGPL, MIT/BSD, or Apache 2) unless you obtain a commercial license.

    Key distinction:

    • Proxy Programs: Software designed specifically for Vitastor that interacts with it via API, CLI, or network (e.g., a Vitastor CSI driver). These must be open-sourced.
    • Non-Proxy Programs: Software that interacts with Vitastor indirectly through generic interfaces and was not designed for Vitastor (e.g., an OS running in a VM using a Vitastor-backed block device). These do not require open-sourcing.
  12. Determine if your software is a Proxy Program under VNPL

    master

    To determine if your software is subject to the VNPL open-source requirements, evaluate it against two criteria. A program is a Proxy Program if it meets both conditions:

    1. Special Design: The program has functionality specific to Vitastor and "knows" it is working with Vitastor (e.g., it handles Vitastor-specific snapshots or features).
    2. Interaction: It interacts with Vitastor directly or indirectly through any interface, including APIs, CLIs, network protocols, or wrappers.

    Decision Logic Examples:

    • CSI Driver: Interacts via vitastor-cli and is designed specifically for Vitastor $\rightarrow$ IS a Proxy Program (must be open-sourced).
    • Operating System in a VM: Interacts via a generic block device interface (e.g., QEMU) and was not designed for Vitastor $\rightarrow$ IS NOT a Proxy Program.
    • Cloud Control Panel: If the panel's functionality changes when Vitastor is replaced (e.g., specific snapshot management), it is designed for Vitastor $\rightarrow$ IS a Proxy Program. If the panel is universal and doesn't change $\rightarrow$ IS NOT a Proxy Program.