存储集群快速入门

如果你还没完成预检,请先做完。本篇快速入门ceph-deploy 从管理节点建立一个 Ceph 存储集群,该集群包含三个节点,以此探索 Ceph 的功能。

存储集群快速入门 - 图1

第一次练习时,我们创建一个 Ceph 存储集群,它有一个 Monitor 和两个 OSD 守护进程。一旦集群达到 active+clean 状态,再扩展它:增加第三个 OSD 、增加元数据服务器和两个 Ceph Monitors。为获得最佳体验,先在管理节点上创建一个目录,用于保存 ceph-deploy 生成的配置文件和密钥对。

  1. mkdir my-cluster
  2. cd my-cluster

ceph-deploy 会把文件输出到当前目录,所以请确保在此目录下执行 ceph-deploy

Important

如果你是用另一普通用户登录的,不要用 sudo 或在 root 身份运行 ceph-deploy ,因为它不会在远程主机上调用所需的 sudo 命令。

创建集群

如果在某些地方碰到麻烦,想从头再来,可以用下列命令清除配置:

  1. ceph-deploy purgedata {ceph-node} [{ceph-node}]
  2. ceph-deploy forgetkeys

用下列命令可以连 Ceph 安装包一起清除:

  1. ceph-deploy purge {ceph-node} [{ceph-node}]

如果执行了 purge ,你必须重新安装 Ceph 。

在管理节点上,进入刚创建的放置配置文件的目录,用 ceph-deploy 执行如下步骤。

  • 创建集群。
  1. ceph-deploy new {initial-monitor-node(s)}

例如:

  1. ceph-deploy new node1

在当前目录下用 ls 和 cat 检查 ceph-deploy 的输出,应该有一个 Ceph 配置文件、一个 monitor 密钥环和一个日志文件。详情见 ceph-deploy new -h

  • 把 Ceph 配置文件里的默认副本数从 3 改成 2 ,这样只有两个 OSD 也可以达到 active+clean 状态。把下面这行加入 [global] 段:
  1. osd pool default size = 2
  • 如果你有多个网卡,可以把 publicnetwork 写入 Ceph 配置文件的 [global] 段下。详情见网络配置参考
  1. public network = {ip-address}/{netmask}
  • 安装 Ceph 。
  1. ceph-deploy install {ceph-node} [{ceph-node} ...]

例如:

  1. ceph-deploy install admin-node node1 node2 node3

ceph-deploy 将在各节点安装 Ceph 。注:如果你执行过 ceph-deploypurge ,你必须重新执行这一步来安装 Ceph 。

  • 配置初始 monitor(s)、并收集所有密钥:
  1. ceph-deploy mon create-initial

完成上述操作后,当前目录里应该会出现这些密钥环:

  • {cluster-name}.client.admin.keyring
  • {cluster-name}.bootstrap-osd.keyring
  • {cluster-name}.bootstrap-mds.keyring
  • {cluster-name}.bootstrap-rgw.keyring

Note

只有在安装 Hammer 或更高版时才会创建 bootstrap-rgw 密钥环。

Note

如果此步失败并输出类似于如下信息 “Unable to find /etc/ceph/ceph.client.admin.keyring”,请确认 ceph.conf 中为 monitor 指定的 IP 是 Public IP,而不是 Private IP。

  • 添加两个 OSD 。为了快速地安装,这篇快速入门把目录而非整个硬盘用于 OSD 守护进程。如何为 OSD 及其日志使用独立硬盘或分区,请参考 ceph-deploy osd 。登录到 Ceph 节点、并给 OSD 守护进程创建一个目录。
  1. ssh node2
  2. sudo mkdir /var/local/osd0
  3. exit
  4.  
  5. ssh node3
  6. sudo mkdir /var/local/osd1
  7. exit

然后,从管理节点执行 ceph-deploy 来准备 OSD 。

  1. ceph-deploy osd prepare {ceph-node}:/path/to/directory

例如:

  1. ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1

最后,激活 OSD 。

  1. ceph-deploy osd activate {ceph-node}:/path/to/directory

例如:

  1. ceph-deploy osd activate node2:/var/local/osd0 node3:/var/local/osd1
  • 用 ceph-deploy 把配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点,这样你每次执行 Ceph 命令行时就无需指定 monitor 地址和 ceph.client.admin.keyring 了。
  1. ceph-deploy admin {admin-node} {ceph-node}

例如:

  1. ceph-deploy admin admin-node node1 node2 node3

ceph-deploy 和本地管理主机( admin-node )通信时,必须通过主机名可达。必要时可修改 /etc/hosts ,加入管理主机的名字。

  • 确保你对 ceph.client.admin.keyring 有正确的操作权限。
  1. sudo chmod +r /etc/ceph/ceph.client.admin.keyring
  • 检查集群的健康状况。
  1. ceph health

