You need to enable JavaScript to run this app.
导航
搭建Ceph
最近更新时间:2024.04.23 17:00:11首次发布时间:2022.03.17 18:01:50

Ceph是一种开源分布式文件系统,具有高可靠、自动重均衡、灵活扩展等特点,支持对象存储、块存储以及文件存储。本文为您介绍如何搭建Ceph。

Ceph充分利用节点的计算能力,通过Crush算法计算文件位置,使数据均衡分布,避免单点故障问题。

Ceph组成

RADOS(Reliable Autonomic Distributed Object Store)是 Ceph 存储系统的核心,也称 Ceph 存储集群,具有高可用、自我修复、自我管理等特性,包括 Ceph Monitor 和 Ceph OSD 两个核心组件。

  • Ceph Monitor :通过图表方式监控集群运行状态,包括监视器图、OSD 图、归置组(PG)图和 CRUSH 图。
  • Ceph OSD :存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他 OSD 守护进程的心跳向 Ceph Monitors 提供一些监控信息。通常至少需要 3 个 Ceph OSD 来实现冗余和高可用性。

更多内容,请参考 Ceph Documentation

前提条件

在进行本实践前,您需要完成以下准备工作:

  1. 注册火山引擎账号,并完成 实名认证。您可以登录 火山引擎控制台,在顶部导航栏右侧,单击“账号管理 > 实名认证”,前往 实名认证 页面查看是否已经完成实名认证。

  2. 火山引擎账户余额大于 100 元。您可以登录 火山引擎控制台,并前往账户总览页面查看账户余额。

实践规划

本最佳实践通过火山引擎云服务器、私有网络、公网NAT网关等产品进行 Ceph 部署,本文中相关产品规划如下:

产品或服务
本文示例
备注
私有网络 名称:ceph-vpc
IPv4:172.16.0.0/12
地域:华北2(北京)
可用区:可用区A
子网名称:ceph-cluster-subnet
IPv4:172.16.3.0/24
弹性计算ECS 名称:ceph-node1
规格:ecs.g1.xlarge(vCPU: 4 /内存:16GiB)
系统盘:100GiB
数据盘:200GiB * 3
操作系统:CentOS 7.6
地域及可用区:华北2(北京)可用区A
私网地址:172.16.3.76
名称:ceph-node2
规格:ecs.g1.xlarge(vCPU: 4 /内存:16GiB)
系统盘:100GiB
数据盘:200GiB * 3
操作系统:CentOS 7.6
地域及可用区:华北2(北京)可用区A
私网地址:172.16.3.237
名称:ceph-node3
规格:ecs.g1.xlarge(vCPU: 4 /内存:16GiB)
系统盘:100GiB
数据盘:200GiB * 3
操作系统:CentOS 7.6
地域及可用区:华北2(北京)可用区A
私网地址:172.16.3.223
名称:ceph-client
规格:ecs.g1.xlarge(vCPU: 4 /内存:16GiB)
系统盘:40GiB
操作系统:CentOS 7.6
地域及可用区:华北2(北京)可用区A
私网地址:172.16.3.211
公网NAT网关 名称:ceph-nat
规格:小型
地域及可用区:华北2(北京)可用区A
公网地址:180.184.xx.xx

火山引擎环境部署

在部署 Ceph 前,您需要先完成火山引擎上的一系列环境部署,包括私有网络 VPC 的创建,云服务器的创建以及公网NAT网关的创建。这些是您开启 Ceph 安装的必要条件。

创建 VPC 和 Subnet

  1. 登录 火山引擎控制台

  2. 在左侧导航树中,单击“产品与服务 > 私有网络”,进入 私有网络 VPC 管理控制台

  3. 在顶部导航栏选择“华北2(北京)”地域。

  4. 在私有网络列表页面,单击“创建私有网络”。

  5. 在创建私有网络页面,进行私有网络和子网相关参数配置,具体配置描述见下表。

    类别
    配置项
    说明
    私有网络 地域 华北2(北京)
    名称 ceph-vpc
    IPv4 网段 172.16.0.0/12
    子网 名称 ceph-cluster-subnet
    可用区 可用区A
    IPv4 网段 172.16.3.0/24
  6. 参数配置完成后,单击“确定”。

