Авторизоваться
Дмитрий Цирульников 11.01.2021 Опубликована

Развертывание Ceph в кластере Raspberry Pi 

Ceph - это программная платформа хранения с открытым исходным кодом, которая обеспечивает хранение объектов, блоков и файловых систем в едином кластере хранения. Я впервые использовал Ceph, когда интегрировал его с OpenStack. Сначала я не понимал, зачем мне использовать Ceph, поскольку устройства хранения широко доступны. Но после использования более трех лет стабильность и целостность платформы снова и снова доказывали свою ценность.

В этой статье будет показано, как установить Ceph с помощью ceph-ansible (официально поддерживаемый сборник программ Ansible для Ceph) и развернуть его в кластере Raspberry Pi.

Материалы:

  1. Четыре модели Raspberry Pi 4B 4 ГБ
  2. Четыре карты microSD по 32 ГБ (загрузочная ОС)
  3. Четыре корпуса Raspberry Pi с вентиляторами и радиаторами (очень важно)
  4. Четыре зарядных устройства Raspberry Pi
  5. Шесть USB-накопителей емкостью 32 ГБ (для узлов Ceph OSD)

Архитектура:

По поводу конфигурации:

  • И интерфейсная, и внутренняя сети находятся в одной подсети.
  • Программное обеспечение Ceph Monitor использует Raspberry Pi 4B с 4 ГБ оперативной памяти.
  • В Ceph OSD узлы используют ту же модель Raspberry Pi, но с двумя USB флэш - накопители для OSD дисков

Развертывание Ceph с использованием ceph-ansible

Использование репозитория Ceph Ansible делает развертывание гладким и простым.

1. Скопируйте ключи ssh на все серверы

У меня есть общий пользователь, вызываемый cephadmin на всех серверах (каждый Raspberry Pi в этом контексте является сервером). Пользователи cephadmin настраиваются с беспарольным sudo.

После генерации ключа с помощью ssh-keygen разверните все ключи с помощью ssh-copy-id.

Я использую цикл for в Bash, потому что использую согласованные и добавляемые имена хостов:

for i in {0..3}; \
  do ssh-copy-id cephadmin@rpi4b4-$i; \
done

Вам необходимо принять и ввести свой пароль на каждом из них, но вы можете автоматизировать это с помощью expect.

2. Клонировать ceph-ansible и установить требования

Установите Git, чтобы клонировать репозиторий:

sudo yum install git -y

Клонируйте репозиторий ceph-ansible:

git clone https://github.com/ceph/ceph-ansible.git
cd ceph-ansible/

Я использую сборку CentOS 7 AArch64, поэтому я должен установить некоторые необходимые пакеты, прежде чем продолжить.

Во-первых, Python pip:

sudo yum install python3-pip -y

Далее необходимы пакеты ceph-ansible:

sudo yum install python3-devel libffi-devel openssl-devel -y

Наконец, устанавливаем зависимости ceph-ansible:

pip3 install -r requirements.txt --user

Я получил эту ошибку:

You are linking against OpenSSL 1.0.2, which is no longer supported by the OpenSSL project.
To use this version of cryptography you need to upgrade to a newer version of OpenSSL. For
this version only you can also set the environment variable
CRYPTOGRAPHY_ALLOW_OPENSSL_102 to allow OpenSSL 1.0.2.

Это может быть связано с архитектурой, потому что я не могу воспроизвести ошибку на виртуальной машине CentOS 7.

Для развертывания экспортируйте CRYPTOGRAPHY_ALLOW_OPENSSL_102 в True, чтобы Ansible мог работать:

export CRYPTOGRAPHY_ALLOW_OPENSSL_102=True

3. Настройте ceph-ansible для развертывания

Теперь вы готовы к развертыванию Ceph с использованием ceph-ansible.

Копировать site.yml.sample в site.yml:

mv site.yml.sample site.yml

Создайте all.yml в каталоге group_vars:

cat << EOF >> group_vars/all.yml
ceph_origin: repository
ceph_repository: community
ceph_repository_type: cdn
ceph_stable_release: nautilus
monitor_interface: wlan0
public_network: "192.168.100.0/24"
cluster_network: "192.168.100.0/24"
dashboard_enabled: false
configure_firewall: false
EOF

Создайте osds.yml в каталоге group_vars:

cat << EOF >> group_vars/all.yml
osd_scenario: collocated
devices:
 - /dev/sda
- /dev/sdb
EOF

Создайте файл inventory:

cat << EOF >> inventory
[mons]
rpi4b4-0

[osds]
rpi4b4-1
rpi4b4-2
rpi4b4-3
EOF

На момент написания этой статьи в репозитории ceph-ansible есть ошибка (согласно этому сообщению об ошибке). Вы можете устранить ошибку, отредактировав строки 85 и 86 roles:

    - (wait_for_all_osds_up.stdout | from_json)["osdmap"]["num_osds"] | int > 0
    - (wait_for_all_osds_up.stdout | from_json)["osdmap"]["num_osds"] == (wait_for_all_osds_up.stdout | from_json)["osdmap"]["num_up_osds"]

4. Разверните Ceph

Запустите Ansible playbook с файлом inventory:

ansible-playbook -i inventory site.yml

Через 15–20 минут вы должны увидеть такой результат:

Коментарии
Авторизоваться что-бы оставить комментарий
Присоединяйся в тусовку
Наш сайт использует файлы cookie для вашего максимального удобства. Пользуясь сайтом, вы даете свое согласие с условиями пользования cookie