# 简介

# 存储类型

  • 块存储

    • :不管数据内容,只管提供一定容量的存储空间。
    • 比如硬盘等块设备。
  • 文件存储

    • :按目录树存储文件,每个文件通过唯一的路径寻址。
    • 主要用于存储非结构化数据,比如视频、图片,而结构化数据通常用数据库存储。
    • 比如 FTP、HTTP、NFS 等服务器。
  • 对象存储

    • :以 key-value 形式存储文件。
      • 用文件名作为 key ,知道了 key 就可以读取一个文件的内容。不使用目录树,这样可以避免路径寻址的耗时。
      • 用文件内容作为 value ,且分成多段存储,这样可以通过并行读写提高访问速度。不支持修改 value 。
    • Amazon S3(Simple Storage Service)是目前最流行的对象存储协议,允许用户通过 RESTful API 或 aws 命令访问对象存储服务器。
    • 对象存储是新一代的存储方案,介于块存储与文件存储之间,优点较多。但成本稍高。更适合远程存储文件的场景。

# 存储软件

  • Ceph :支持块存储、文件存储、对象存储。
    • 与 FTP、NFS 等存储软件相比,ceph 支持部署多实例、存储多副本,从而实现高可用。但运维复杂。
  • GlusterFS :用于文件存储。2011 年被红帽公司收购。
  • GoogleFS :用于文件存储。由 Google 公司开发,闭源。
  • HDFS :用于文件存储,借鉴了 GoogleFS 。
  • FastDFS :用于文件存储。
  • Swift :用于对象存储。
  • MinIO :用于对象存储。

# NFS

:网络文件系统(Network File System),一个用于共享文件系统的网络协议。

  • 1984 年由 Sun 公司发布。
  • 采用 C/S 架构。
    • 客户端需要通过 RPC 协议访问服务器的 UDP 111 端口,查询到 NFS 各项服务进程当前监听的端口,然后与其建立 TCP 连接。
    • 客户端可以挂载服务器上共享的文件系统,直接读写其中的文件,像读写本机文件一样方便。
  • 部署流程如下,参考文档 https://documentation.ubuntu.com/server/how-to/networking/install-nfs (opens new window)
    • 在一个主机上,部署 nfs 服务器。
      • 安装:
        apt install nfs-kernel-server
        systemctl start nfs-kernel-server
        
      • 编辑 /etc/exports 文件,导出本机的目录,允许 nfs 客户端访问:
        /test  *(rw,async,no_subtree_check,no_root_squash)
        
        然后执行 exportfs -a 让该配置文件生效。
      • nfs 服务器默认监听 111、2049 等端口,执行命令 rpcinfo -p 可以查看。
      • nfs 服务器默认没有密码认证,安全程度低。
        • 用户可以添加防火墙规则,只允许被指定 IP 的 nfs 客户端访问。
        • 用户可以添加 kerberos 认证。
    • 在另一个主机上,部署 nfs 客户端。
      • 安装:
        apt install nfs-common
        
      • 将 nfs 服务器的一个目录,挂载到本机:
        mount 10.0.0.1:/test /test
        
        还可在 /etc/fstab 文件中加入以下配置,使得开机时自动挂载目录:
        10.0.0.1:/test /test  nfs   defaults    0     0
        
    • nfs 服务器、客户端,都使用 /etc/nfs.conf 这个配置文件。

# iSCSI

:因特网小型计算机系统接口(Internet Small Computer System Interface),一个用于共享存储设备的网络协议。

  • 2003 年由 IBM 公司发布。
  • 采用 C/S 架构,基于 TCP/IP 协议通信。
  • 比 NFS 更底层,可以将远程主机的存储设备(比如磁盘)挂载到本机。
    • 原理:将本机发出的 SCSI 命令,传输到远程主机上执行。