注意
本文档适用于 Ceph 开发版本。
CephFS 快照镜像
CephFS 支持通过cephfs-mirror工具异步复制快照到远程 CephFS 文件系统。快照通过镜像快照数据,然后创建与源快照具有相同名称(对于远程文件系统上的给定目录)的远程快照来进行同步。
要求
主要(本地)和次要(远程)Ceph 集群版本应为 Pacific 或更高版本。
创建用户
首先在主要/本地集群上为cephfs-mirror守护进程创建一个 Ceph 用户。此用户需要在元数据池上具有写入能力以创建 RADOS 对象(索引对象)用于 watch/notify 操作,并在数据池上具有读取能力:
$ ceph auth get-or-create client.mirror mon 'profile cephfs-mirror' mds 'allow r' osd 'allow rw tag cephfs metadata=*, allow r tag cephfs data=*' mgr 'allow r'
为每个文件系统对等体(在次要/远程集群上)创建一个 Ceph 用户。此用户需要在 MDS 上具有完全能力(以进行快照)并在 OSD 上:
$ ceph fs authorize <fs_name> client.mirror_remote / rwps
此用户将在添加对等体时作为对等体规范的一部分提供。
启动镜像守护进程
镜像守护进程应使用systemctl(1)单元文件:
$ systemctl enable cephfs-mirror@mirror
$ systemctl start cephfs-mirror@mirror
cephfs-mirror守护进程可以在前台运行:
$ cephfs-mirror --id mirror --cluster site-a -f
Note
这里指定的用户是mirror,其创建过程在创建用户部分。
可以使用 keepalived 以活动/备用配置部署多个实例,以实现无缝故障转移。该服务可以部署为多个无状态实例,nginx 作为负载均衡器跨它们使用轮询策略。这种设置消除了单点故障,并增强了整个系统的弹性。cephfs-mirror
守护进程可以部署以实现并发同步和高可用性。镜像守护进程使用简单的M/N
政策共享同步负载,其中M
是目录的数量,N
是守护进程的数量。cephfs-mirror
daemons.
当cephadm
用于管理 Ceph 集群,cephfs-mirror
守护进程可以通过运行以下命令来部署:
ceph orch apply cephfs-mirror
要部署多个镜像守护进程,请运行以下形式的命令:
ceph orch apply cephfs-mirror --placement=<placement-spec>
例如,要在不同的主机上部署 3cephfs-mirror守护进程,请运行以下形式的命令:
$ ceph orch apply cephfs-mirror --placement="3 host1,host2,host3"
接口
The 镜像模块(管理插件)提供管理目录快照镜像的接口。这些是(主要是)围绕监控命令进行封装以管理文件系统镜像,是推荐的控制接口。
镜像模块
镜像模块负责将目录分配给镜像守护进程进行同步。可以启动多个镜像守护进程以在目录快照同步中实现并发。当镜像守护进程被启动(或终止)时,镜像模块发现修改后的镜像守护进程集合并在新集中重新平衡目录分配,从而提供高可用性。
Note
建议部署单个镜像守护进程。运行多个守护进程未经测试。
镜像支持以下文件类型:
普通文件 (-)
目录文件 (d)
符号链接文件 (l)
其他文件类型被镜像忽略。因此,它们不会在成功同步的对等体上可用。
镜像模块默认禁用。要启用镜像模块,请运行以下命令:
ceph mgr module enable mirroring
镜像模块提供一系列命令,可用于控制目录快照的镜像。要添加或删除目录,必须为给定文件系统启用镜像。要为给定文件系统启用镜像,请运行以下形式的命令:
ceph fs snapshot mirror enable <fs_name>
Note
“镜像模块”命令以fs snapshot mirror
前缀。fs
mirror
前缀的“监控命令”区分开来。使用监控命令启用镜像会导致镜像守护进程进入“失败”状态,因为没有cephfs_mirror索引对象。
要为给定文件系统禁用镜像,请运行以下形式的命令:
ceph fs snapshot mirror disable <fs_name>
启用镜像后,添加要镜像的目录对等体。对等体由<client>@<cluster>
格式指定,在本文档的其他地方称为remote_cluster_spec
。对等体在添加时会被分配一个唯一的 ID(UUID)。有关说明如何为镜像创建 Ceph 用户的说明,请参阅创建用户部分。
要添加对等体,请运行以下形式的命令:
ceph fs snapshot mirror peer_add <fs_name> <remote_cluster_spec> [<remote_fs_name>] [<remote_mon_host>] [<cephx_key>]
<remote_cluster_spec>
的格式client.<id>@<cluster_name>
.
<remote_fs_name>
是可选的,默认为<fs_name>(在远程集群上)。
要使此命令成功,远程集群的 Ceph 配置和用户密钥环必须在主要集群中可用。例如,如果在远程集群上创建了一个名为client_mirror
的用户,该用户具有对名为rwps
权限(见remote_fs
的远程文件系统创建用户)并且远程集群的名称为remote_ceph
(即远程集群配置文件在主要集群中命名为remote_ceph.conf
),请运行以下命令将远程文件系统作为对等体添加到主要文件系统primary_fs
:
ceph fs snapshot mirror peer_add primary_fs client.mirror_remote@remote_ceph remote_fs
为了避免需要在主要集群中维护远程集群配置文件和远程 ceph 用户密钥环,用户可以引导一个对等体(该对等体在主要集群的监控配置存储中存储相关的远程集群详细信息)。请参阅引导对等体部分。
The peer_add
命令支持传递远程集群监控地址和用户密钥。但是,引导对等体是添加对等体的推荐方法。
Note
目前只支持单个对等体。
要删除对等体,请运行以下形式的命令:
ceph fs snapshot mirror peer_remove <fs_name> <peer_uuid>
要列出文件系统镜像对等体,请运行以下形式的命令:
ceph fs snapshot mirror peer_list <fs_name>
要配置目录以进行镜像,请运行以下形式的命令:
ceph fs snapshot mirror add <fs_name> <path>
要列出配置的目录,请运行以下形式的命令:
ceph fs snapshot mirror ls <fs_name>
要停止镜像目录快照,请运行以下形式的命令:
ceph fs snapshot mirror remove <fs_name> <path>
只允许绝对目录路径。
路径由镜像模块规范化。这意味着/a/b/../b
等同于/a/b
。路径始终从 CephFS 文件系统根目录开始,而不是从主机系统挂载点开始。
例如:
$ mkdir -p /d0/d1/d2
$ ceph fs snapshot mirror add cephfs /d0/d1/d2
{}
$ ceph fs snapshot mirror add cephfs /d0/d1/../d1/d2
Error EEXIST: directory /d0/d1/d2 is already tracked
添加目录用于镜像后,不允许镜像子目录或祖先目录:
$ ceph fs snapshot mirror add cephfs /d0/d1
Error EINVAL: /d0/d1 is a ancestor of tracked path /d0/d1/d2
$ ceph fs snapshot mirror add cephfs /d0/d1/d2/d3
Error EINVAL: /d0/d1/d2/d3 is a subtree of tracked path /d0/d1/d2
The 镜像状态部分包含有关检查目录映射(到镜像守护进程)的命令以及检查目录分布的信息。
引导对等体
通过peer_add添加对等体需要在对等体集群配置和用户密钥环在主要集群(管理主机和运行镜像守护进程的主机)中可用。这可以通过引导并导入对等体令牌来避免。对等体引导涉及通过以下方式在对等体集群上创建引导令牌:
$ ceph fs snapshot mirror peer_bootstrap create <fs_name> <client_entity> <site-name>
例如:
$ ceph fs snapshot mirror peer_bootstrap create backup_fs client.mirror_remote site-remote
{"token": "eyJmc2lkIjogIjBkZjE3MjE3LWRmY2QtNDAzMC05MDc5LTM2Nzk4NTVkNDJlZiIsICJmaWxlc3lzdGVtIjogImJhY2t1cF9mcyIsICJ1c2VyIjogImNsaWVudC5taXJyb3JfcGVlcl9ib290c3RyYXAiLCAic2l0ZV9uYW1lIjogInNpdGUtcmVtb3RlIiwgImtleSI6ICJBUUFhcDBCZ0xtRmpOeEFBVnNyZXozai9YYUV0T2UrbUJEZlJDZz09IiwgIm1vbl9ob3N0IjogIlt2MjoxOTIuMTY4LjAuNTo0MDkxOCx2MToxOTIuMTY4LjAuNTo0MDkxOV0ifQ=="}
site-name指的是用户定义的字符串,用于标识远程文件系统。在peer_add接口的上下文中,site-name是传递的集群名称来自remote_cluster_spec.
在主要集群中通过以下方式导入引导令牌:
$ ceph fs snapshot mirror peer_bootstrap import <fs_name> <token>
例如:
$ ceph fs snapshot mirror peer_bootstrap import cephfs eyJmc2lkIjogIjBkZjE3MjE3LWRmY2QtNDAzMC05MDc5LTM2Nzk4NTVkNDJlZiIsICJmaWxlc3lzdGVtIjogImJhY2t1cF9mcyIsICJ1c2VyIjogImNsaWVudC5taXJyb3JfcGVlcl9ib290c3RyYXAiLCAic2l0ZV9uYW1lIjogInNpdGUtcmVtb3RlIiwgImtleSI6ICJBUUFhcDBCZ0xtRmpOeEFBVnNyZXozai9YYUV0T2UrbUJEZlJDZz09IiwgIm1vbl9ob3N0IjogIlt2MjoxOTIuMTY4LjAuNTo0MDkxOCx2MToxOTIuMTY4LjAuNTo0MDkxOV0ifQ==
快照镜像
要启动快照镜像,请在主要集群中为配置的目录创建快照:
$ mkdir -p /d0/d1/d2/.snap/snap1
镜像状态
CephFS 镜像模块提供mirror daemon status接口来检查镜像守护进程状态:
$ ceph fs snapshot mirror daemon status
[
{
"daemon_id": 284167,
"filesystems": [
{
"filesystem_id": 1,
"name": "a",
"directory_count": 1,
"peers": [
{
"uuid": "02117353-8cd1-44db-976b-eb20609aa160",
"remote": {
"client_name": "client.mirror_remote",
"cluster_name": "ceph",
"fs_name": "backup_fs"
},
"stats": {
"failure_count": 1,
"recovery_count": 0
}
}
]
}
]
}
]
每个镜像守护进程实例都显示一个条目,以及配置的对等体和基本统计信息。要获取更详细的统计信息,请使用管理员套接字接口,如下所述。
CephFS 镜像守护进程提供用于查询镜像状态的管理员套接字命令。要检查镜像状态的可用命令,请使用:
$ ceph --admin-daemon /path/to/mirror/daemon/admin/socket help
{
....
....
"fs mirror status cephfs@360": "get filesystem mirror status",
....
....
}
以`fs mirror status`前缀的命令提供已启用镜像文件系统的镜像状态。请注意,cephfs@360的格式为filesystem-name@filesystem-id。
此命令目前提供关于镜像状态的最少信息:
$ ceph --admin-daemon /var/run/ceph/cephfs-mirror.asok fs mirror status cephfs@360
{
"rados_inst": "192.168.0.5:0/1476644347",
"peers": {
"a2dc7784-e7a1-4723-b103-03ee8d8768f8": {
"remote": {
"client_name": "client.mirror_remote",
"cluster_name": "site-a",
"fs_name": "backup_fs"
}
}
},
"snap_dirs": {
"dir_count": 1
}
}
The Peers命令输出中的“Peers”部分显示对等体信息,包括唯一的对等体 ID(UUID)和规范。当删除现有对等体时需要对等体 ID,如Mirror Module and Interface部分。
中所述。fs mirror peer status前缀的命令提供对等体同步状态。此命令的格式为filesystem-name@filesystem-id peer-uuid:
$ ceph --admin-daemon /var/run/ceph/cephfs-mirror.asok fs mirror peer status cephfs@360 a2dc7784-e7a1-4723-b103-03ee8d8768f8
{
"/d0": {
"state": "idle",
"last_synced_snap": {
"id": 120,
"name": "snap1",
"sync_duration": 3,
"sync_time_stamp": "274900.558797s",
"sync_bytes": 52428800
},
"snaps_synced": 2,
"snaps_deleted": 0,
"snaps_renamed": 0
}
}
同步统计信息包括snaps_synced, snaps_deleted和snaps_renamed在守护进程重新启动时或当目录被重新分配给另一个镜像守护进程(当部署多个镜像守护进程时)时会被重置。
目录可以处于以下状态之一:
- `idle`: The directory is currently not being synchronized
- `syncing`: The directory is currently being synchronized
- `failed`: The directory has hit upper limit of consecutive failures
当目录当前正在同步时,镜像守护进程将其标记为syncing和fs mirror peer status显示正在同步的快照在current_syncing_snap:
$ ceph --admin-daemon /var/run/ceph/cephfs-mirror.asok fs mirror peer status cephfs@360 a2dc7784-e7a1-4723-b103-03ee8d8768f8
{
"/d0": {
"state": "syncing",
"current_syncing_snap": {
"id": 121,
"name": "snap2"
},
"last_synced_snap": {
"id": 120,
"name": "snap1",
"sync_duration": 3,
"sync_time_stamp": "274900.558797s",
"sync_bytes": 52428800
},
"snaps_synced": 2,
"snaps_deleted": 0,
"snaps_renamed": 0
}
}
下。idle,当同步完成时。
当目录连续遇到配置的同步失败次数时,镜像守护进程将其标记为failed。这些目录的同步会重试。cephfs_mirror_max_consecutive_failures_per_directory配置选项控制(默认:10),并且失败目录的重试间隔通过cephfs_mirror_retry_failed_directories_interval配置选项控制(默认:60s)。
例如,添加一个普通文件进行同步会导致失败状态:
$ ceph fs snapshot mirror add cephfs /f0
$ ceph --admin-daemon /var/run/ceph/cephfs-mirror.asok fs mirror peer status cephfs@360 a2dc7784-e7a1-4723-b103-03ee8d8768f8
{
"/d0": {
"state": "idle",
"last_synced_snap": {
"id": 121,
"name": "snap2",
"sync_duration": 5,
"sync_time_stamp": "500900.600797s",
"sync_bytes": 78643200
},
"snaps_synced": 3,
"snaps_deleted": 0,
"snaps_renamed": 0
},
"/f0": {
"state": "failed",
"snaps_synced": 0,
"snaps_deleted": 0,
"snaps_renamed": 0
}
}
这允许用户添加一个不存在的目录进行同步。镜像守护进程将此类目录标记为失败并重试(频率较低)。当目录被创建时,镜像守护进程在成功同步后清除失败状态。
在远程文件系统的 .snap 目录中手动添加新的快照或新目录会导致相应配置目录的失败状态。
$ ceph fs subvolume snapshot create cephfs subvol1 snap2 group1
or
$ mkdir /d0/.snap/snap2
$ ceph --admin-daemon /var/run/ceph/cephfs-mirror.asok fs mirror peer status cephfs@360 a2dc7784-e7a1-4723-b103-03ee8d8768f8
{
"/d0": {
"state": "failed",
"failure_reason": "snapshot 'snap2' has invalid metadata",
"last_synced_snap": {
"id": 120,
"name": "snap1",
"sync_duration": 3,
"sync_time_stamp": "274900.558797s"
},
"snaps_synced": 2,
"snaps_deleted": 0,
"snaps_renamed": 0
},
"/f0": {
"state": "failed",
"snaps_synced": 0,
"snaps_deleted": 0,
"snaps_renamed": 0
}
}
当快照或目录从远程文件系统中删除时,镜像守护进程将在任何待处理的快照成功同步后清除失败状态。
Note
将远程文件系统视为只读。CephFS 本身没有强制执行任何东西。但是,使用正确的 mds caps,用户将无法在远程文件系统中快照目录。
当镜像被禁用时,相应的fs mirror status命令不会在命令帮助中显示。
指标
CephFS 导出镜像指标作为标记性能计数器,将被 OCP/ODF 仪表板消耗以提供地理复制监控。这些指标可用于衡量 cephfs_mirror 同步进度,从而提供监控功能。CephFS 导出以下镜像指标,这些指标使用counter dump
command.
名称 |
类型 |
描述 |
---|---|---|
mirroring_peers |
计量值 |
参与镜像的对等体数量 |
directory_count |
计量值 |
正在同步的目录总数 |
mirrored_filesystems |
计量值 |
被镜像的文件系统总数 |
mirror_enable_failures |
计数器 |
启用镜像失败 |
名称 |
类型 |
描述 |
---|---|---|
snaps_synced |
计数器 |
成功同步的快照总数 |
sync_bytes |
计数器 |
正在同步的总字节数 |
sync_failures |
计数器 |
失败的快照同步总数 |
snaps_deleted |
计数器 |
删除的快照总数 |
snaps_renamed |
计数器 |
重命名的快照总数 |
avg_sync_time |
计量值 |
所有快照同步所花费的平均时间 |
last_synced_start |
计量值 |
最后同步快照的同步开始时间 |
last_synced_end |
计量值 |
最后同步快照的同步结束时间 |
last_synced_duration |
计量值 |
最后一次同步的持续时间 |
last_synced_bytes |
计数器 |
最后同步快照同步的总字节数 |
配置选项
- cephfs_mirror_max_concurrent_directory_syncs
cephfs-mirror 守护进程可以同时同步的最大目录快照数。控制同步线程数。
- type:
uint
- default:
3
- min:
1
- cephfs_mirror_action_update_interval
处理待处理镜像更新操作的秒数间隔。
- type:
secs
- default:
2
- min:
1
- cephfs_mirror_restart_mirror_on_blocklist_interval
重启被列入黑名单的镜像实例的秒数间隔。设置为零(0)将禁用重启被列入黑名单的实例。
- type:
secs
- default:
30
- min:
0
- cephfs_mirror_max_snapshot_sync_per_cycle
当目录被工作线程选中进行镜像时,要镜像的最大快照数。
- type:
uint
- default:
3
- min:
1
- cephfs_mirror_directory_scan_interval
扫描配置目录以进行快照镜像的秒数间隔。
- type:
uint
- default:
10
- min:
1
- cephfs_mirror_max_consecutive_failures_per_directory
将目录标记为“失败”的连续快照同步失败次数。失败的目录会以较低频率重试同步。
- type:
uint
- default:
10
- min:
0
- cephfs_mirror_retry_failed_directories_interval
重试失败目录同步的秒数间隔。
- type:
uint
- default:
60
- min:
1
- cephfs_mirror_restart_mirror_on_failure_interval
重启失败镜像实例的秒数间隔。设置为零(0)将禁用重启失败的镜像实例。
- type:
secs
- default:
20
- min:
0
- cephfs_mirror_mount_timeout
cephfs-mirror 守护进程挂载主要或次要(远程)ceph 文件系统的秒数超时。如果集群不可达,将此值设置为更高的值可能会导致镜像守护进程在挂载文件系统时卡住。此选项用于覆盖通常的 client_mount_timeout。
- type:
secs
- default:
10
- min:
0
- cephfs_mirror_perf_stats_prio
如果优先级不高于 mgr_stats_threshold,守护进程将向管理守护进程发送性能计数器数据。
- type:
int
- default:
5
- 允许范围:
[0, 11]
重新添加对等体
当将对等体重新添加(重新分配)到另一个集群中的文件系统时,请确保所有镜像守护进程都已停止对对等体的同步。这可以通过fs mirror status管理员套接字命令进行检查(命令输出中Peer UUID不应显示)。此外,建议在将对等体重新添加到另一个文件系统之前(尤其是那些可能存在于新主要文件系统中的目录)从对等体中清除已同步的目录。如果重新添加对等体到之前从中同步的同一主要文件系统,则不需要这样做。
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.