Задача
Еще раз опишу задачу: в каждую ноду кластера установлено некоторое количество HDD и SSD дисков. Необходимо, чтобы можно было при создании S3 бакета указать на каких устройствах его хранить (HDD или SSD).
Разносим пулы по разным девайсам
Посмотрим текущие правила репликации. По дефолту там должна быть только запись «replicated_rule»:
ceph osd crush rule ls
Благодаря нововведению в Luminous Ceph умеет сам определять тип устройства и мы можем легко разделить их по разным правилам репликации:
ceph osd crush rule create-replicated replicated_hdd default host hdd
ceph osd crush rule create-replicated replicated_ssd default host ssd
Удалим старое дефолтное правило:
ceph osd crush rule rm replicated_rule
Теперь создадим новый дополнительный пул, в котором мы будем хранить S3 объекты и расположим его на SSD:
ceph osd pool create default.rgw.buckets.data.ssd 8 8 replicated replicated_ssd
А дефолтный пул с данными расположим на HDD:
ceph osd pool set default.rgw.buckets.data crush_rule replicated_hdd
Естественно можно сделать наоборот и расположить дефолтный на SSD.
Настраиваем Rados Gateway
Самая интересная часть, ради которой и писалась статья.
При новой установке кластер идет без дефолтного Realm. Не очень понятно почему так сделано. Создадим Realm «default» и назначим его дефолтным:
radosgw-admin realm create --rgw-realm=default --default
Добавим дополнительный placement для SSD бакетов в zonegroup default:
radosgw-admin zonegroup placement add --rgw-zonegroup=default --placement-id="ssd-placement"
И добавим дополнительный placement в зону default:
radosgw-admin zone placement add --rgw-zone=default --placement-id="ssd-placement" --data-pool="default.rgw.buckets.data.ssd" --index-pool="default.rgw.buckets.index"
У нас для хранения индекса всех объектов (и HDD и SSD) используется один пул «default.rgw.buckets.index», но можно создать отдельный пул для индекса.
Привяжем zonegroup «default» к realm «default» и закомитим изменения:
radosgw-admin zonegroup modify --rgw-zonegroup=default --rgw-realm=default
radosgw-admin period update --commit
Последний шаг— перезапустить Rados Gateway.
Теперь мы можем создать новый бакет на SSD (обратите внимание на двоеточие, без него не работало):
s3cmd mb s3://test --bucket-location=:ssd-placement
Или создать бакет с дефолтным размещением (в нашем случае на HDD):
s3cmd mb s3://test
Надеюсь, моя маленькая заметка сэкономит кому-то время при решении аналогичной задачи.
Комментариев нет:
Отправить комментарий