注意

本文档适用于 Ceph 开发版本。

FreeBSD 上的手动部署

这基本上是常规手动部署的副本,但包含FreeBSD的特定内容。

所有 Ceph 集群至少需要一个监控节点,并且至少需要与集群中存储的对象副本数量相同的 OSD。引导初始监控节点是部署 Ceph 存储集群的第一步。监控节点的部署也为整个集群设定了重要标准,例如池的副本数量、每个 OSD 的放置组数量、心跳间隔、是否需要身份验证等。这些值中的大多数默认设置,因此在为生产环境设置集群时了解它们很有用。

我们将设置一个集群,使用node1作为监控节点,并node2node3作为 OSD 节点。

FreeBSD 上的磁盘布局

当前实现适用于ZFS池

  • 所有Ceph数据都创建在/var/lib/ceph

  • 日志文件存放在/var/log/ceph

  • PID文件存放在/var/log/run

  • 每个OSD分配一个ZFS池,例如:

    gpart create -s GPT ada1
    gpart add -t freebsd-zfs -l osd.1 ada1
    zpool create -m /var/lib/ceph/osd/osd.1 osd.1 gpt/osd.1
    
  • 可以附加一些缓存和日志(ZIL)。

    gpart create -s GPT ada2
    gpart add -t freebsd-zfs -l osd.1-log -s 1G ada2
    zpool add osd.1 log gpt/osd.1-log
    gpart add -t freebsd-zfs -l osd.1-cache -s 10G ada2
    zpool add osd.1 log gpt/osd.1-cache
    
  • 注意:UFS2不允许大型xattribs

配置

根据FreeBSD默认设置,额外软件的部分存放在/usr/local/. 这意味着默认位置是/etc/ceph.conf. 最明智的做法是创建一个软链接/usr/local/etc/ceph/ceph.conf. Smartest thing to do is to create a softlink from /etc/cephto/usr/local/etc/ceph:

ln -s /usr/local/etc/ceph /etc/ceph

提供了一个示例文件在/usr/local/share/doc/ceph/sample.ceph.conf注意/usr/local/etc/ceph/ceph.conf大多数工具都能找到/etc/ceph/ceph.conf将有助于任何在额外工具、脚本和/或讨论列表中找到的脚本。

监控节点引导

引导一个监控节点(理论上是一个 Ceph 存储集群)需要一些东西:

  • 唯一标识符: The fsid是集群的唯一标识符,代表 Ceph 存储集群主要用于 Ceph 文件系统时代的文件系统 ID。Ceph 现在支持原生接口、块设备和对象存储网关接口,所以fsid是有点不恰当的说法。

  • 集群名称:Ceph 集群有一个集群名称,它是一个简单的字符串,不包含空格。默认的集群名称是ceph,但你也可以指定不同的集群名称。覆盖默认集群名称在您使用多个集群并且需要清楚地了解您正在使用哪个集群时特别有用。

    例如,当您在一个多站点配置中运行多个集群时,集群名称(例如,us-west, us-east)标识当前 CLI 会话的集群。注意:要在命令行界面中标识集群名称,请指定包含集群名称的Ceph配置文件(例如,ceph.conf, us-west.conf, us-east.conf,等等)。ceph --cluster {cluster-name}).

  • 监控节点名称:集群中的每个监控实例都有一个唯一名称。在常见实践中,Ceph 监控节点的名称是主机名(我们推荐每个主机一个 Ceph 监控节点,并且不要将 Ceph OSD 守护进程与 Ceph 监控节点混合)。您可以使用hostname -s.

  • 获取简短主机名。引导初始监控节点需要您生成一个监控映射。监控映射需要fsid,集群名称(或使用默认值),以及至少一个主机名及其 IP 地址。

  • 监控密钥环:监控节点通过密钥进行通信。您必须生成一个包含监控密钥的密钥环,并在引导初始监控节点时提供它。

  • 管理员密钥环:要使用cephCLI 工具,您必须有一个client.admin用户。因此,您必须生成管理员用户和密钥环,并且您还必须将client.admin用户添加到监控密钥环。