创建云服务器

  1. 登录 火山引擎控制台

  2. 在左侧导航树中,单击“产品与服务 > 云服务器”,进入 云服务器控制台

  3. 在左侧导航栏选择“实例”,地域选择为 华北2(北京),并单击“创建实例”。

  4. 在创建实例页面中,配置相关参数,具体如下表。

    配置项
    说明
    计费方式按量计费
    地域及可用区华北2(北京) 可用区A
    实例规格:通用型
    实例规格ecs.g1.xlarge(vCPU: 4 /内存:16GiB)
    镜像公共镜像 CentOS 7.6
    此处对操作系统类型无强制要求,可选用任何的 Linux 操作系统。本文以 CentOS 7.6为例
    存储系统盘 40GiB * 1
    数据盘 200GiB * 3
  5. 完成基础配置后,单击“下一步”,进行网络与安全配置。

    配置项
    说明
    网络私有网络:选择已创建的 VPC(ceph-vpc)
    子网:选择已创建的子网(ceph-cluster-subnet)
    安全组选择默认安全组
    弹性公网IP取消勾选“分配弹性公网IP”。
  6. 单击“下一步:确认订单”。

  7. 在确认订单页面中,确认各项参数信息。确认无误后,请根据控制台指引查阅并确认相关协议,并单击“立即购买”按钮,创建实例。

    本文中部署 Ceph 需创建 4 台 ECS 实例,请参考 实践规划 进行创建。

创建弹性公网 IP

  1. 登录 火山引擎控制台

  2. 在左侧导航树中,单击“产品与服务 > 公网 IP”,进入 私有网络管理 > 公网IP控制台

  3. 在公网 IP 列表页,单击“申请公网 IP”。

  4. 按下图配置公网 IP 相关参数,单击“确认订单”,创建公网 IP。

    配置项
    说明
    名称ceph-nat-eip
    线路类型选择“BGP(多线)”。
    计费类型选择“按带宽上限计费”。

创建公网NAT网关

  1. 登录 火山引擎控制台

  2. 在左侧导航树中,单击“产品与服务 > 公网NAT网关”,进入 私有网络 > 公网NAT网关控制台

  3. 在公网NAT网关列表页,单击“创建公网NAT网关”。按下图配置相关参数,单击“确认订单”。
    image.png

  4. 确认配置详情后,请根据控制台指引查阅并确认相关协议,并单击“立即购买”按钮,完成公网NAT网关创建。

    配置项
    说明
    计费类型按量计费
    地域华北2(北京)
    规格小型
    私有网络ceph-vpc
  5. 在公网NAT网关控制台,单击已创建的 ceph-nat,进入公网NAT网关详情页。单击“公网 IP > 绑定公网 IP”,添加公网 IP ceph-eip

  6. 在公网NAT网关详情页,单击“SNAT规则 > 创建SNAT 规则”,添加 SNAT 规则。
    image.png

Ceph 集群安装准备

为了更加快速部署 Ceph 集群,本实践中大部分操作使用 Ansible 批量操作,以减少各个节点来回切换的时间。

说明

下列操作只有 修改主机名 步骤需要登录到各个节点进行修改,其它均在部署节点 ceph-node1 执行即可。

主机规划

主机
IP
功能
ceph-node1172.16.3.76mon、osd、mgr、deploy
ceph-node2172.16.3.237mon、osd、mgr
ceph-node3172.16.3.223mon、osd、mgr
ceph-client172.16.3.211-

准备安装环境

修改主机名

使用 ECS Terminal 或远程连接工具,分别 登录到四台云服务器 命令行界面,依次修改主机名。

hostnamectl set-hostname ceph-node1
hostnamectl set-hostname ceph-node2
hostnamectl set-hostname ceph-node3
hostnamectl set-hostname ceph-client

