Если вам нужно подключаться к нескольким кластерам Ceph (например, dev и prod) с одного сервера — важно правильно организовать конфигурацию и ключи доступа.

Структура конфигураций

Для каждого кластера создаём:

{cluster}.conf
{cluster}.client.{user}.keyring

Пример:

/etc/ceph/
├─ dev.conf
├─ dev.client.admin.keyring
├─ prod.conf
└─ prod.client.user.keyring

Такой подход позволяет:

  • изолировать кластеры
  • использовать разных пользователей
  • избежать конфликтов конфигурации
  • явно указывать, к какому кластеру идёт обращение

Пример конфигурации кластера

/etc/ceph/dev.conf

# minimal ceph.conf for xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
[global]
        fsid = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
        mon_host = \
[v2:192.168.93.10:3300/0,v1:192.168.93.10:6789/0]\
[v2:192.168.32.1:3300/0,v1:192.168.32.1:6789/0]\
[v2:192.168.93.11:3300/0,v1:192.168.93.11:6789/0]\
[v2:192.168.32.2:3300/0,v1:192.168.32.2:6789/0]\
[v2:192.168.93.12:3300/0,v1:192.168.93.12:6789/0]\
[v2:192.168.32.3:3300/0,v1:192.168.32.3:6789/0]\
[v2:192.168.93.13:3300/0,v1:192.168.93.13:6789/0]\
[v2:192.168.32.4:3300/0,v1:192.168.32.4:6789/0]

Минимально достаточно:

  • fsid
  • mon_host

Остальные параметры обычно подтягиваются автоматически от мониторов.

Пример keyring

/etc/ceph/dev.client.admin.keyring

[client.admin]
        key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx==
        caps mds = "allow *"
        caps mgr = "allow *"
        caps mon = "allow *"
        caps osd = "allow *"

Если используется не client.admin, а, например, client.user, то:

  • имя файла должно соответствовать шаблону
  • в командах нужно явно указывать пользователя через -n

Проверка пулов

Работа с пулами через rbd:

rbd ls {poolname} --cluster dev
rbd ls {poolname} --cluster prod -n client.user

Если имя клиента отличается от client.admin, обязательно указываем:

-n client.{user}

Иначе будет попытка использовать client.admin.

Алиасы для удобства

Чтобы не писать каждый раз --cluster и -n, можно добавить алиасы:

# dev
alias rbd-dev='rbd -n client.admin --cluster dev'
alias ceph-dev='ceph -n client.admin --cluster dev'

# prod
alias rbd-prod='rbd -n client.user --cluster prod'
alias ceph-prod='ceph -n client.user --cluster prod'

Теперь команды становятся чище:

ceph-dev df
rbd-dev ls {pool-name}

ceph-prod df
rbd-prod ls {pool-name}