上述要求并不意味着创建 Ceph 配置文件。但是,作为一种最佳实践,我们建议创建 Ceph 配置文件并填充它fsidmon initial membersmon host设置。

您也可以在运行时获取和设置所有监控设置。但是,Ceph 配置文件可能只包含覆盖默认值的设置。当您向 Ceph 配置文件添加设置时,这些设置会覆盖默认设置。将设置维护在 Ceph 配置文件中可以使维护您的集群变得更容易。

程序如下:

  1. 登录初始监控节点:

    ssh {hostname}
    

    例如:

    ssh node1
    
  2. 确保您有一个用于 Ceph 配置文件的目录。默认情况下,Ceph 使用/etc/ceph。当您安装ceph时,安装程序将自动创建/etc/ceph目录。

    ls /etc/ceph
    
  3. 创建 Ceph 配置文件。默认情况下,Ceph 使用ceph.conf,其中ceph反映了集群名称。

    sudo vim /etc/ceph/ceph.conf
    
  4. 为您的集群生成一个唯一 ID(即,fsid)。

    uuidgen
    
  5. 将唯一 ID 添加到您的 Ceph 配置文件。

    fsid = {UUID}
    

    例如:

    fsid = a7f64266-0894-4f1e-a635-d0aeaca0e993
    
  6. 将初始监控节点添加到您的 Ceph 配置文件。

    mon initial members = {hostname}[,{hostname}]
    

    例如:

    mon initial members = node1
    
  7. 将初始监控节点的 IP 地址添加到您的 Ceph 配置文件并保存文件。

    mon host = {ip-address}[,{ip-address}]
    

    例如:

    mon host = 192.168.0.1
    

    注意:您可以使用 IPv6 地址而不是 IPv4 地址,但您必须设置ms bind ipv6totrue。有关网络配置的详细信息,请参阅网络配置参考

  8. 为您的集群创建密钥环并生成监控密钥。

    ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
    
  9. 生成管理员密钥环,生成client.admin用户并将用户添加到密钥环。

    sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
    
  10. 添加client.admin密钥到ceph.mon.keyring.

    ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
    
  11. 使用主机名生成监控映射。保存为/tmp/monmap:

    monmaptool --create --add {hostname} {ip-address} --fsid {uuid} /tmp/monmap
    

    例如:

    monmaptool --create --add node1 192.168.0.1 --fsid a7f64266-0894-4f1e-a635-d0aeaca0e993 /tmp/monmap
    
  12. 在监控主机上创建默认数据目录(或目录)。

    sudo mkdir /var/lib/ceph/mon/{cluster-name}-{hostname}
    

    例如:

    sudo mkdir /var/lib/ceph/mon/ceph-node1
    

    请参阅监控配置参考 - 数据 for details.

  13. 用监控映射和密钥环填充监控守护进程。

    sudo -u ceph ceph-mon [--cluster {cluster-name}] --mkfs -i {hostname} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
    

    例如:

    sudo -u ceph ceph-mon --mkfs -i node1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
    
  14. 考虑 Ceph 配置文件的设置。常见设置包括以下内容:

    [global]
    fsid = {cluster-id}
    mon initial members = {hostname}[, {hostname}]
    mon host = {ip-address}[, {ip-address}]
    public network = {network}[, {network}]
    cluster network = {network}[, {network}]
    auth cluster required = cephx
    auth service required = cephx
    auth client required = cephx
    osd journal size = {n}
    osd pool default size = {n}  # Write an object n times.
    osd pool default min size = {n} # Allow writing n copy in a degraded state.
    osd pool default pg num = {n}
    osd pool default pgp num = {n}
    osd crush chooseleaf type = {n}
    

    在前面的示例中,配置文件的[global]部分可能如下所示:

    [global]
    fsid = a7f64266-0894-4f1e-a635-d0aeaca0e993
    mon initial members = node1
    mon host = 192.168.0.1
    public network = 192.168.0.0/24
    auth cluster required = cephx
    auth service required = cephx
    auth client required = cephx
    osd journal size = 1024
    osd pool default size = 3
    osd pool default min size = 2
    osd pool default pg num = 333
    osd pool default pgp num = 333
    osd crush chooseleaf type = 1
    
  15. 触发done文件。

    标记监控器已创建并准备好启动:

    sudo touch /var/lib/ceph/mon/ceph-node1/done
    
  16. 对于FreeBSD,需要在配置文件中为每个监控器添加一个条目。(未来版本将移除此要求)。

    条目应如下所示:

    [mon]
        [mon.node1]
            host = node1    # this name can be resolve
    
  17. 启动监控节点。

    对于FreeBSD,我们使用rc.d初始化脚本(在Ceph中称为bsdrc):

    sudo service ceph start start mon.node1
    
    为使其生效,/etc/rc.conf也需要添加启用ceph的条目:

    cat ‘ceph_enable=”YES”’ >> /etc/rc.conf

  18. 验证Ceph是否创建了默认池。

    ceph osd lspools
    

    你应该看到类似以下的输出:

    0 data
    1 metadata
    2 rbd
    
  19. 验证监控节点是否正在运行。

    ceph -s
    

    您应该看到输出,表明您启动的监控节点正在运行,并且应该看到健康错误,表明放置组处于不活动状态。它应该看起来像这样:

    cluster a7f64266-0894-4f1e-a635-d0aeaca0e993
      health HEALTH_ERR 192 pgs stuck inactive; 192 pgs stuck unclean; no osds
      monmap e1: 1 mons at {node1=192.168.0.1:6789/0}, election epoch 1, quorum 0 node1
      osdmap e1: 0 osds: 0 up, 0 in
      pgmap v2: 192 pgs, 3 pools, 0 bytes data, 0 objects
         0 kB used, 0 kB / 0 kB avail
         192 creating
    

    注意:一旦你添加并启动OSD,放置组健康错误应该会消失。详情请见下一节。