在 ceph-node1 配置环境

  1. 配置域名解析文件。

    1. 执行vim /etc/hosts命令,打开 /etc/hosts 文件。

    2. i,进入编辑模式。

    3. 在/etc/hosts文件末尾添加如下内容,请将私网IP地址修改为您自己的私网IP。

      172.16.3.76   ceph-node1
      172.16.3.237  ceph-node2
      172.16.3.223  ceph-node3
      172.16.3.211  ceph-client
      
    4. Esc退出编辑模式,然后输入:wq并回车。

  2. 配置免密登录。

    ssh 密钥默认保留在 ~/.ssh 目录中,您可以根据需求在配置密钥时,指定 ssh 密钥保存位置。如不指定,在设置密钥保存位置时回车即可。

    ssh-keygen -t rsa -P ''
    ssh-copy-id ceph-node1
    ssh-copy-id ceph-node2
    ssh-copy-id ceph-node3
    ssh-copy-id ceph-client
    
  3. 安装 Ansible。

    1. 执行以下命令,安装 Ansible。

      yum install epel-release -y
       yum install ansible -y
      
    2. 执行vim /etc/ansible/hosts命令,打开/etc/ansible/hosts文件。

    3. i,进入编辑模式。

    4. 在/etc/ansible/hosts文件末尾,添加如下内容。

      [ceph]
      ceph-node1 ansible_ssh_user=root
      ceph-node2 ansible_ssh_user=root
      ceph-node3 ansible_ssh_user=root
      
    5. Esc退出编辑模式,然后输入:wq并回车。

    6. 执行以下命令,查看节点是否都能无密登录。
      ansible ceph -m ping

      出现如下回显信息,即为设置成功。
      image.png

  4. 执行以下命令,拷贝 hosts 到其他机器,将管理机文件复制到远程主机中。
    ansible ceph -m copy -a 'src=/etc/hosts dest=/etc/'

    ceph-node1,2,3出现如下回显信息,即为配置成功。
    image.png

  5. 配置 ceph 源。

    1. 执行vim /etc/yum.repos.d/ceph.repo命令,打开 /etc/yum.repos.d/ceph.repo 文件。

    2. i,进入编辑模式。

    3. 在/etc/yum.repos.d/ceph.repo文件添加如下内容。

      [ceph]
      name = ceph
      gpgcheck = 0
      baseurl = https://mirrors.volces.com/ceph/rpm-luminous/el7/x86_64/
      
      [ceph-deploy]
      name = ceph-deploy
      gpgcheck = 0
      baseurl = https://mirrors.volces.com/ceph/rpm-luminous/el7/noarch/
      
    4. Esc退出编辑模式,然后输入:wq并回车。

    5. 执行以下命令,将配置修改拷贝到其它节点。
      ansible ceph -m copy -a 'src=/etc/yum.repos.d/ceph.repo dest=/etc/yum.repos.d/'

      ceph-node1,2,3出现如下回显信息,即为配置成功。
      image.png

  6. 配置 /etc/yum.conf 文件,限制安装 ceph 的版本。

    1. 执行vim /etc/yum.conf命令,打开 /etc/yum.conf 文件。

    2. i,进入编辑模式。

    3. 在/etc/yum.conf文件末尾,添加如下内容。
      exclude=*12.2.13*

    4. Esc退出编辑模式,然后输入:wq并回车。

    5. 执行以下命令,将修改好的 yum 配置复制到其它节点中。
      ansible ceph -m copy -a 'src=/etc/yum.conf dest=/etc/yum.conf'

安装和配置 Ceph 集群

  1. 执行以下命令,安装 ceph-deploy。

    yum install ceph-deploy -y
    ceph-deploy --version
    

    可查询到版本信息,即为安装成功。
    image.png

  2. 使用 ceph-deploy 安装 ceph。

    进行此操作前,请确保已安装 epel 源,否则会报错。

    1. 执行以下命令,安装 ceph。

      ansible ceph -m yum -a 'name=epel-release state=latest'
      ceph-deploy install --no-adjust-repos ceph-node1 ceph-node2 ceph-node3
      

      返回如下回显信息即为安装成功。
      image.png

    2. 执行以下命令,查看 ceph 版本。
      ansible ceph -m shell -a 'ceph -v'

      返回如下回显信息:
      image.png

  3. 部署 RADOS存储集群。

    1. 执行以下命令,初始化集群。

      mkdir ceph-cluster
      cd ceph-cluster/
      ceph-deploy new ceph-node1 ceph-node2 ceph-node3
      ls
      

      返回如下回显信息:
      image.png

    2. 执行cat ceph.conf命令,查看配置如下图:
      image.png

  4. 执行以下命令,部署 mon 节点。

    ceph-deploy mon create-initial
    ls
    

    返回如下回显信息:
    image.png

  5. 执行以下命令,拷贝 admin 配置到其他节点。

    ceph-deploy admin ceph-node1 ceph-node2 ceph-node3
    ceph -s
    

    返回如下回显信息:
    image.png
    image.png

  6. 部署 ceph-mgr。

    Ceph-mgr 作为 Ceph 12.2 主推的功能之一,是负责 Ceph 集群管理的组件,目标是实现 Ceph 集群的管理,为外界提供统一的入口。

    执行以下指令进行部署。

    ceph-deploy mgr create ceph-node1 ceph-node2 ceph-node3
    ceph -s
    

    返回如下回显信息:
    image.png

  7. 启动 Ceph Dashboard。

    Ceph 提供了原生的Dashboard 功能,通过 Dashboard 可以获取 Ceph 集群的各种基本状态信息。

    1. 执行以下命令,开启 Dashboard。

      ceph mgr module enable dashboard
        #查看当前 dashboard 位置
        ceph mgr services
      
    2. 为 Ceph Dashboard 所在节点 绑定公网 IP

    3. 安装完成后,打开浏览器并在地址栏输入:http://<Dashboard 所在节点公网IP>:7000

      访问 Dashboard 前,请参考 修改安全组访问规则 放行7000端口。

      image.png

  8. 添加 OSD。

    1. 执行以下命令,为各节点创建 OSD。

      ceph-deploy disk zap ceph-node1 /dev/vdb
      ceph-deploy disk zap ceph-node1 /dev/vdc
      ceph-deploy osd create ceph-node1 --data /dev/vdb
      ceph-deploy osd create ceph-node2 --data /dev/vdb
      ceph-deploy osd create ceph-node3 --data /dev/vdb
      ceph-deploy osd create ceph-node1 --data /dev/vdc
      ceph-deploy osd create ceph-node2 --data /dev/vdc
      ceph-deploy osd create ceph-node3 --data /dev/vdc
      
    2. 执行ceph -s命令,查询集群状态。
      image.png

