注意
本文档适用于 Ceph 开发版本。
手动部署
所有 Ceph 集群至少需要一个监控节点,并且至少需要与集群中存储的对象副本数量相同的 OSD。引导初始监控节点是部署 Ceph 存储集群的第一步。监控节点的部署也为整个集群设定了重要标准,例如池的副本数量、每个 OSD 的放置组数量、心跳间隔、是否需要身份验证等。这些值中的大多数默认设置,因此在为生产环境设置集群时了解它们很有用。
我们将设置一个集群,使用mon-node1
作为监控节点,并osd-node1
和osd-node2
作为 OSD 节点。
监控节点引导
引导一个监控节点(理论上是一个 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 地址。监控密钥环:监控节点通过密钥进行通信。您必须生成一个包含监控密钥的密钥环,并在引导初始监控节点时提供它。
管理员密钥环:要使用
ceph
CLI 工具,您必须有一个client.admin
用户。因此,您必须生成管理员用户和密钥环,并且您还必须将client.admin
用户添加到监控密钥环。
上述要求并不意味着创建 Ceph 配置文件。但是,作为一种最佳实践,我们建议创建 Ceph 配置文件并填充它fsid
,mon initial members
和mon host
设置。
您也可以在运行时获取和设置所有监控设置。但是,Ceph 配置文件可能只包含覆盖默认值的设置。当您向 Ceph 配置文件添加设置时,这些设置会覆盖默认设置。将设置维护在 Ceph 配置文件中可以使维护您的集群变得更容易。
程序如下:
登录初始监控节点:
ssh {hostname}
例如:
ssh mon-node1
确保您有一个用于 Ceph 配置文件的目录。默认情况下,Ceph 使用
/etc/ceph
。当您安装ceph
时,安装程序将自动创建/etc/ceph
目录。ls /etc/ceph
创建 Ceph 配置文件。默认情况下,Ceph 使用
ceph.conf
,其中ceph
反映集群名称。向配置文件添加包含 “[global]” 的行。sudo vim /etc/ceph/ceph.conf
为您的集群生成一个唯一 ID(即,
fsid
)。uuidgen
将唯一 ID 添加到您的 Ceph 配置文件。
fsid = {UUID}
例如:
fsid = a7f64266-0894-4f1e-a635-d0aeaca0e993
将初始监控节点添加到您的 Ceph 配置文件。
mon_initial_members = {hostname}[,{hostname}]
例如:
mon_initial_members = mon-node1
将初始监控节点的 IP 地址添加到您的 Ceph 配置文件并保存文件。
mon_host = {ip-address}[,{ip-address}]
例如:
mon_host = 192.168.0.1
注意:您可以使用 IPv6 地址而不是 IPv4 地址,但您必须设置
ms_bind_ipv6
totrue
。有关网络配置的详细信息,请参阅网络配置参考。为您的集群创建密钥环并生成监控密钥。
sudo ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
生成管理员密钥环,生成
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 *'
生成 bootstrap-osd 密钥环,生成
client.bootstrap-osd
用户并将用户添加到密钥环。sudo ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'
将生成的密钥添加到
ceph.mon.keyring
.sudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring sudo ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
更改所有者
ceph.mon.keyring
.sudo chown ceph:ceph /tmp/ceph.mon.keyring
使用主机名生成监控映射。保存为
/tmp/monmap
:monmaptool --create --add {hostname} {ip-address} --fsid {uuid} /tmp/monmap
例如:
monmaptool --create --add mon-node1 192.168.0.1 --fsid a7f64266-0894-4f1e-a635-d0aeaca0e993 /tmp/monmap
在监控主机上创建默认数据目录(或目录)。
sudo mkdir /var/lib/ceph/mon/{cluster-name}-{hostname}
例如:
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-mon-node1
请参阅监控配置参考 - 数据 for details.
用监控映射和密钥环填充监控守护进程。
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 mon-node1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
考虑 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_pool_default_size = {n} # Write an object n times. osd_pool_default_min_size = {n} # Allow writing n copies in a degraded state. osd_pool_default_pg_num = {n} osd_crush_chooseleaf_type = {n}
在前面的示例中,配置文件的
[global]
部分可能如下所示:[global] fsid = a7f64266-0894-4f1e-a635-d0aeaca0e993 mon_initial_members = mon-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_pool_default_size = 3 osd_pool_default_min_size = 2 osd_pool_default_pg_num = 333 osd_crush_chooseleaf_type = 1
启动监控节点。
使用 systemd 启动服务:
sudo systemctl start ceph-mon@mon-node1
确保为 ceph-mon 打开防火墙端口。
使用 firewalld 打开端口:
sudo firewall-cmd --zone=public --add-service=ceph-mon sudo firewall-cmd --zone=public --add-service=ceph-mon --permanent
验证监控节点是否正在运行。
sudo ceph -s
您应该看到输出,表明您启动的监控节点正在运行,并且应该看到健康错误,表明放置组处于不活动状态。它应该看起来像这样:
cluster: id: a7f64266-0894-4f1e-a635-d0aeaca0e993 health: HEALTH_OK services: mon: 1 daemons, quorum mon-node1 mgr: mon-node1(active) osd: 0 osds: 0 up, 0 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 bytes usage: 0 kB used, 0 kB / 0 kB avail pgs:
注意:一旦您添加了 OSD 并启动它们,放置组健康错误应该消失。请参阅添加 OSD for details.
管理员守护进程配置
在您运行 ceph-mon 守护进程的每个节点上,您还应该设置 ceph-mgr 守护进程。
添加 OSD
在您启动初始监控节点后,您应该添加 OSD。直到您有足够的 OSD 来处理对象副本的数量(例如,active + clean
状态。在引导监控节点后,您的集群有一个默认的 CRUSH 映射;但是,CRUSH 映射没有任何 Ceph OSD 守护进程映射到 Ceph 节点。osd_pool_default_size = 2
至少需要两个 OSD),您的集群才能达到
简短形式
Ceph 提供了ceph-volume
工具,该工具可以准备逻辑卷、磁盘或分区以用于 Ceph。该ceph-volume
工具通过递增索引创建 OSD ID。此外,ceph-volume
将新的 OSD 添加到主机下的 CRUSH 映射中。执行ceph-volume -h
获取 CLI 详细信息。ceph-volume
工具自动执行长形式 below. To
create the first two OSDs with the short form procedure, execute the following for each OSD:
创建 OSD。
copy /var/lib/ceph/bootstrap-osd/ceph.keyring from monitor node (mon-node1) to /var/lib/ceph/bootstrap-osd/ceph.keyring on osd node (osd-node1) ssh {osd node} sudo ceph-volume lvm create --data {data-path}
例如:
scp -3 root@mon-node1:/var/lib/ceph/bootstrap-osd/ceph.keyring root@osd-node1:/var/lib/ceph/bootstrap-osd/ceph.keyring ssh osd-node1 sudo ceph-volume lvm create --data /dev/hdd1
或者,创建过程可以分成两个阶段(准备和激活):
准备 OSD。
ssh {osd node} sudo ceph-volume lvm prepare --data {data-path} {data-path}
例如:
ssh osd-node1 sudo ceph-volume lvm prepare --data /dev/hdd1
准备完成后,需要准备 OSD 的
ID
和FSID
以进行激活。这些可以通过在当前服务器中列出 OSD 来获取:sudo ceph-volume lvm list
激活 OSD:
sudo ceph-volume lvm activate {ID} {FSID}
例如:
sudo ceph-volume lvm activate 0 a7f64266-0894-4f1e-a635-d0aeaca0e993
长形式
没有辅助工具的帮助,使用以下程序创建 OSD 并将其添加到集群和 CRUSH 映射中。要使用长形式程序创建第一个两个 OSD,请为每个 OSD 执行以下步骤。
Note
此程序不描述在 dm-crypt 上的部署,使用 dm-crypt 的“锁箱”。
连接到 OSD 主机并成为 root。
ssh {node-name} sudo bash
为 OSD 生成一个 UUID。
UUID=$(uuidgen)
为 OSD 生成一个 cephx 密钥。
OSD_SECRET=$(ceph-authtool --gen-print-key)
创建 OSD。请注意,如果需要重用以前销毁的 OSD ID,可以提供 OSD ID 作为
ceph osd new
的附加参数。我们假设client.bootstrap-osd
密钥存在于机器上。或者,您可以在存在该密钥的不同主机上作为client.admin
执行此命令。:ID=$(echo "{\"cephx_secret\": \"$OSD_SECRET\"}" | \ ceph osd new $UUID -i - \ -n client.bootstrap-osd -k /var/lib/ceph/bootstrap-osd/ceph.keyring)
还可以在 JSON 中包含一个
crush_device_class
属性来设置一个初始类,而不是默认类(ssd
或hdd
基于自动检测的设备类型)。在新的 OSD 上创建默认目录。
mkdir /var/lib/ceph/osd/ceph-$ID
如果 OSD 不是用于操作系统驱动器,请准备它以用于 Ceph,并将其挂载到您刚刚创建的目录。
mkfs.xfs /dev/{DEV} mount /dev/{DEV} /var/lib/ceph/osd/ceph-$ID
将密钥写入 OSD 密钥环文件。
ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-$ID/keyring \ --name osd.$ID --add-key $OSD_SECRET
初始化 OSD 数据目录。
ceph-osd -i $ID --mkfs --osd-uuid $UUID
修复所有权。
chown -R ceph:ceph /var/lib/ceph/osd/ceph-$ID
将 OSD 添加到 Ceph 后,OSD 位于您的配置中。但是,它还没有运行。在它开始接收数据之前,您必须启动新的 OSD。
对于现代 systemd 发行版:
systemctl enable ceph-osd@$ID systemctl start ceph-osd@$ID
例如:
systemctl enable ceph-osd@12 systemctl start ceph-osd@12
添加 MDS
在以下说明中,{id}
是一个任意名称,例如机器的主机名。
创建 mds 数据目录。:
mkdir -p /var/lib/ceph/mds/{cluster-name}-{id}
创建密钥环。:
ceph-authtool --create-keyring /var/lib/ceph/mds/{cluster-name}-{id}/keyring --gen-key -n mds.{id}
导入密钥环并设置 caps。:
ceph auth add mds.{id} osd "allow rwx" mds "allow *" mon "allow profile mds" -i /var/lib/ceph/mds/{cluster}-{id}/keyring
添加到 ceph.conf。:
[mds.{id}] host = {id}
使用手动方式启动守护进程。:
ceph-mds --cluster {cluster-name} -i {id} -m {mon-hostname}:{mon-port} [-f]
使用 ceph.conf 条目正确启动守护进程。:
service ceph start
如果启动守护进程出现此错误:
mds.-1.0 ERROR: failed to authenticate: (22) Invalid argument
那么请确保您在 ceph.conf 的全局部分中没有设置密钥环;将其移动到客户端部分;或者添加特定于此 mds 守护进程的密钥环设置。并验证您在 mds 数据目录和
ceph auth get mds.{id}
输出中看到相同的密钥。现在您已经准备好手动创建 Ceph 文件系统.
安装 RADOSGW
关于此处介绍的程序的更详细讨论,请参阅此.
在将要成为 RGW 节点的节点上安装
radosgw
软件包。从监控节点或具有管理员权限的节点运行如下形式的命令:
ceph auth get-or-create client.$(hostname -s) mon 'allow rw' osd 'allow rwx'
在其中一个 RGW 节点上,执行以下操作:
创建一个
ceph-user
-拥有的目录。例如:install -d -o ceph -g ceph /var/lib/ceph/radosgw/ceph-$(hostname -s)
进入刚刚创建的目录并创建一个
keyring
文件:touch /var/lib/ceph/radosgw/ceph-$(hostname -s)/keyring
使用类似于此命令的命令将先前
ceph auth get-or-create
步骤中的密钥放入keyring
文件中。使用您喜欢的编辑器:$EDITOR /var/lib/ceph/radosgw/ceph-$(hostname -s)/keyring
在每个 RGW 节点上重复这些步骤。
通过运行以下命令启动 RADOSGW 服务:
systemctl start ceph-radosgw@$(hostname -s).service
总结
一旦您启动了监控节点和两个 OSD,您可以通过执行以下操作来观察放置组对等:
ceph -w
要查看树,请执行以下操作:
ceph osd tree
您应该看到类似于以下内容的输出:
# id weight type name up/down reweight
-1 2 root default
-2 2 host osd-node1
0 1 osd.0 up 1
-3 1 host osd-node2
1 1 osd.1 up 1
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.