2026/2/10 6:54:35
网站建设
项目流程
aspcms开源企业网站建设系统,电子商务公司经营范围有哪些,做网站的费用怎么做账,大淘客做的网站可以吗1. 前言 上表中是 Ceph 官方文档给出的 Ceph 14 系列的系统和内核推荐#xff0c;其中在centos 7、ubuntu 14.04、ubuntu 16.04、ubuntu 18.04上都做了完整的测试。本文将介绍如何在ubuntu 18.04中使用 ceph 原生命令部署一个完整的 ceph 集群#xff0c;ceph 版本为14.2.22。…1. 前言上表中是 Ceph 官方文档给出的 Ceph 14 系列的系统和内核推荐其中在centos 7、ubuntu 14.04、ubuntu 16.04、ubuntu 18.04上都做了完整的测试。本文将介绍如何在ubuntu 18.04中使用 ceph 原生命令部署一个完整的 ceph 集群ceph 版本为14.2.22。2. 准备2.1. 集群规划component name component type node ip node name ---------------------------------------------------------------------- [mon.a, mon.b, mon.c] mon 192.168.3.10 node0 [mgr.a, mgr.b, mgr.c] mgr 192.168.3.10 node0 [mds.a, mds.b, mds.c] mds 192.168.3.10 node0 [rgw.a, rgw.b, rgw.c] rgw 192.168.3.10 node0 [osd.0, osd.1, osd.2] osd 192.168.3.10 node02.2. 设置 ceph apt 源为了加快下载速度此处使用阿里云开源镜像站echodeb https://mirrors.aliyun.com/ceph/debian-nautilus/ bionic main/etc/apt/sources.list.d/ceph.list2.3. 添加 release keywget-q -O-https://mirrors.aliyun.com/ceph/keys/release.asc|apt-keyadd-2.4. 更新aptupdate2.5. 安装 cephaptinstallceph ceph-mon ceph-mgr ceph-osd ceph-mds radosgw3. 集群部署3.1. 创建 client.admin key在 Ceph 的 cephx 认证体系中client.admin 是一个预定义的特殊用户拥有对整个集群的完全访问权限它可以执行几乎所有管理操作。没有 client.admin你就没有一个默认的“root”账户来管理集群。换句话说client.admin 是部署和运维的操作入口。几乎所有 Ceph 命令行工具如 ceph, rados, rbd, cephfs 等在未指定用户时默认尝试加载 client.admin 的密钥。ceph 14.2.22 中不会自动创建 client.admin key必须手动创建。测试发现 client.admin key 必须在初始化 mon 之前就创建好否则后续不好导入到 mon 的 auth 库中导致 ceph 所有命令都无法使用。ceph-authtool /etc/ceph/keyring --create-keyring --gen-key -n client.admin\--cap monallow *\--cap osdallow *\--cap mdsallow *\--cap mgrallow *除了 client.admin key 外ceph 14.2.22 中会自动创建以下 bootstrap 系列的 keyclient.bootstrap-mds key: AQD7BW9p5/zTBRAApwYsv603jzAqC2HVZRulgwcaps:[mon]allow profile bootstrap-mds client.bootstrap-mgr key: AQD7BW9pyyPUBRAADInmsW8kdJD7RaO9P64Fgcaps:[mon]allow profile bootstrap-mgr client.bootstrap-osd key:AQD7BW9prkfUBRAAOQDCSLcQJv7KyuE7Shzscwcaps:[mon]allow profile bootstrap-osd client.bootstrap-rbd key: AQD7BW9pHm/UBRAACRWOnAmiy2l64lIWDGIwgAcaps:[mon]allow profile bootstrap-rbd client.bootstrap-rbd-mirror key:AQD7BW9po5LUBRAAQSyL0ES1DRxW9X0QdknyDQcaps:[mon]allow profile bootstrap-rbd-mirror client.bootstrap-rgw key: AQD7BW9pE7XUBRAAmG9hElRA2jb1ChRZ/gVkNQcaps:[mon]allow profile bootstrap-rgw3.2. 创建 mon在部署集群时必须先部署 monmon 是 Ceph 集群的大脑责维护集群的全局状态信息负责分发其他组件的通信密钥。所有其他组件在启动和加入集群时必须与 mon 建立通信。只有 mon 就绪并形成 quorum 后其他组件服务才能正确加入并协同工作。因此在部署时必须优先创建 mon。3.2.1. 创建 mon datamkdir-p /var/lib/ceph/mon/mon.amkdir-p /var/lib/ceph/mon/mon.bmkdir-p /var/lib/ceph/mon/mon.c3.2.2. 创建 mon keyCeph 通信机制中使用基于密钥的身份验证机制mon 之间的通信也是如此。mon key 是整个集群信任体系的起点。如果没有预先生成 mon keymon 将无法完成认证也就无法形成初始 quorum导致集群无法启动。虽然 Ceph 其他组件的密钥通常是由 mon 动态分发但是 mon 自己的密钥不能从自己获取必须在启动前静态生成。ceph-authtool /etc/ceph/keyring --gen-key -n mon. --cap monallow *因为我将所有的 key 全部写入到同一个文件中/etc/ceph/keyring所以只在第一次创建 client.admin key 的时候才使用--create-keyring参数这个参数会新建一个 keyring 文件不管这个文件之前有没有。所以在创建 mon key 的时候就不再使用--create-keyring参数。后续创建其他组件 key 的过程也同样不在使用--create-keyring参数。测试发现在创建 mon key 的时候mon name 必须是mon.不能是具体的mon.a这种形式也不能单独为每个 mon 创建 key。3.2.3. 创建 monmapmonmaptool --create --clobber --fsiduuidgen/etc/ceph/monmap monmaptool --add a192.168.3.10:50000 /etc/ceph/monmap monmaptool --add b192.168.3.10:50001 /etc/ceph/monmap monmaptool --add c192.168.3.10:50002 /etc/ceph/monmapmonmap 创建好之后可以使用monmaptool --print /etc/ceph/monmap命令来输出 monmap 内容。内容如下monmaptool: monmapfile/etc/ceph/monmap epoch0fsid 334c5c34-8214-477f-95ba-00991d868126 last_changed2026-01-17 06:57:21.606165 created2026-01-17 06:57:21.606165 min_mon_release0(unknown)0: v2:192.168.3.10:50000/0 mon.a1: v2:192.168.3.10:50001/0 mon.b2: v2:192.168.3.10:50002/0 mon.c3.2.4. 配置 ceph.conf新建/etc/ceph/ceph.conf并追加一下内容[global] fsid 334c5c34-8214-477f-95ba-00991d868126 mon host [v2:192.168.3.10:50000] [v2:192.168.3.10:50001] [v2:192.168.3.10:50002] auth cluster required cephx auth service required cephx auth client required cephx auth allow insecure global id reclaim false [mon.a] mon data /var/lib/ceph/mon/mon.a [mon.b] mon data /var/lib/ceph/mon/mon.b [mon.c] mon data /var/lib/ceph/mon/mon.c上述global配置中mon host的值必须和monmaptool --add中匹配。上述mon data是 mon data 目录这个参数必须要添加因为在后面初始化 mon data 的时候如果不指定 mon data 路径默认会使用/var/lib/ceph/mon/cluster-id。3.2.5. 初始化 mon dataceph-mon --mkfs -i a --monmap/etc/ceph/monmap --keyring/etc/ceph/keyring ceph-mon --mkfs -i b --monmap/etc/ceph/monmap --keyring/etc/ceph/keyring ceph-mon --mkfs -i c --monmap/etc/ceph/monmap --keyring/etc/ceph/keyring3.2.6. 修改 mon data 归属chown-R ceph:ceph /var/lib/ceph/mon3.2.7. 启动 monsystemctl start ceph-mona.service systemctlenableceph-mona.service systemctl start ceph-monb.service systemctlenableceph-monb.service systemctl start ceph-monc.service systemctlenableceph-monc.service至此如果 mon 正常启动ceph -s命令可以正常执行并有结果输出。ceph -s --------- cluster: id: 334c5c34-8214-477f-95ba-00991d868126 health: HEALTH_OK services: mon:3daemons, quorum a,b,c(age 2s)mgr: no daemons active osd:0osds:0up,0indata: pools:0pools,0pgs objects:0objects,0B usage:0B used,0B /0B avail pgs:如果ceph -s命令没有输出结果或者卡住了一定是部署失败了。可以在 ceph.conf 文件中global配置项添加debug ms 1打开客户端调试功能查看问题。3.3. 创建 mgr3.3.1. 创建 mgr datamkdir-p /var/lib/ceph/mgr/mgr.amkdir-p /var/lib/ceph/mgr/mgr.bmkdir-p /var/lib/ceph/mgr/mgr.c3.3.2. 配置 ceph.conf[mgr.a] mgr data /var/lib/ceph/mgr/mgr.a [mgr.b] mgr data /var/lib/ceph/mgr/mgr.b [mgr.c] mgr data /var/lib/ceph/mgr/mgr.c3.3.3. 创建 mgr keyceph-authtool /etc/ceph/keyring --gen-key -n mgr.a\--cap monallow profile mgr\--cap mdsallow *\--cap osdallow *ceph-authtool /etc/ceph/keyring --gen-key -n mgr.b\--cap monallow profile mgr\--cap mdsallow *\--cap osdallow *ceph-authtool /etc/ceph/keyring --gen-key -n mgr.c\--cap monallow profile mgr\--cap mdsallow *\--cap osdallow *3.3.4. 导入 mgr key 到 auth 库中ceph authaddmgr.a -i /etc/ceph/keyring ceph authaddmgr.b -i /etc/ceph/keyring ceph authaddmgr.c -i /etc/ceph/keyring导入 key 到 auth 库中的目的是为了执行ceph auth ls命令能够直接查看到。测试发现在使用ceph-authtool工具创建 key 的时候只有 mon 和 client 这两种类型的 key 能够自动添加到 ceph rados 对象中其他类型的 key 需要手动导入。3.3.5. 添加 mgr key 到 mgr dataceph authexportmgr.a/var/lib/ceph/mgr/mgr.a/keyring ceph authexportmgr.b/var/lib/ceph/mgr/mgr.b/keyring ceph authexportmgr.c/var/lib/ceph/mgr/mgr.c/keyring3.3.6. 修改 mgr data 目录的归属chown-R ceph:ceph /var/lib/ceph/mgr3.3.7. 启动 mgrsystemctl start ceph-mgra.service systemctlenableceph-mgra.service systemctl start ceph-mgrb.service systemctlenableceph-mgrb.service systemctl start ceph-mgrc.service systemctlenableceph-mgrc.service3.4. 创建 osdCeph 支持 2 种存储引擎filestore和bluestore。filestore 是一个过时的技术在后续版本中逐渐被 Ceph 弃用filestore 已经没有任何研究价值因此本文默认以bluestore为准。3.4.1. 创建 osd datamkdir-p /var/lib/ceph/osd/osd.0mkdir-p /var/lib/ceph/osd/osd.1mkdir-p /var/lib/ceph/osd/osd.23.4.2. 挂载 osd data 为 tmpfsmount-t tmpfs tmpfs /var/lib/ceph/osd/osd.0mount-t tmpfs tmpfs /var/lib/ceph/osd/osd.1mount-t tmpfs tmpfs /var/lib/ceph/osd/osd.23.4.3. 修改 osd block dev 归属chown-R ceph:ceph /dev/sdbchown-R ceph:ceph /dev/sdcchown-R ceph:ceph /dev/sdd3.4.4. 创建 osd blockln-snf /dev/sdb /var/lib/ceph/osd/osd.0/blockln-snf /dev/sdc /var/lib/ceph/osd/osd.1/blockln-snf /dev/sdd /var/lib/ceph/osd/osd.2/block3.4.5. 配置 osd[osd.0] osd objectstore bluestore osd data /var/lib/ceph/osd/osd.0 crush_location rootdefault hostvirtual-node0 [osd.1] osd objectstore bluestore osd data /var/lib/ceph/osd/osd.1 crush_location rootdefault hostvirtual-node1 [osd.2] osd objectstore bluestore osd data /var/lib/ceph/osd/osd.2 crush_location rootdefault hostvirtual-node2crush_location是更改 osd 的 crush 位置ceph 默认最小容灾域级别是host因为当前是在一台物理机上部署的为了后续成功创建副本 pool此时有必要更改。当然也可以在创建 pool 之前新建一个 crush rule 来自定义 crush 规则。3.4.6. 创建 osd keyceph-authtool /etc/ceph/keyring --gen-key -n osd.0\--cap monallow profile osd\--cap mgrallow profile osd\--cap osdallow *ceph-authtool /etc/ceph/keyring --gen-key -n osd.1\--cap monallow profile osd\--cap mgrallow profile osd\--cap osdallow *ceph-authtool /etc/ceph/keyring --gen-key -n osd.2\--cap monallow profile osd\--cap mgrallow profile osd\--cap osdallow *3.4.7. 导入 osd key 到 auth 库中ceph authaddosd.0 -i /etc/ceph/keyring ceph authaddosd.1 -i /etc/ceph/keyring ceph authaddosd.2 -i /etc/ceph/keyring3.4.8. 添加 osd key 到 osd dataceph authexportosd.0/var/lib/ceph/osd/osd.0/keyring ceph authexportosd.1/var/lib/ceph/osd/osd.1/keyring ceph authexportosd.2/var/lib/ceph/osd/osd.2/keyring3.4.9. 添加 osd key json 到 osd dataecho{\cephx_secret\:\ceph auth get-key osd.0\}/var/lib/ceph/osd/osd.0/keyring.jsonecho{\cephx_secret\:\ceph auth get-key osd.1\}/var/lib/ceph/osd/osd.1/keyring.jsonecho{\cephx_secret\:\ceph auth get-key osd.2\}/var/lib/ceph/osd/osd.2/keyring.json3.4.10. 创建 osd 并初始化 osd datauuiduuidgenceph osd new$uuid0-i /var/lib/ceph/osd/osd.0/keyring.json ceph-osd -i0--mkfs --osd-uuid$uuid--keyring /var/lib/ceph/osd/osd.0/keyringuuiduuidgenceph osd new$uuid1-i /var/lib/ceph/osd/osd.1/keyring.json ceph-osd -i1--mkfs --osd-uuid$uuid--keyring /var/lib/ceph/osd/osd.1/keyringuuiduuidgenceph osd new$uuid2-i /var/lib/ceph/osd/osd.2/keyring.json ceph-osd -i2--mkfs --osd-uuid$uuid--keyring /var/lib/ceph/osd/osd.2/keyring3.4.11. 修改 osd data 归属chown-R ceph:ceph /var/lib/ceph/osd3.4.12. 启动服务systemctl start ceph-osd0.service systemctlenableceph-osd0.service systemctl start ceph-osd1.service systemctlenableceph-osd1.service systemctl start ceph-osd2.service systemctlenableceph-osd2.service上述使用systemctl start ceph-osd0.service方式启动 osd 服务时会失败原因是/usr/lib/systemd/system/ceph-osd.service文件会先执行/usr/lib/ceph/ceph-osd-prestart.sh脚本在这个脚本中需要将data/var/lib/ceph/osd/${cluster:-ceph}-$id修改成实际 osd 目录data/var/lib/ceph/osd/osd.$id。以上创建 OSD 的所有过程都可以使用ceph-volume create这条命令一步完成这条命令实际上也是一步步执行上面过程之所以不使用 ceph-volume 工具主要原因是 osd data 目录没法自定义。ceph-volume 已经将 osd data 目录写死成/var/lib/ceph/osd/${cluster:-ceph}-$id。到此一个简单的 Ceph 集群已经部署完成使用ceph -s查看集群状态如下ceph -s --------- cluster: id: 334c5c34-8214-477f-95ba-00991d868126 health: HEALTH_OK services: mon:3daemons, quorum a,b,c(age 30m)mgr: a(active, since 24m), standbys: b, c osd:3osds:3up(since 9m),3in(since 9m)data: pools:0pools,0pgs objects:0objects,0B usage:3.0GiB used,12GiB /15GiB avail pgs:4. 文件存储部署4.1. 创建 mds4.1.1. 创建 mds datamkdir-p /var/lib/ceph/mds/mds.amkdir-p /var/lib/ceph/mds/mds.bmkdir-p /var/lib/ceph/mds/mds.c4.1.2. 配置 ceph.conf[mds.a] mds data /var/lib/ceph/mds/mds.a [mds.b] mds data /var/lib/ceph/mds/mds.b [mds.c] mds data /var/lib/ceph/mds/mds.c4.1.3. 创建 mds keyceph-authtool /etc/ceph/keyring --gen-key -n mds.a\--cap monallow profile mds\--cap osdallow *\--cap mdsallow\--cap mgrallow profile mdsceph-authtool /etc/ceph/keyring --gen-key -n mds.b\--cap monallow profile mds\--cap osdallow *\--cap mdsallow\--cap mgrallow profile mdsceph-authtool /etc/ceph/keyring --gen-key -n mds.c\--cap monallow profile mds\--cap osdallow *\--cap mdsallow\--cap mgrallow profile mds4.1.4. 导入 mds key 到 auth 库中ceph authaddmds.a -i /etc/ceph/keyring ceph authaddmds.b -i /etc/ceph/keyring ceph authaddmds.c -i /etc/ceph/keyring4.1.5. 添加 mds key 到 mds dataceph authexportmds.a/var/lib/ceph/mds/mds.a/keyring ceph authexportmds.b/var/lib/ceph/mds/mds.b/keyring ceph authexportmds.c/var/lib/ceph/mds/mds.c/keyring4.1.6. 修改 mds data 归属chown-R ceph:ceph /var/lib/ceph/mds4.1.7. 启动 mdssystemctl start ceph-mdsa.service systemctlenableceph-mdsa.service systemctl start ceph-mdsb.service systemctlenableceph-mdsb.service systemctl start ceph-mdsc.service systemctlenableceph-mdsc.service4.2. 创建数据池ceph osd pool create cephfs_data11其中cephfs_data是数据池的名字1 1分别表示 pg 和 pgp 的数量因为是测试所以都设置为 1。4.3. 创建元数据池ceph osd pool create cephfs_metadata11其中cephfs_metadata是元数据池的名字1 1分别表示 pg 和 pgp 的数量因为是测试所以都设置为 1。4.4. 创建文件系统ceph fs new cephfs cephfs_metadata cephfs_data其中cephfs为文件系统的名字该命令将会创建一个名为 cephfs 的文件系统文件系统的元数据将存在 cephfs_metadata 元数据池中文件系统的数据将存在 cephfs_data 数据池中。再次查看集群状态ceph -s --------- cluster: id: 334c5c34-8214-477f-95ba-00991d868126 health: HEALTH_OK services: mon:3daemons, quorum a,b,c(age 105m)mgr: a(active, since 99m), standbys: b, c mds: cephfs:1{0aup:active}2up:standby osd:3osds:3up(since 44m),3in(since 84m)data: pools:2pools,2pgs objects:22objects,2.2KiB usage:3.0GiB used,12GiB /15GiB avail pgs:2activeclean5. 对象存储部署5.1. 创建 rgw5.1.1. 创建 rgw datamkdir-p /var/lib/ceph/rgw/rgw.amkdir-p /var/lib/ceph/rgw/rgw.bmkdir-p /var/lib/ceph/rgw/rgw.c5.1.2. 配置 rgw[client.rgw.a] rgw frontends civetweb port192.168.3.10:50003 rgw data /var/lib/ceph/rgw/rgw.a [client.rgw.b] rgw frontends civetweb port192.168.3.10:50004 rgw data /var/lib/ceph/rgw/rgw.b [client.rgw.c] rgw frontends civetweb port192.168.3.10:50005 rgw data /var/lib/ceph/rgw/rgw.c上述port192.168.3.10:50003表示只启动 tcp4 端口监听。如果设置成port50003表示同时启动 tcp4 和 tcp6 端口监听。5.1.3. 创建 rgw keyceph-authtool /etc/ceph/keyring --gen-key -n client.rgw.a\--cap monallow rw\--cap osdallow rwx\--cap mgrallow rwceph-authtool /etc/ceph/keyring --gen-key -n client.rgw.b\--cap monallow rw\--cap osdallow rwx\--cap mgrallow rwceph-authtool /etc/ceph/keyring --gen-key -n client.rgw.c\--cap monallow rw\--cap osdallow rwx\--cap mgrallow rw测试发现rgw 的 name 必须是以client.为前缀。因为 ceph 中没有rgw这个类别类别只有auth, mon, osd, mds, mgr, client这几种。5.1.4. 导入 rgw key 到 auth 库中ceph authaddclient.rgw.a -i /etc/ceph/keyring ceph authaddclient.rgw.b -i /etc/ceph/keyring ceph authaddclient.rgw.c -i /etc/ceph/keyring5.1.5. 添加 rgw key 到 rgw dataceph authexportclient.rgw.a/var/lib/ceph/rgw/rgw.a/keyring ceph authexportclient.rgw.b/var/lib/ceph/rgw/rgw.b/keyring ceph authexportclient.rgw.c/var/lib/ceph/rgw/rgw.c/keyring5.1.6. 修改 rgw data 归属chown-R ceph:ceph /var/lib/ceph/rgw5.1.7. 启动 rgwsystemctl start ceph-radosgwrgw.a.service systemctlenableceph-radosgwrgw.a.service systemctl start ceph-radosgwrgw.b.service systemctlenableceph-radosgwrgw.b.service systemctl start ceph-radosgwrgw.c.service systemctlenableceph-radosgwrgw.c.service默认情况下启动 rgw 服务后会自动创建与 rgw 服务相关的 pool。再次查看集群状态ceph -s --------- cluster: id: 334c5c34-8214-477f-95ba-00991d868126 health: HEALTH_OK services: mon:3daemons, quorum a,b,c(age 106m)mgr: a(active, since 101m), standbys: b, c mds: cephfs:1{0aup:active}2up:standby osd:3osds:3up(since 46m),3in(since 85m)rgw:3daemons active(a, b, c)task status: data: pools:6pools,130pgs objects:135objects,3.4KiB usage:3.0GiB used,12GiB /15GiB avail pgs:130activeclean io: client:21KiB/s rd,0B/s wr,27op/s rd,17op/s wr6. 块存储部署6.1. 创建数据池ceph osd pool create rbd_pool11其中rbd_pool是数据池的名字1 1分别是 pg 和 pgp 的数量因为是测试集群所以都设置为 1。6.2. 创建 rbd imagerbd create --pool rbd_pool --image image1 --size1024--image-format2--image-feature layering其中rbd_pool是数据池的名字image1是镜像的名字1024是镜像的大小其他参数不变即可。上述命令将创建一个名为image1的 rbd 镜像。后续通过镜像映射操作就可以像操作磁盘一样来读写 rbd 块设备。7. 参考资料https://docs.ceph.com/en/nautilus/install/