块存储 RBD 创建

RBD(RADOS Block Device)块存储,是最稳定且最常用的存储类型。RBD 块设备类似磁盘可以被挂载。 RBD 块设备具有快照、多副本、克隆和一致性等特性,数据以条带化的方式存储在Ceph 集群的多个 OSD 中。

  1. 执行以下命令,创建 ceph pool。

    rados mkpool <poolname>
    rados lspools
    

    返回如下回显信息,即为创建成功。
    image.png

  2. 执行以下命令,在ceph pool 中创建 image1。

    rbd create <poolname>/image1 --size 20480 --image-format 2
    rbd info <poolname>/image1
    

    返回如下回显信息,即为创建成功。
    image.png

  3. 执行rbd list <poolname> 命令,查看 ceph pool 中 image 信息。

    返回如下回显信息:
    image.png

使用 client 挂载 RBD 到本地

  1. 在 ceph-node1 执行以下命令,安装 ceph-client。

    ceph-deploy install ceph-client
    ceph-deploy admin ceph-client
    
  2. 在 ceph-client 环境执行以下命令,挂载 RBD 到本地。

    rbd create <poolname>/test2 --size 20G --image-format 2
    rbd map testdevice --pool <poolname> --image test2
    rbd feature disable <poolname>/test2 object-map fast-diff deep-flatten
    rbd map testdevice --pool <poolname> --image test2
    mkfs.ext4 -m0 /dev/rbd0
    mkdir /mnt/ceph-block-devicesudo
    mount -t ext4 /dev/rbd0  /mnt/ceph-block-devicesudo
    df -h
    

    返回如下回显信息,即为挂载成功。
    image.png

集群卸载

执行以下命令,进行集群卸载。

# 卸载ceph软件包
ceph-deploy purge {ceph-node} [{ceph-node} ...]

# 删除各种配置文件和生成的数据文件
ceph-deploy purgedata {ceph-node} [{ceph-node} ...]

# 将卸载节点的认证密钥从本地目录移除
ceph-deploy forgetkeys

名词解释

  • 云服务器

    云服务器ECS是一种简单高效、处理能力可弹性伸缩的计算服务。ECS帮助您构建更稳定、安全的应用,提升运维效率,降低IT成本,使您更专注于核心业务创新。

  • 私有网络

    私有网络VPC是用户基于火山引擎创建的自定义私有网络,不同的私有网络之间二层逻辑隔离,用户可以在自己创建的私有有网络内创建和管理云产品实例,比如 ECS、负载均衡、RDS 等。

  • 公网NAT网关

    公网NAT网关是一款企业级公网网关,为私有网络内的云服务器提供网络地址转换服务,支持SNAT规则和DNAT规则,实现多台云服务器共享公网IP访问公网或向公网提供服务。