Работа с несколькими Ceph-кластерами на одном хосте
Если вам нужно подключаться к нескольким кластерам 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]
Минимально достаточно:
fsidmon_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}