等 peering 完成后,集群应该达到 active+clean 状态。

操作集群

ceph-deploy 部署完成后它会自动启动集群。要在 Debian/Ubuntu 发行版下操作集群守护进程,参见用 Upstart 运行 Ceph ;要在 CentOS 、 Red Hat 、 Fedora 和 SLES 下操作集群守护进程,参见用 sysvinit 运行 Ceph

关于 peering 和集群健康状况请参见监控集群;关于 OSD 守护进程和归置组( placement group )健康状况参见监控 OSD 和归置组;关于用户管理请参见用户管理

Ceph 集群部署完成后,你可以尝试一下管理功能、 rados 对象存储命令,之后可以继续快速入门手册,了解 Ceph 块设备、 Ceph 文件系统和 Ceph 对象网关。

扩展集群(扩容)

一个基本的集群启动并开始运行后,下一步就是扩展集群。在 node1 上添加一个 OSD 守护进程和一个元数据服务器。然后分别在 node2node3 上添加 Ceph Monitor ,以形成 Monitors 的法定人数。

存储集群快速入门 - 图2

添加 OSD

你运行的这个三节点集群只是用于演示的,把 OSD 添加到 monitor 节点就行。

  1. ssh node1
  2. sudo mkdir /var/local/osd2
  3. exit

然后,从 ceph-deploy 节点准备 OSD 。

  1. ceph-deploy osd prepare {ceph-node}:/path/to/directory

例如:

  1. ceph-deploy osd prepare node1:/var/local/osd2

最后,激活 OSD 。

  1. ceph-deploy osd activate {ceph-node}:/path/to/directory

例如:

  1. ceph-deploy osd activate node1:/var/local/osd2

一旦你新加了 OSD , Ceph 集群就开始重均衡,把归置组迁移到新 OSD 。可以用下面的 ceph 命令观察此过程:

  1. ceph -w

你应该能看到归置组状态从 active+clean 变为 active ,还有一些降级的对象;迁移完成后又会回到 active+clean 状态( Control-C 退出)。

添加元数据服务器

至少需要一个元数据服务器才能使用 CephFS ,执行下列命令创建元数据服务器:

  1. ceph-deploy mds create {ceph-node}

例如:

  1. ceph-deploy mds create node1

Note

当前生产环境下的 Ceph 只能运行一个元数据服务器。你可以配置多个,但现在我们还不会为多个元数据服务器的集群提供商业支持。

添加 RGW 例程

要使用 Ceph 的 Ceph 对象网关组件,必须部署 RGW 例程。用下列方法创建新 RGW 例程:

  1. ceph-deploy rgw create {gateway-node}

例如:

  1. ceph-deploy rgw create node1

Note

这个功能是从 Hammer 版和 ceph-deploy v1.5.23 才开始有的。

RGW 例程默认会监听 7480 端口,可以更改该节点 ceph.conf 内与 RGW 相关的配置,如下:

  1. [client]
  2. rgw frontends = civetweb port=80

用的是 IPv6 地址的话:

  1. [client]
  2. rgw frontends = civetweb port=[::]:80

添加 Monitors

Ceph 存储集群需要至少一个 Monitor 才能运行。为达到高可用,典型的 Ceph 存储集群会运行多个 Monitors,这样在单个 Monitor 失败时不会影响 Ceph 存储集群的可用性。Ceph 使用 PASOX 算法,此算法要求有多半 monitors(即 1 、 2:3 、 3:4 、 3:5 、 4:6 等 )形成法定人数。

新增两个监视器到 Ceph 集群。

  1. ceph-deploy mon add {ceph-node}

例如:

  1. ceph-deploy mon add node2 node3

新增 Monitor 后,Ceph 会自动开始同步并形成法定人数。你可以用下面的命令检查法定人数状态:

  1. ceph quorum_status --format json-pretty

Tip

当你的 Ceph 集群运行着多个 monitor 时,各 monitor 主机上都应该配置 NTP ,而且要确保这些 monitor 位于 NTP 服务的同一级。

存入/检出对象数据

要把对象存入 Ceph 存储集群,客户端必须做到:

  • 指定对象名
  • 指定存储池Ceph 客户端检出最新集群运行图,用 CRUSH 算法计算出如何把对象映射到归置组,然后动态地计算如何把归置组分配到 OSD 。要定位对象,只需要对象名和存储池名字即可,例如:
  1. ceph osd map {poolname} {object-name}

随着集群的运行,对象位置可能会动态改变。 Ceph 有动态均衡机制,无需手动干预即可完成。