添加 OSD

在您启动初始监控节点后,您应该添加 OSD。直到您有足够的 OSD 来处理对象副本的数量(例如,active + clean状态。在引导监控节点后,您的集群有一个默认的 CRUSH 映射;但是,CRUSH 映射没有任何 Ceph OSD 守护进程映射到 Ceph 节点。osd pool default size = 2至少需要两个 OSD),您的集群才能达到

长形式

没有任何辅助工具的帮助下,通过以下步骤创建OSD并将其添加到集群和CRUSH映射中。要使用长格式步骤创建前两个OSD,请在node2node3:

  1. 连接到OSD主机。

    ssh {node-name}
    
  2. 为 OSD 生成一个 UUID。

    uuidgen
    
  3. 创建OSD。如果未给出UUID,它将在OSD启动时自动设置。以下命令将输出OSD编号,你需要在后续步骤中使用它。

    ceph osd create [{uuid} [{id}]]
    
  4. 在新的 OSD 上创建默认目录。

    ssh {new-osd-host}
    sudo mkdir /var/lib/ceph/osd/{cluster-name}-{osd-number}
    

    以上是FreeBSD的ZFS说明,用于执行此操作。

  5. 如果 OSD 不是用于操作系统驱动器,请准备它以用于 Ceph,并将其挂载到您刚刚创建的目录。

  6. 初始化 OSD 数据目录。

    ssh {new-osd-host}
    sudo ceph-osd -i {osd-num} --mkfs --mkkey --osd-uuid [{uuid}]
    

    在运行ceph-osd使用--mkkey选项之前,目录必须为空。此外,ceph-osd工具需要使用--cluster option.

  7. 注册OSD认证密钥。路径中cephforceph-{osd-num}的值是$cluster-$id. 如果你的集群名称与ceph不同,请使用你的集群名称:

    sudo ceph auth add osd.{osd-num} osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/{cluster-name}-{osd-num}/keyring
    
  8. 将你的Ceph节点添加到CRUSH映射。

    ceph [--cluster {cluster-name}] osd crush add-bucket {hostname} host
    

    例如:

    ceph osd crush add-bucket node1 host
    
  9. 将Ceph节点置于根default.

    ceph osd crush move node1 root=default
    
  10. 将OSD添加到CRUSH映射,以便它开始接收数据。你也可以解编译CRUSH映射,将OSD添加到设备列表,将主机作为桶添加(如果它不在CRUSH映射中),将设备作为主机中的项添加,分配权重,重新编译并设置。

    ceph [--cluster {cluster-name}] osd crush add {id-or-name} {weight} [{bucket-type}={bucket-name} ...]
    

    例如:

    ceph osd crush add osd.0 1.0 host=node1
    
  11. 在将OSD添加到Ceph后,OSD会出现在你的配置中。但它尚未运行。OSD是downin. 你必须启动新的OSD,它才能开始接收数据。

    对于使用rc.d初始化的FreeBSD。

    在将OSD添加到ceph.conf:

    sudo service ceph start osd.{osd-num}
    

    例如:

    sudo service ceph start osd.0
    sudo service ceph start osd.1
    

    在这种情况下,为了在每次重启时允许守护进程启动,你必须创建一个空文件,如下所示:

    sudo touch /var/lib/ceph/osd/{cluster-name}-{osd-num}/bsdrc
    

    例如:

    sudo touch /var/lib/ceph/osd/ceph-0/bsdrc
    sudo touch /var/lib/ceph/osd/ceph-1/bsdrc
    

    一旦你启动OSD,它就是upin.

