Ceph - это программная платформа хранения с открытым исходным кодом, которая обеспечивает хранение объектов, блоков и файловых систем в едином кластере хранения. Я впервые использовал Ceph, когда интегрировал его с OpenStack. Сначала я не понимал, зачем мне использовать Ceph, поскольку устройства хранения широко доступны. Но после использования более трех лет стабильность и целостность платформы снова и снова доказывали свою ценность.
В этой статье будет показано, как установить Ceph с помощью ceph-ansible (официально поддерживаемый сборник программ Ansible для Ceph) и развернуть его в кластере Raspberry Pi.
Материалы:
Архитектура:
По поводу конфигурации:
Использование репозитория Ceph Ansible делает развертывание гладким и простым.
У меня есть общий пользователь, вызываемый 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
.
Установите 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
Теперь вы готовы к развертыванию 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"]
Запустите Ansible playbook с файлом inventory:
ansible-playbook -i inventory site.yml
Через 15–20 минут вы должны увидеть такой результат: