B.2. 手动安装 Red Hat Ceph Storage
红帽不支持或测试手动部署的集群的升级。因此,红帽建议使用 Ansible 来使用 Red Hat Ceph Storage 4 部署新集群。详情请查看 第 5 章 使用 Ansible 安装 Red Hat Ceph Storage。
您可以使用 Yum 等命令行实用程序升级手动部署的集群,但红帽不支持或测试这种方法。
所有 Ceph 集群需要至少一个 monitor,并且至少与集群中存储的对象副本数量相同。红帽建议在生产环境中使用三个监视器,至少三个对象存储设备 (OSD)。
启动初始监控器是部署 Ceph 存储集群的第一步。Ceph 监控部署还为整个集群设置重要标准,例如:
- 池的副本数
- 每个 OSD 的 PG 数量
- 心跳间隔
- 任何身份验证要求
默认情况下会设置其中大多数值,因此为生产环境设置集群时了解这些值非常有用。
使用命令行界面安装 Ceph 存储集群涉及以下步骤:
监控 Bootstrapping
引导 monitor 和扩展 Ceph 存储集群需要以下数据:
- 唯一标识符
-
文件系统标识符 (
fsid
) 是集群的唯一标识符。fsid
最初在 Ceph 存储集群主要用于 Ceph 文件系统时使用。Ceph 现在也支持原生接口、块设备和对象存储网关接口,因此fsid
可能会有一些问题。 - Monitor 名称
-
集群中的每一个 Monitor 实例都有唯一的名称。在常见做法中,Ceph monitor 名称是节点名称。红帽建议每个节点一个 Ceph 监控器,而不与 Ceph 监控守护进程共同定位 Ceph OSD 守护进程。要获得较短的节点名称,请使用
hostname -s
命令。 - Monitor Map
启动初始 Monitor 要求您生成 Monitor Map。Monitor map 需要:
-
文件系统识别符 (
fsid
) -
使用集群名称或
ceph
的默认集群名称 - 至少一个主机名及其 IP 地址。
-
文件系统识别符 (
- 监控密钥环
- Monitor 使用 secret 密钥相互通信。您必须使用 Monitor secret 密钥生成密钥环,并在引导初始 Monitor 时提供密钥环。
- 管理员密钥环
-
要使用
ceph
命令行界面实用程序,请创建client.admin
用户并生成其密钥环。此外,您必须将client.admin
用户添加到 monitor 密钥环中。
强制要求不表示创建 Ceph 配置文件。但是,作为一种最佳实践,红帽建议创建一个 Ceph 配置文件并使用 fsid
填充它的数据,mon initial members
和 mon host
是最小设置。
您还可以在运行时获取和设置所有 Monitor 设置。但是,Ceph 配置文件可能仅包含覆盖默认值的设置。当您向 Ceph 配置文件添加设置时,这些设置将覆盖默认设置。在 Ceph 配置文件中维护这些设置可以更加轻松地维护集群。
要引导初始 Monitor,请执行以下步骤:
启用 Red Hat Ceph Storage 4 Monitor 存储库:
[root@monitor ~]# subscription-manager repos --enable=rhceph-4-mon-for-rhel-8-x86_64-rpms
在初始监控节点上,以
root
用户身份安装ceph-mon
软件包:# yum install ceph-mon
以
root
用户身份,在/etc/ceph/
目录中创建 Ceph 配置文件。# touch /etc/ceph/ceph.conf
以
root
用户身份,为集群生成唯一标识符,并将唯一标识符添加到 Ceph 配置文件的[global]
部分:# echo "[global]" > /etc/ceph/ceph.conf # echo "fsid = `uuidgen`" >> /etc/ceph/ceph.conf
查看当前的 Ceph 配置文件:
$ cat /etc/ceph/ceph.conf [global] fsid = a7f64266-0894-4f1e-a635-d0aeaca0e993
以
root
用户身份,将初始 monitor 添加到 Ceph 配置文件:语法
# echo "mon initial members = <monitor_host_name>[,<monitor_host_name>]" >> /etc/ceph/ceph.conf
示例
# echo "mon initial members = node1" >> /etc/ceph/ceph.conf
以
root
用户身份,将初始 monitor 的 IP 地址添加到 Ceph 配置文件:语法
# echo "mon host = <ip-address>[,<ip-address>]" >> /etc/ceph/ceph.conf
示例
# echo "mon host = 192.168.0.120" >> /etc/ceph/ceph.conf
注意要使用 IPv6 地址,请将
ms bind ipv6
选项设置为true
。详情请参阅 Red Hat Ceph Storage 4 配置指南中的 绑定"一节。以
root
用户身份,为集群创建密钥环并生成 monitor secret 密钥:# ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *' creating /tmp/ceph.mon.keyring
以
root
身份生成管理员密钥环,生成ceph.client.admin.keyring
用户,并将该用户添加到密钥环中:语法
# ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon '<capabilites>' --cap osd '<capabilites>' --cap mds '<capabilites>'
示例
# ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow' creating /etc/ceph/ceph.client.admin.keyring
以
root
用户身份,将ceph.client.admin.keyring
密钥添加到ceph.mon.keyring
中:# ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring importing contents of /etc/ceph/ceph.client.admin.keyring into /tmp/ceph.mon.keyring
生成 Monitor map。使用初始 monitor 的节点名称、IP 地址和
fsid
指定,并将其保存为/tmp/monmap
:语法
$ monmaptool --create --add <monitor_host_name> <ip-address> --fsid <uuid> /tmp/monmap
示例
$ monmaptool --create --add node1 192.168.0.120 --fsid a7f64266-0894-4f1e-a635-d0aeaca0e993 /tmp/monmap monmaptool: monmap file /tmp/monmap monmaptool: set fsid to a7f64266-0894-4f1e-a635-d0aeaca0e993 monmaptool: writing epoch 0 to /tmp/monmap (1 monitors)
作为初始监控节点上的
root 用户
,创建一个默认数据目录:语法
# mkdir /var/lib/ceph/mon/ceph-<monitor_host_name>
示例
# mkdir /var/lib/ceph/mon/ceph-node1
以
root
用户身份,使用 monitor 映射和密钥环填充初始 monitor 守护进程:语法
# ceph-mon --mkfs -i <monitor_host_name> --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
示例
# ceph-mon --mkfs -i node1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring ceph-mon: set fsid to a7f64266-0894-4f1e-a635-d0aeaca0e993 ceph-mon: created monfs at /var/lib/ceph/mon/ceph-node1 for mon.node1
查看当前的 Ceph 配置文件:
# cat /etc/ceph/ceph.conf [global] fsid = a7f64266-0894-4f1e-a635-d0aeaca0e993 mon_initial_members = node1 mon_host = 192.168.0.120
有关各种 Ceph 配置设置的更多详细信息,请参见 Red Hat Ceph Storage 4 配置指南 。以下 Ceph 配置文件示例列出了一些最常见的配置设置:
示例
[global] fsid = <cluster-id> mon initial members = <monitor_host_name>[, <monitor_host_name>] 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>
以
root
用户身份,创建done
文件:语法
# touch /var/lib/ceph/mon/ceph-<monitor_host_name>/done
示例
# touch /var/lib/ceph/mon/ceph-node1/done
以
root
用户身份,更新新创建的目录和文件的所有者和组权限:语法
# chown -R <owner>:<group> <path_to_directory>
示例
# chown -R ceph:ceph /var/lib/ceph/mon # chown -R ceph:ceph /var/log/ceph # chown -R ceph:ceph /var/run/ceph # chown ceph:ceph /etc/ceph/ceph.client.admin.keyring # chown ceph:ceph /etc/ceph/ceph.conf # chown ceph:ceph /etc/ceph/rbdmap
注意如果 Ceph 监控节点与 OpenStack 控制器节点在一起,则 Glance 和 Cinder 密钥环文件必须分别归
glance
和cinder
所有。例如:# ls -l /etc/ceph/ ... -rw-------. 1 glance glance 64 <date> ceph.client.glance.keyring -rw-------. 1 cinder cinder 64 <date> ceph.client.cinder.keyring ...
以
root
用户身份,在初始监控节点上启动并启用ceph-mon
进程:语法
# systemctl enable ceph-mon.target # systemctl enable ceph-mon@<monitor_host_name> # systemctl start ceph-mon@<monitor_host_name>
示例
# systemctl enable ceph-mon.target # systemctl enable ceph-mon@node1 # systemctl start ceph-mon@node1
以
root
用户身份,验证 monitor 守护进程是否正在运行:语法
# systemctl status ceph-mon@<monitor_host_name>
示例
# systemctl status ceph-mon@node1 ● ceph-mon@node1.service - Ceph cluster monitor daemon Loaded: loaded (/usr/lib/systemd/system/ceph-mon@.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2018-06-27 11:31:30 PDT; 5min ago Main PID: 1017 (ceph-mon) CGroup: /system.slice/system-ceph\x2dmon.slice/ceph-mon@node1.service └─1017 /usr/bin/ceph-mon -f --cluster ceph --id node1 --setuser ceph --setgroup ceph Jun 27 11:31:30 node1 systemd[1]: Started Ceph cluster monitor daemon. Jun 27 11:31:30 node1 systemd[1]: Starting Ceph cluster monitor daemon...
要将更多 Red Hat Ceph Storage Monitor 添加到存储集群中,请参阅 Red Hat Ceph Storage 4 管理指南中的添加 Monitor 部分。
OSD Bootstrapping
运行初始监控器后,您可以开始添加对象存储设备 (OSD)。直到有足够的 OSD 来处理对象的副本数时,您的集群才会达到 active + clean
状态。
对象的默认副本数为三个。至少需要三个 OSD 节点:但是,如果您只需要一个对象的两个副本,因此仅添加两个 OSD 节点,然后更新 Ceph 配置文件中的 osd pool default size
和 osd pool default min size
设置。
如需了解更多详细信息,请参阅 Red Hat Ceph Storage 4 配置指南中的OSD 配置参考一节。
在引导初始监控器后,集群具有默认的 CRUSH map。但是,CRUSH map 没有任何 Ceph OSD 守护进程映射到 Ceph 节点。
要添加 OSD 到集群并更新默认的 CRUSH map,请在每个 OSD 节点上执行以下内容:
启用 Red Hat Ceph Storage 4 OSD 存储库:
[root@osd ~]# subscription-manager repos --enable=rhceph-4-osd-for-rhel-8-x86_64-rpms
以
root
用户身份,在 Ceph OSD 节点上安装ceph-osd
软件包:# yum install ceph-osd
将 Ceph 配置文件和管理密钥环文件从初始 Monitor 节点复制到 OSD 节点:
语法
# scp <user_name>@<monitor_host_name>:<path_on_remote_system> <path_to_local_file>
示例
# scp root@node1:/etc/ceph/ceph.conf /etc/ceph # scp root@node1:/etc/ceph/ceph.client.admin.keyring /etc/ceph
为 OSD 生成通用唯一标识符 (UUID):
$ uuidgen b367c360-b364-4b1d-8fc6-09408a9cda7a
以
root
用户身份,创建 OSD 实例:语法
# ceph osd create <uuid> [<osd_id>]
示例
# ceph osd create b367c360-b364-4b1d-8fc6-09408a9cda7a 0
注意此命令输出后续步骤所需的 OSD 编号标识符。
以
root
用户身份,为新 OSD 创建默认目录:语法
# mkdir /var/lib/ceph/osd/ceph-<osd_id>
示例
# mkdir /var/lib/ceph/osd/ceph-0
以
root
用户身份,准备好将驱动器用作 OSD,并将它挂载到您刚才创建的目录中。为 Ceph 数据和日志创建一个分区。日志和数据分区可以位于同一磁盘上。这个示例使用 15 GB 磁盘:语法
# parted <path_to_disk> mklabel gpt # parted <path_to_disk> mkpart primary 1 10000 # mkfs -t <fstype> <path_to_partition> # mount -o noatime <path_to_partition> /var/lib/ceph/osd/ceph-<osd_id> # echo "<path_to_partition> /var/lib/ceph/osd/ceph-<osd_id> xfs defaults,noatime 1 2" >> /etc/fstab
示例
# parted /dev/sdb mklabel gpt # parted /dev/sdb mkpart primary 1 10000 # parted /dev/sdb mkpart primary 10001 15000 # mkfs -t xfs /dev/sdb1 # mount -o noatime /dev/sdb1 /var/lib/ceph/osd/ceph-0 # echo "/dev/sdb1 /var/lib/ceph/osd/ceph-0 xfs defaults,noatime 1 2" >> /etc/fstab
以
root
用户身份,初始化 OSD 数据目录:语法
# ceph-osd -i <osd_id> --mkfs --mkkey --osd-uuid <uuid>
示例
# ceph-osd -i 0 --mkfs --mkkey --osd-uuid b367c360-b364-4b1d-8fc6-09408a9cda7a ... auth: error reading file: /var/lib/ceph/osd/ceph-0/keyring: can't open /var/lib/ceph/osd/ceph-0/keyring: (2) No such file or directory ... created new key in keyring /var/lib/ceph/osd/ceph-0/keyring
以
root
身份,注册 OSD 身份验证密钥。语法
# ceph auth add osd.<osd_id> osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-<osd_id>/keyring
示例
# ceph auth add osd.0 osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-0/keyring added key for osd.0
以
root
用户身份,将 OSD 节点添加到 CRUSH map:语法
# ceph osd crush add-bucket <host_name> host
示例
# ceph osd crush add-bucket node2 host
以
root
用户身份,将 OSD 节点放在default
CRUSH 树下:语法
# ceph osd crush move <host_name> root=default
示例
# ceph osd crush move node2 root=default
以
root
用户身份,将 OSD 磁盘添加到 CRUSH map语法
# ceph osd crush add osd.<osd_id> <weight> [<bucket_type>=<bucket-name> ...]
示例
# ceph osd crush add osd.0 1.0 host=node2 add item id 0 name 'osd.0' weight 1 at location {host=node2} to crush map
注意您也可以解译 CRUSH map,并将 OSD 添加到设备列表中。将 OSD 节点添加为 bucket,然后将设备添加为 OSD 节点中的项目,为 OSD 分配一个权重,重新编译 CRUSH map,并且设置 CRUSH map。如需了解更多详细信息,请参阅 Red Hat Ceph Storage 4 的存储策略指南中的编辑 CRUSH map 部分。
以
root
用户身份,更新新创建的目录和文件的所有者和组权限:语法
# chown -R <owner>:<group> <path_to_directory>
示例
# chown -R ceph:ceph /var/lib/ceph/osd # chown -R ceph:ceph /var/log/ceph # chown -R ceph:ceph /var/run/ceph # chown -R ceph:ceph /etc/ceph
OSD 节点位于 Ceph 存储集群配置中。不过,OSD 守护进程为
down
和in
。新 OSD 的状态必须为up
后才能开始接收数据。以root
用户身份,启用并启动 OSD 过程:语法
# systemctl enable ceph-osd.target # systemctl enable ceph-osd@<osd_id> # systemctl start ceph-osd@<osd_id>
示例
# systemctl enable ceph-osd.target # systemctl enable ceph-osd@0 # systemctl start ceph-osd@0
启动 OSD 守护进程后,它就为
up
和in
。
现在,您已启动并运行 Monitor 和一些 OSD。您可以执行以下命令来观察放置组对等点:
$ ceph -w
要查看 OSD 树,请执行以下命令:
$ ceph osd tree
示例
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY -1 2 root default -2 2 host node2 0 1 osd.0 up 1 1 -3 1 host node3 1 1 osd.1 up 1 1
若要通过添加新 OSD 到存储集群来扩展存储容量,请参阅 Red Hat Ceph Storage 4 管理指南中的添加 OSD 部分。