添加 MDS

在以下说明中,{id}是一个任意名称,例如机器的主机名。

  1. 创建 mds 数据目录。:

    mkdir -p /var/lib/ceph/mds/{cluster-name}-{id}
    
  2. 创建密钥环。:

    ceph-authtool --create-keyring /var/lib/ceph/mds/{cluster-name}-{id}/keyring --gen-key -n mds.{id}
    
  3. 导入密钥环并设置 caps。:

    ceph auth add mds.{id} osd "allow rwx" mds "allow *" mon "allow profile mds" -i /var/lib/ceph/mds/{cluster}-{id}/keyring
    
  4. 添加到 ceph.conf。:

    [mds.{id}]
    host = {id}
    
  5. 使用手动方式启动守护进程。:

    ceph-mds --cluster {cluster-name} -i {id} -m {mon-hostname}:{mon-port} [-f]
    
  6. 使用 ceph.conf 条目正确启动守护进程。:

    service ceph start
    
  7. 如果启动守护进程出现此错误:

    mds.-1.0 ERROR: failed to authenticate: (22) Invalid argument
    

    那么请确保您在 ceph.conf 的全局部分中没有设置密钥环;将其移动到客户端部分;或者添加特定于此 mds 守护进程的密钥环设置。并验证您在 mds 数据目录和ceph auth get mds.{id}输出中看到相同的密钥。

  8. 现在您已经准备好手动创建 Ceph 文件系统.

总结

一旦您启动了监控节点和两个 OSD,您可以通过执行以下操作来观察放置组对等:

ceph -w

要查看树,请执行以下操作:

ceph osd tree

您应该看到类似于以下内容的输出:

# id    weight  type name       up/down reweight
-1      2       root default
-2      2               host node1
0       1                       osd.0   up      1
-3      1               host node2
1       1                       osd.1   up      1

要添加(或删除)额外的监控节点,请参阅添加/删除监控节点添加/删除 OSD.

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.