Хранилище 101
TRANSCRIPT
ХРАНИЛИЩЕ 101ИЛИ КРАТКОЕ РУКОВОДСТВО ПО СОЗДАНИЮ СВОЕЙ
АЛЬТЕРНАТИВЫ AMAZON S3
Максим Музафаров
Ликбез
• Простота протокола
Файлохранилище
• Простота протокола• Резервирование
Файлохранилище
• Простота протокола• Резервирование• Отказоустойчивость
Файлохранилище
• Простота протокола• Резервирование• Отказоустойчивость• Доступность
Файлохранилище
• Простота протокола• Резервирование• Отказоустойчивость• Доступность• Администрирование
Файлохранилище
S3
REST API
I/O Admin Public
LibreS3OpenStackCeph
Собственное файлохранилище
LibreS3OpenStackCeph
Собственное файлохранилище
LibreS3OpenStackCeph
Собственное файлохранилище
Ceph• CEPH FS• S3• Swift
Собственное файлохранилище
Установка Ceph
Архитектура
ceph# • Обычный сервер• 8 ядер ЦПУ• 16GB ОЗУ• 500GB HDD
Архитектура
ceph1 ceph3ceph2
CentOS CentOS CentOS
Архитектура
ceph1 ceph3ceph2
mon1 mon2 mon3
Архитектура
ceph1 ceph3ceph2
mon1 mon2 mon3
osd.0 osd.1 osd.2
Архитектура
ceph1 ceph3ceph2
mon1 mon2 mon3
osd.0 osd.1 osd.2
mds
Подготовка сервера
Репозиторий на ceph1[Ceph] name=Ceph packages for $basearch gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc enabled=1 baseurl=http://ceph.com/rpm-firefly/el6/$basearch priority=1 gpgcheck=1 type=rpm-md
Создание кластера
Репозиторий на ceph1ceph-deploy new ceph1 ceph2 ceph3
Создание кластера
Репозиторий на ceph1ceph-deploy new ceph1 ceph2 ceph3ceph-deploy install ceph1 ceph2 ceph3
Создание кластера
Репозиторий на ceph1ceph-deploy new ceph1 ceph2 ceph3ceph-deploy install ceph1 ceph2 ceph3ceph-deploy mon create-initial
Создание кластера
Репозиторий на ceph1ceph-deploy new ceph1 ceph2 ceph3ceph-deploy install ceph1 ceph2 ceph3ceph-deploy mon create-initialceph-deploy admin ceph1 ceph2 ceph3
Кластер
Создание кластера
ceph1 ceph3ceph2
mon1 mon2 mon3
ceph status
Хранилище
ssh ceph# mkdir /opt/osd#
Хранилище
ssh ceph# mkdir /opt/osd#ceph-deploy osd prepare ceph#:/path
Хранилище
ssh ceph# mkdir /opt/osd#ceph-deploy osd prepare ceph#:/pathceph-deploy osd activate ceph#:/path
Хранилище
ceph1 ceph3ceph2
mon1 mon2 mon3
osd.0 osd.1 osd.2
ceph osd tree
Метаданные
ceph-deploy mds create ceph1
ceph1
mon1
osd.0
mds
Где же S3?
Rados GW
ceph1 ceph3ceph2
mon1 mon2 mon3
osd.0 osd.1 osd.2
mds
RGW1 RGW2 RGW3
Шлюзceph-deploy rgw create ceph1 ceph2 ceph3
Шлюзceph-deploy rgw create ceph1 ceph2 ceph3 настраиваем apache && mod_fastcgi
Шлюзceph-deploy rgw create ceph1 ceph2 ceph3 настраиваем apache && mod_fastcgi создаем ключи для каждого шлюза
Шлюзceph-deploy rgw create ceph1 ceph2 ceph3 настраиваем apache && mod_fastcgi создаем ключи для каждого шлюза создаем директорию для файлов шлюза
Шлюзceph-deploy rgw create ceph1 ceph2 ceph3 настраиваем apache && mod_fastcgi создаем ключи для каждого шлюза создаем директорию для файлов шлюза #!/bin/shexec /usr/bin/radosgw -c /etc/ceph/ceph.conf \-n client.radosgw.gateway1
Настройка[client.radosgw.gateway1]
rgw_enable_ops_log = false rgw_print_continue = false rgw_dns_name = s3.example.com rgw_enable_usage_log = false host = ceph1 log_to_stderr = false keyring = /etc/ceph/ceph.client.radosgw.keyring log_file = /var/log/ceph/radosgw.log rgw_socket_path = /var/run/ceph.rgw.gw1.sock
Управляем
Новый пользователь S3
radosgw-admin user create \ —uid=root \ —display-name='Administrator' \ —[email protected]
Новый пользователь Swift
radosgw-admin subuser create \ —uid=root \ —subuser=admin:swift \ —access=full \ —key-type=swift \ —gen-secret
Права администратораradosgw-admin caps add \ —uid=root \ —caps="users=*" radosgw-admin caps add \ —uid=root \ —caps="metadata=*"
Проблемы?
Упала реплика?
ceph statusподнимаемнаслаждаемся перебалансировкой
Упал монитор?
ceph status поднимаем если потеряна карта - импортируем с работающего наслаждаемся перебалансировкой
Потеряли ключи?
ceph statusсоздаем новые ключидля osd/монитора/rgwнаслаждаемся перебалансировкой
S3 API
S3 API
полная поддержка AWS клиентов(с точностью до имен параметров)
Наблюдаем
? ? ?Crapworks
Dashboards
Calamari Krakendash
Calamari
Официальная
Много внимания работе кластера
Нет управления S3
Сложна для изменения
Crapworks
Python/Flask
Легкая
Использует librados напрямую
Krakendash
Python/Django
Легкая
Использует S3 API
Krakendash возможности
•Мониторинг свободного места
• Состояния кластера
• Текущие операции кластера
Нужно для S3
• Занятое место по пользователям
S3
• Состояние RGW серверов
• Управление пользователями
Krakendash + S3
• Рисуем диаграмму для каждого пользователя и
бакета
• Проверяем доступность rgw по локальным именам
• Добавляем создание и изменение пользователей
S3 и Swift
• Всю нагрузку убираем в Graphite
Krakendash + S3
GitHub m-messiah / krakendash
Krakendash + S3 + Service
m-messiah / krakendash
Используем
Обработка документов
Обработка документов
S3 S3
Общие файлы сайтов
www1 www2 www3
css/js log upload backup other
Общие файлы сайтов
www1 www2 www3
\\web\files ?
Upload
StorageSFTP
FTP SMTP
Upload
SwFTPSFTP
FTP SMTP
github/ softlayer / swftp
S3