配置持久写入日志缓存

持久写入日志缓存比不可变对象缓存更简单,因为它完全在 RBD 客户端库中实现,无需安装额外的软件包、守护进程或客户端密钥环。

作为计算节点准备的一部分

假设可用于写入缓存的备用磁盘为 nvme2n1 例如

# mkfs.ext4 /dev/nvme2n1     # create ext4 filesystem on disk
# mkdir /rbd-write-log-cache
# mount /dev/nvme2n1 /rbd-write-log-cache

如果在 /etc/openstack_deploy/group_vars/nova_compute.yml 中设置 ceph_persistent_write_log_cache_enabled: True,则 ceph_client ansible 角色将在部署期间确保正确设置目录权限。该变量可以全局定义,也可以按组或按主机定义。

要启用持久写入日志缓存,还必须通过 group_vars 将以下配置应用于计算节点,以便仅在 nova_compute ceph 客户端上启用它。

根据计算节点上挂载的卷的预期数量和缓存设备的大小调整缓存大小。缓存大小会为宿主机上活跃的每个池/卷组合在磁盘上单独分配。

ceph_client_ceph_conf_overrides:
  global:
    rbd_plugins = pwl_cache
    rbd_persistent_cache_mode = ssd
    rbd_persistent_cache_path = /rbd-write-log-cache
    rbd_persistent_cache_size = 10G       # size of cache used for each active rbd device

要查看写入日志缓存内的活动,请在计算主机上使用以下命令 rbd status -n client.cinder <pool_name>/volume-<volume_uuid>

示例

# rbd status -n client.cinder cinder-volumes-nvme/volume-93f5a8fa-2e73-40c8-a9f1-bbeff3a3e6bc

Watchers:
    watcher=10.51.1.134:0/2452041141 client.192434419 cookie=281466789599248
Persistent cache state:
    host: compute1a01
    path: /rbd-write-log-cache/rbd-pwl.cinder-volumes-nvme.9058c8720de65b.pool
    size: 10 GiB
    mode: ssd
    stats_timestamp: Mon Apr  3 12:13:38 2023
    present: true    empty: false    clean: true
    allocated: 48 KiB
    cached: 24 KiB
    dirty: 0 B
    free: 1024 MiB
    hits_full: 6 / 0%
    hits_partial: 0 / 0%
    misses: 160340
    hit_bytes: 10 KiB / 0%
    miss_bytes: 20 GiB

创建新的虚拟机时,将在 /rbd-write-log-cache 目录中创建一个 10GB 的文件(其名称包括 Ceph 池名称和卷 ID)。请注意,这仅用于在启用缓存后创建的新虚拟机。

如果需要在同一节点上同时启用不可变对象缓存和持久写入日志,则重要的是在一个 ceph_client_ceph_conf_overrides 定义中定义两者的设置。