Глава 3. Работа с хранилищем объектов Ceph
В данной главе мы охватим:
-
Понимание хранения объектов Ceph
-
Стандартные наладку, установку и настройку шлюза RADOS
-
Создание пользователя radosgw
-
Доступ к хранилищу объектов Ceph с применением S3 API
-
Доступ к хранилищу объектов Ceph с применением Swift API
-
Интеграцию шлюза RADOS с OpenStack Keystone
-
Настройку федеративных шлюзов Ceph
-
Тестирование федеративных настроек radosgw
-
Построение служб файловой синхронизации и совместного использования с применением RGW
Содержание
- 3. Работа с хранилищем объектов Ceph
- Введение
- Понимание хранения объектов Ceph
- Стандартные наладка, установка и настройка шлюза RADOS
- Создание пользователя radosgw
- Доступ к хранилищу объектов Ceph с применением S3 API
- Доступ к хранилищу объектов Ceph с применением Swift API
- Интеграция шлюза RADOS с OpenStack Keystone
- Настройка федеративных шлюзов Ceph
- Тестирование федеративных настроек radosgw
- Построение служб файловой синхронизации и совместного использования с применением RGW
Основанные на объектах хранилища получают всё больше внимания к себе, так как организации ищут гибкости для своих огромных данных. Системы хранения объектов являются подходом к сохранению данных в форме объектов как для обычных файлов и блоков, так и для и всех хранящих объекты данных, метаданных и уникальных идентификаторов. В данной главе мы получим представление о хранилище объектов как части Ceph и получим практические знания по настройке шлюза Ceph RADOS.
Хранилище объектов не может быть доступно напрямую из операционной системы в качестве дисковой файловой системы. Наоборот, оно может быть доступно только через API на прикладном уровне. Ceph является распределённой системой системой хранения объектов, которая предоставляет интерфейс хранения объектов через шлюз объектов Ceph, также называемый интерфейсом RADOS Gateway (RGW, шлюза Безотказного автономного распределенного хранилища объектов), который строится поверх уровня Ceph RADOS. RGW использует librgw (RADOS Gateway Library) и librados, позволяя приложениям устанавливать соединение с хранилищем объектов Ceph. RGW снабжает приложения API- интерфейсом совместимым с RESTful S3/ Swift для хранения данных в форме приложений в вашем кластере Ceph. Ceph также поддерживает доступное через RESTful API хранение объектов со множеством владельцев (multitenant). В дополнение к этому RGW также предоставляет API администрирования Ceph, который может применяться для управления кластером хранения Ceph с использованием внутренних API вызовов.
Библиотека программного обеспечения librados является очень гибкой и позволяет пользовательским приложениям осуществлять прямой доступ к кластеру хранения Ceph из связываний (binding) C, C++, Java, Python и PHP. Хранилище объектов Ceph также имеет возможности множества площадок, то есть предоставляет решения для восстановления после сбоев.
Следующий рисунок представляет хранение объектов Ceph:
Для промышленных окружений рекомендуется чтобы вы настраивали свои RGW на физических, выделенных машинах. Однако, если рабочая нагрузка хранилища объектов не очень велика, вы можете рассмотреть возможность использования всех машин монитора в качестве узла RGW. RGW является отдельной службой, которая внутренне связана с кластером Ceph и предоставляет своим клиентам доступ к хранимым объектам. В промышленных средах рекомендуется чтобы вы выполняли более одного экземпляра своих RGW, маскируемых балансировщиком нагрузки, как показано на следующей схеме:
Начиная с выпуска Ceph Firefly был введён новый интерфейс RGW: Civetweb
,
который является автономным лёгким веб сервером. Civetweb
был
непосредственно встроен в службу ceph-radosgw
, делая развёртывание хранилища объектов Ceph более
быстрым и простым.
В следующих рецептах мы продемонстрируем настройки RGW, применяющие Civetweb
на виртуальной машине, которая взаимодействует с тем же кластером Ceph, который мы создали в
Главе 1. Введение и за его пределами.
Для выполнения службы хранения объектов нам необходим работающий кластер Ceph и узел RGW должен иметь доступ к сетевой среде Ceph.
Как это уже демонстрировалось в предыдущих главах, мы будем загружать виртуальную машину применяя Vagrant и настраивать её для нашего узла RGW.
-
Запустите
rgw-node1
с помощьюVagrantfile
, как мы это делали для узлов Ceph в Главе 1. Введение и за его пределами. Убедитесь что вы находитесь на машине хоста под репозиториемceph-cookbook
перед приведением в действиеrgw-node1
с помощью Vagrant:# cd ceph-cookbook # vagrant up rgw-node1 teeri:ceph-cookbook ksinghS vagrant up rgw-node1 Bringing machine 'rgw-node1' up with 'virtualbox' provider... rgw-node1: Importing base box 'centos7-standard'.... ==> rgw-node1: matching MAC address for NAT networking... ==> rgw-node1: Setting the name of the vm: rgw-node1 ==> rgw-node1: Fixed port collision for 22 ==> 2222. NOW on port 2202. ==> rgw-node1: Clearing any previously set network interfaces... ==> rgw-node1: Preparing network interfaces based on configuration... rgw-node1: Adapter 1: nat rgw-node1: Adapter 2: hostonly ==> rgw-node1: Forwarding ports... rgw-node1: 22 => 2202 (adapter 1) ==> rgw-node1: Running 'pre-boot' VM customizations... ==> rgw-node1: Booting vm...
-
Когда
rgw-node1
поднимется, проверьте состояние Vagrant и зарегистрируйтесь на этом узле:$ vagrant status rgw-node1 $ vagrant ssh rgw-node1 teeri:ceph-cookbook ksinghS vagrant status rgw-node1 Current machine states: rgw-node1 running (virtualbox) The vm is running. To stop this vm, you can run `vagrant halt` to shut it down forcefully, or you can run 'vagrant suspend' to simply suspend the virtual machine. In either case, to restart it again, simply run `vagrant up`. teeri:ceph-cookbook ksinghS vagrant ssh rgw-node1 Last login: Sun Apr 5 19:31:52 2015 [vagrant@rgw-node1 ~]$
-
Проверьте что
rgw-node1
может взаимодействовать с кластером Ceph:# ping ceph-node1 -c 3 # ping ceph-node2 -c 3 # ping ceph-node3 -c 3
-
Удостоверьтесь в правильности записей локально файла
host
, имени хоста и FQDN дляrgw-node1
:# cat /etc/hosts | grep -i rgw # hostname # hostname -f [root@rgw-node1 ~]# cat /etc/hosts | grep rgw 127.0.0.1 rgw-node1.cephcookbook.com rgw-node1 localhost localhost.localdomain localhost4 localhost4.localdomain4 192.168.1.106 rgw-node1.cephcookbook.com rgw-node1 [root@rgw-node1 ~]# [root@rgw-node1 ~]# hostname rgw-node1.cephcookbook.com [root@rgw-node1 ~]# [root@rgw-node1 ~]# hostname -f rgw-node1.cephcookbook.com [root@rgw-node1 ~]#
Предыдущий рецепт был посвящён сборке виртуальной машины для RGW. В этом рецепте мы изучим как собрать на этом узле
вашу службу ceph-radosgw
.
Как это уже демонстрировалось в предыдущих главах, мы будем загружать виртуальную машину применяя Vagrant и настраивать её для нашего узла RGW.
-
Вначале нам нужно установить пакеты Ceph на
rgw-node1
. Для этого мы воспользуемся инструментариемceph-deploy
сceph-node1
, который является нашим узлом монитора Ceph. Зарегистрируйтесь наceph-node1
и выполните следующие команды:-
Проверьте что для
ceph-node1
доступен в сетевой средеrgw-node1
применив следующую команду:# ping rgw-node1 -c 1
-
Позвольте
ceph-node1
регистрацию SSH без пароля и проверьте соединение.Замечание Пароль для
rgw-node1
тот же, что и ранее, то естьvagrant
.# ssh-copy-id rgw-node1 # ssh rgw-node1 hostname
[root@ceph-node1 ceph]# ping rgw-node1 -c 1 PING rgw-node1.cephcookbook.com (192.168.1.106) 56(84) bytes of data. 64 bytes from rgw-node1.cephcookbook.com (192.168.1.106): icmp_seq.1 tt1.64 time.0.745 ms --- rgw nodel.cephcookbook.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time Oms rtt min/avg/max/mdev = 0.745/0.745/0.745/0.000 ms [root@ceph-node1 ceph]# [root@ceph-node1 ceph]# ssh-copy-id rgw-node1 the authenticity of host 'rgw-node1 (192.168.1.106)' can't be established. ECDSA key fingerprint is af:2a:a5:74:a7:0b:f5:5b:ef:c5:4b:2a:fe:ld:30:8e. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@rgw-node1's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'rgw-node1'" and check to make sure that only the key(s) you wanted were added. [root@ceph-node1 ceph]# ssh rgw-node1 hostname rgw-node1.cephcookbook.com [root@ceph-node1 ceph]#
-
Применяя
ceph-node1
установите пакеты Ceph и скопируйте файлceph.conf
наrgw-node1
:# cd /etc/ceph # ceph-deploy install rgw-node1 # ceph-deploy config push rgw-node1
-
-
Наконец, зарегистрируйтесь на
rgw-node1
и установите пакетceph-radosgw
:# yum install ceph-radosgw
Так как для RGW мы используем встроенный веб- сервер Civetweb
,
большинство вещей уже установлено службой ceph-radosgw
. В этом рецепте мы создадим ключи
аутентификации для пользователя Ceph RGW и обновим файл ceph.conf
.
Как это уже демонстрировалось в предыдущих главах, мы будем загружать виртуальную машину применяя Vagrant и настраивать её для нашего узла RGW.
-
Чтобы создать пользователя RGW и кольцо ключей выполните следующие команды с
ceph-node1
:-
Создайте кольцо ключей при помощи следующей команды:
# cd /etc/ceph # ceph-authtool --create-keyring \ /etc/ceph/ceph.client.radosgw.keyring # chmod +r /etc/ceph/ceph.client.radosgw.keyring
-
Сгенерируйте пользователя шлюза и ключ для экземпляра RGW; имя нашего экземпляра RGW
gateway
:# ceph-authtool /etc/ceph/ceph.client.radosgw.keyring \ -n client.radosgw.gateway --gen-key
-
Добавьте ключу возможности:
# ceph-authtool -n client.radosgw.gateway --cap osd 'allowrwx' \ --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring
-
Добавьте ключ в свой кластер Ceph:
# ceph auth add client.radosgw.gateway \ -i /etc/ceph/ceph.client.radosgw.keyring
-
Распространите ключ на свой узел Ceph RGW:
# scp /etc/ceph/ceph.client.radosgw.keyring \ rgw-node1:/etc/ceph/ceph.client.radosgw.keyring [root@ceph-node1 ceph]# ceph-authtool --create-keyring /etc/ceph/ceph.client.radosgw.keyring creating /etc/ceph/ceph.client.radosgw.keyring [root@ceph-node1 ceph]# [root@ceph-node1 ceph]# chmod +r /etc/ceph/ceph.client.radosgw.keyring [root@ceph-node1 ceph]# ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client. radosgw.gateway --gen-key [root@ceph-node1 ceph]# ceph-authtool -n client.radosgw.gateway --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph ceph.client.radosgw.keyring [root@ceph-node1 ceph]# ceph auth add client. radosgw.gateway /etc/ceph/ceph.client.radosgw.keyring added key for client.radosgw.gateway [root@ceph-node1 ceph]# [root@ceph-node1 ceph]# scp /etc/ceph/ceph.client.radosgw.keyring rgw-node1:/etc/ceph/ceph.client.radosgw.keyring ceph.client.radosgw.keyring 100% 121 0.1KB/s 00:00 [root@ceph-node1 ceph]#
-
-
Добавьте раздел
client.radosgw.gateway
вceph.conf
наrgw-node1
. Убедитесь что имя хоста то же что и в выводе команды# hostname -s
:[client.radosgw.gateway] host = rgw-node1 keyring = /etc/ceph/ceph.client.radosgw.keyring rgw socket path = /var/run/ceph/ceph.radosgw.gateway.fastcgi.sock log file = /var/log/ceph/client.radosgw.gateway.log rgw dns name = rgw-node1.cephcookbook.com rgw print continue = false [root@rgw-node1 ceph]# tail -7 ceph.conf [client.radosgw.gateway] host = rgw-node1 keyring = /etc/ceph/ceph.client.radosgw.keyring rgw socket path = /var/run/ceph/ceph.radosgw.gateway.fastcgi.sock log file = /var/log/ceph/client.radosgw.gateway.log rgw dns name = rgw-node1.cephcookbook.com rgw print continue = false [root@rgw-node1 ceph]#
-
По умолчанию сценарий запуска
ceph-radosgw
выполняется от пользователь по умолчанию,apache
. Измените пользователя по умолчанию сapache
наroot
:# sed -i s"/DEFAULT_USER.*=.*'apache'/DEFAULT_USER='root'"/g /etc/rc.d/init.d/ceph-radosgw
-
Запустите службу Ceph
radosgw
и проверьте её состояние:# service ceph-radosgw start # service ceph-radosgw status
-
Веб-сервер
Civetweb
который встроен в ваш демонceph-radosgw
теперь должен работать по порту по умолчанию, 7489:# netstat -nlp | grep -i 7480 [root@rgw-node1 ceph]# netstat -nlp | grep -i 7480 tcp 0 0 0.0.0.0:7480 0.0.0.0:* LISTEN 3635/radosgw [root@rgw-node1 ceph]#
Для применения хранилища объектов Ceph нам необходимо создать начального пользователя шлюза объектов Ceph для интерфейса S3 и затем создать подпользователя для интерфейса Swift.
-
Проверьте что
rgw-node1
способен осуществлять доступ к кластеру Ceph:# ceph -s -k /etc/ceph/ceph.client.radosgw.keyring --name client.radosgw.gateway
-
Создайте пользователя шлюза RADOS для S3 доступа:
# radosgw-admin user create --uid=mona --display-name="MonikaSingh" --email=mona@cephcookbook.com -k /etc/ceph/ceph.client.radosgw.keyring --name client.radosgw.gateway [root@rgw-node1 ceph]# radosgw-admin user create --uid=mona --display-name="MonikaSingh" --email=mona@cephcookbook.com -k /etc/ceph/ceph.client.radosgw.keyring --name client.radosgw.gateway { "user_id": "mona", "display_name": "Monika Singh", "email": "mona@cephcookbook.com", "suspended": 0, "max_buckets": 1000, "auid": 0, "subusers": [], "keys": [ { "user": "mona", "access_key": "C162E2F8w98A0M3KK99", "secret_key": "J21mow6EPs6Sz4xtT7h+piDmhQBv1gWqVeicSRMg"}], "swift_keys": [), "caps": [], "op_mask": "read, write, delete", "default_placement": "", "placement_tags": [], "bucket_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1}, "user_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1}, "temp_url_keys": []} [root@rgw-node1 ceph]#
-
Ваши ключи значений (
access_key
) и ключи (secret_key
) понадобятся позже в данной главе для проверки подлинности доступа. -
Чтобы применять хранилище объектов Ceph в API Swift нам необходимо создать подпользователя Swift в Ceph RGW:
# radosgw-admin subuser create --uid=mona --subuser=mona:swift --access=full -k /etc/ceph/ceph.client.radosgw.keyring --name client.radosgw.gateway [root@rgw-node1 ceph]# radosgw-admin subuser create --uid=mona --subuser=mona:swift --access=full -k /etc/ceph/ceph.client.radosgw.keyring --name client.radosgw.gateway { "user_id": "mona", "display_name": "Monika Singh", "email": "mona@cephcookbook.com", "suspended": 0, "max_buckets": 1000, "auid": 0, "subusers": [ { "id": "mona:swift", "permissions": "full-control"}], "keys": [ { "user": "mona:swift", "access_key": "580V73F5AXX3CGNEZ9HV", "secret_key": ""}, { "user": "mona", "access_key": "C162E2F8WZ98A0M3KK99", "secret_key": "J21mow6EPs6Sz4xtT7h+piDmhQBvlgWqVeicSRMg"}], "swift_keys": [], "caps": [], "op_mask": "read, write, delete", "default_placement": "", "placement_tags": [], "bucket_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1}, "user_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1}, "temp_url_keys": [] } [root@rgw-node1 ceph]#
-
Создайте ключ безопасности для подпользователя
mona:swift
; они будут применяться позже в этой главе:# radosgw-admin key create --subuser=mona:swift --key-type=swift --gen-secret -k /etc/ceph/ceph.client.radosgw.keyring --name client.radosgw.gateway [root@rgw-node1 ceph]# radosgw-admin key create --subuser=mona:swift --key-type=swift --gen-secret -k /etc/ceph/ceph.client.radosgw.keyring --name client.radosgw.gateway { "user_id": "mona", "display_name": "monika Singh", "email": "mona@cephcookbook.com", "suspended": 0, "max_buckets": 1000, "auid": 0, "subusers": [ { "id": "mona:swift", "permissions": "full-control"}], "keys": [ { "user": "mona:swift", "access_key": "580V73FSAXX3CGNEz9Hv", "secret_key": ""}, { "user": "mona", "access_key": "C162E2F8WZ98A0M3KK99", "secret_key": "J21mow6EPs6Sz4xtT7h+piDmhQBvlgWqVeic5RMg"}], "swift_keys": [ { "user": "mona:swift", "secret_key": "6vxGDhuEBsPSyXlE7VYVFrTXLVqoJByMHT+jnXPV"}], "caps": [], "op_mask": "read, write, delete", "default_placement": "", "placement_tags": [], "bucket_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1}, "user_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1}, "temp_url_keys": []} [root@rgw-node1 ceph]#
Рецепт Доступ к хранилищу объектов Ceph с применением Swift API.
Веб службы Amazon предлагают Simple Storage Service
(S3
), который предоставляет хранение через веб- интерфейс
такой как REST. Ceph расширяет свою совместимость с S3 посредством RESTful API. Приложения клиента S3 могут получать доступ к
хранилищу объектов Ceph на основе ключей безопасности.
Для S3 также требуется присутствие службы DNS если она применяет соглашения именования ваших сегментов виртуальных хостов,
т.е. <object_name>.<RGW_Fqdn>
. Например, если
у вас имеется сегмент с именем jupiter
, то доступ к нему будет
возможен поверх HTTP через URL http://jupiter.rgw-node1.cephcookbook.com
.
Для настройки DNS выполните следующие шаги на узле rgw-node1
. Если у вас имеется работающий
сервер DNS вы можете пропустить настройку DNS и использовать свой сервер DNS.
-
Установите пакеты bind на вашем узле
ceph-rgw
:# yum install bind* -y
-
Исправьте
/etc/named.conf
и добавьте информацию для IP адресов, IP диапазонов и зон, которые упоминаются далее. Вы можете следовать изменениям авторской версии файлаnamed.conf
предоставляемого данной книгой:listen-on port 53 { 127.0.0.1;192.168.1.106; }; ### Add DNS IP ### allow-query { localhost;192.168.1.0/24; }; ### Add IP Range ### options { listen-on port 53 { 127.0.0.1;192.168.1.106; }; ### Add DNS IP ### listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { localhost;192.168.1.0/24; }; ### Add IP Range ### } ### Add new zone for domain cephcookbook.com before EOF ### zone "cephcookbook.com" IN { type master; file "db.cephcookbook.com"; allow-update { none; }; }; ### Add new zone for domain cephcookbook.com before EOF ### zone "cephcookbook.com" IN { type master; file "db.cephcookbook.com"; allow-update { none; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
-
Создайте файл зоны,
/var/named/db.cephcookbook.com
со следующим содержимым. Вы можете следовать изменениям авторской версии файлаdb.objectstore.com
предоставленного в том же файле каталога с именемnamed.conf.rtf
в котором содержится пакет кодов данной главы:@ 86400 IN SOA cephcookbook.com. root.cephcookbook.com. ( 20091028 ; serial yyyy-mm-dd 10800 ; refresh every 15 min 3600 ; retry every hour 3600000 ; expire after 1 month + 86400 ); min ttl of 1 day @ 86400 IN NS cephbookbook.com. @ 86400 IN A 192.168.1.106 * 86400 IN CNAME @ [root@rgw-node1 ~]# cat /etc/db.cephcookbook.com @ 86400 IN SOA cephcookbook.com. root.cephcookbook.com. ( 20091028 ; serial yyyy-mm-dd 10800 ; refresh every 15 min 3600 ; retry every hour 3600000 ; expire after 1 month + 86400 ); min ttl of 1 day @ 86400 IN NS cephbookbook.com. @ 86400 IN A 192.168.1.106 * 86400 IN CNAME @ [root@rgw-node1 ~]#
-
Измените
/etc/resolve.conf
и добавьте следующее содержание:search cephcookbook.com nameserver 192.168.1.106
-
Запустите службу
named
:# service named start
-
Проверьте ваши файлы настройки DNS на наличие синтаксических ошибок:
# named-checkconf /etc/named.conf # named-checkzone cephcookbook.com /var/named/db.cephcookbook.com [root@rgw-node1 ~]# service named start Redirecting to /bin/systemctl start named.service [root@rgw-node1 ~]# [root@rgw-node1 ~]# named-checkconf /etc/named.conf [root@rgw-node1 ~]# named-checkzone cephcookbook.com /var/named/db.cephcookbook.com zone cephcookbook.com/IN: loaded serial 20091028 OK [root@rgw-node1 ~]#
-
Проверьте ваш сервер DNS:
# dig rgw-node1.cephcookbook.com # nslookup rgw-node1.cephcookbook.com
Для доступа к хранилищу объектов Ceph через API S3 вам необходимо настроить клиентскую машину при помощи
s3cmd
а также установки вашего клиента DNS. Выполните следующие шаги для настройки
клиентской машины s3cmd
:
-
Поднимите вашу виртуальную машину
client-node1
воспользовавшись Vagrant. Эта виртуальная машина будет использоваться в качестве машины клиента для хранилища объектов S3:$ vagrant up client-node1
-
На вашей машине
client-node1
обновите записями сервера DNS/etc/resolve.conf
:search cephcookbook.com nameserver 192.168.1.106
-
Проверьте настройки DNS на
client-node1
:# dig rgw-node1.cephcookbook.com # nslookup rgw-node1.cephcookbook.com
-
client-node1
должен быть способен разрешать поддомены дляrgw-node1.cephcookbook.com
:# ping mj.rgw-node1.cephcookbook.com -c 1 # ping anything.rgw-node1.cephcookbook.com -c 1 root@client-node1:~# ping mj.rgw-nodel.cephcookbook.com -c 1 PING cephcookbook.com (192.168.1.106) 56(84) bytes of data. 64 bytes from 192.168.1.106: icmp_seq=1 tt1=64 time=0.475 ms --- cephcookbook.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time Oms rtt min/avg/max/mdev = 0.475/0.475/0.475/0.000 ms root@client-node1:~# root@client-node1:~# ping anything.rgN-nodeLcephcookbook.com -c 1 PING cephcookbook.com (192.168.1.106) 56(84) bytes of data. 64 bytes from 192.168.1.106: icmp_seq=1 tt1=64 time=0.413 ms --- cephcookbook.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time Oms rtt min/avg/max/mdev = 0.413/0.413/0.413/0.000 ms root@client-node1:~#
-
Настройте клиента S3 (
s3cmd
) наclient-node1
:-
Установите
s3cmd
используя следующую команду:# apt-get install -y s3cmd
-
Настройте
s3cmd
предоставивaccess_key
иsecret_key
вашего пользователяmona
, которого мы создали ранее в этой главе. Выполните следующую команду и следуйте за приглашениями:# s3cmd --configure root@client-node1:Ё# s3cmd --configure Enter new values or accept defaults in brackets with Enter. Refer to user manual for detailed description of all options. {Введите новые значения или примите значения по умолчанию в скобках нажав Ввод. За дополнительными пояснениями всех параметров обращайтесь к пользовательской документации.} Access key and secret key are your identifiers for Amazon S3 {Ключ доступа и ключ безопасности являются вашими идентификаторами для Amazon S3} Access Key: С162E2F8wZ98A0M3KK99 Secret Key: 321mow6EPs6Sz4xtT7h+rpiDmhQBvlgwqVeic5RMg Encryption password is used to protect your files from reading by unauthorized persons while in transfer to S3 {Пароль шифрования применяется для защиты ваших файлов от чтения неавторизованым персоналом при передаче на S3} Encryption password: Path to GPG program [/usr/bin/gpg]: When using secure HTTPS protocol all communication with Amazon S3 servers is protected from 3rd party eavesdropping. This method is slower than plain HTTP and can't be used if you're behind a proxy {При использовании безопасного протокола HTTPS всё взаимодействие с серверами Amazon S3 защищено от подслушивания 3ми сторонами. Этот метод медленнее чем простой HTTP и не может применяться если вы используете proxy} use HTTPS protocol [No]: On some networks all internet access must go through a HTTP proxy. Try setting it here if you can't connect to S3 directly {В некоторых сетевых средах весь доступ в интернет должен проходить сквозь HTTP proxy. Попробуйте настроить его здесь если вы не можете соединиться с S3 напрямую} HTTP Proxy server name: New settings: Access Key: C162E2F8wZ98A0M3KK99 Secret Key: 321mow6EPs6Sz4xtT7h+rpiDmhQBvlgwqVeic5RMg Encryption password: Path to GPG program: /usr/bin/gpg Use HTTPS protocol: False HTTP Proxy server name: HTTP Proxy server port: 0 Test access with supplied credentials? [Y/n] n Save settings? [y/N] y configuration saved to '/root/.s3cfg' root@client-node1:~#
-
Команда
~# s3cmd --configure command
создаст/root/.s3cfg
. Измените этот файл для внесения подробностей вашего хоста RGW. Изменитеhost_base
иhost_bucket
, как показано далее. Убедитесь что эти строки не имеют пробельных символов в конце:host_base = rgw-node1.cephcookbook.com:7480 host_bucket = %(bucket)s.rgw-node1.cephcookbook.com:7480
Вы можете взять за основу авторскую версию файла
/root/.s3cfg
предоставленного в пакете кода данной главы.root@client node1:~# cat /root/.s3cfg [default] access_key = C162E2F8WZ98A0M3KK99 bucket_location = US cloudfront_host = cloudfront.amazonaws.com default_mime_type = binary/octet-stream delete_removed = False dry_run = False enable_multipart = True encoding = UTF-8 encrypt = False follow_symlinks = False force = False get_continue = False gpg_command = /usr/bin/gpg gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s gpg_passphrase = guess_mime_type = True host_base = rgw node1.cephcookbook.com:7480 host_bucket = %(bucket)s.rgw node1.cephcookbook.com:7480 human_readable_sizes = False invalidate_on_cf = False list_mdS = False log_target_prefix = mime_type = multipart_chunk_size_mb = 15 preserve_attrs = True progress_meter = True proxy_host = proxy_port = 0 recursive = False recv_chunk = 4096 reduced_redundancy = False secret_key = 321mow6EPs6Sz4xtT7h+rpiDmhQBvlgwqVeic5RMg send_chunk = 4096 simpledb_host = sdb.amazonaws.com skip_existing = False socket_timeout = 300 urlencoding_mode = normal use_https = False verbosity = WARNING website_endpoint = http://%(bucket)s.s3-website-%(location)s.amazonaws.com/ website_error = website_index = index.html
-
-
Наконец мы создаём пакеты (buckets) и помещаем объекты в них:
# s3cmd mb s3://first-bucket # s3cmd ls # s3cmd put /etc/hosts s3://first-bucket # s3cmd ls s3://first-bucket root@client-node1:~# s3cmd mb s3://first-bucket Bucket 's3://first-bucket/' created root@client-node1:~# root@client-node1:~# s3cmd ls 2015-04-11 23:55 s3://first-bucket root@client-node1:~# root@client-node1:~# s3cmd put /etc/hosts s3://first-bucket WARNING: Module python-magic is not available. Guessing MIME types based on file extensions. /etc/hosts -> s3://first-bucket/hosts [1 of 1] 601 of 601 100% in ls 436.06 B/s done root@client-node1:~# root@client-node1:~# root@client-node1:~# s3cmd ls s3://first-bucket 2015-04-11 23:55 601 s3://first-bucket/hosts root@client-node1:~#
Ceph поддерживает RESTful API который совместим с основной моделью доступа API Swift. В последнем разделе мы рассказывали о доступе к кластеру Ceph через API S3; в этом разделе мы изучим доступ через API Swift.
Чтобы использовать хранилище объектов Ceph при промощи API Swift нам необходим подпользователь Swift и ключ безопасности который мы создали ранее в этой главе. Эта информация о пользователе будет затем передана с применением интструментария Swift CLI чтобы осуществить доступ к хранилищу объектов Ceph:
-
На
client-node1
виртуальная машина установит вашего клиента python Swift:# apt-get install python-setuptools # easy_install pip # pip install --upgrade setuptools # pip install --upgrade python-swiftclient
-
Получите подпользователя Swift и ключи безопасности:
# radosgw-admin user info --uid mona
-
Получите доступ к хранилищу объектов Ceph просмотрев список сегмента (bucket) по умолчанию:
# swift -A http://192.168.1.106:7480/auth/1.0 -U mona:swift -K 6vxGDhuEBsPSyX1E7vYvFrTXLVqoJByMHT+jnXPV list
-
Добавьте новый сегмент,
second-bucket
:# swift -A http://192.168.1.106:7480/auth/1.0 -U mona:swift -K 6vxGDhuEBsPSyX1E7vYvFrTXLVqoJByMHT+jnXPV post second-bucket
-
Выведите перечень сегментов (bucket); он также отобразит ваш новый
second-bucket
:# swift -A http://192.168.1.106:7480/auth/1.0 -U mona:swift -K 6vxGDhuEBsPSyX1E7vYvFrTXLVqoJByMHT+jnXPV list root@client-node1:~# swift -A http://192.168.1.106:7480/auth/1.0 -U mona:swift -K 6vxGDhuEBsPSyX1E7vYvFrTXLVqoJByMHT+jnXPV list first-bucket root@client-node1:~# root@client-node1:~# swift -A http://192.168.1.106:7480/auth/1.0 -U mona:swift -K 6vxGDhuEBsPSyX1E7vYvFrTXLVqoJByMHT+jnXPV post second-bucket root@client-node1:~# swift -A http://192.168.1.106:7480/auth/1.0 -U mona:swift -K 6vxGDhuEBsPSyX1E7vYvFrTXLVqoJByMHT+jnXPV list first-bucket second-bucket root@client-node1:~#
Рецепт Создание пользователя radosgw.
Ceph может быть интегрирован с вашей службой управления идентификацией OpenStack, 'Keystone'. При такой интеграции RGW Ceph настраивается принимать маркеры (token) Keystone для авторизации пользователей. Таким образом, все удостоверенные Keystone пользователи получат права для доступа к RGW.
Выполните следующие команды на вашем openstack-node1
, если не предписано иное:
-
Настройте OpenStack для указания на Ceph RGW создав соответствующую службу и её терминалы:
# keystone service-create --name swift --type object-store --description "ceph object store" # keystone endpoint-create --serviceid 6614554878344bbeaa7fec0d5dccca7f --publicurl http://192.168.1.106:7480/swift/v1 --internalurl http://192.168.1.106:7480/swift/v1 --adminurl http://192.168.1.106:7480/swift/v1 --region RegionOne [root@os-node1 ~(keystone_admin)]# keystone service-create --name swift --type object-store --description "ceph object store" +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | ceph object store | | enabled | True | | id | 6614554878344bbeaa7fec0d5dccca7f | | name | swift | | type | object-store | +-------------+----------------------------------+ [root@os-node1 ~(keystone_admin)]# [root@os-node1 ~(keystone_admin)]# keystone endpoint-create --service-id 6614554878344bbeaa7fec0d5dccca7f --publicurl http://192.168.1.106:7480 /swift/vl --internalurl http://192.168.1.106:7480/swift/v1 --adminurl http://192.168.1.106:7480/swift/v1 --region RegionOne +-------------+------------------------------------+ | Property | Value | +-------------+------------------------------------+ | adminurl | http://192.168.1.106:7480/swift/v1 | | id | 1f962773df6c438e9658fc8cc027d86f | | internalurl | http://192.168.1.106:7480/swift/v1 | | publicurl | http://192.168.1.106:7480/swift/v1 | | region | RegionOne | | service_id | 6614554878344bbeaa7fec0d5dccca7f | +-------------+------------------------------------+ [root@os-node1 ~(keystone_admin)]#
-
Получите свой маркер администратора Keystone, который будет использоваться для настройки RGW:
# cat /etc/keystone/keystone.conf | grep -i admin_token
-
Создайте каталог для сертификатов:
# mkdir -p /var/ceph/nss
-
Сгененрируйте сертификаты
openssl
:# openssl x509 -in /etc/keystone/ssl/certs/ca.pem -pubkey|certutil -d /var/ceph/nss -A -n ca -t "TCu,Cu,Tuw" # openssl x509 -in /etc/keystone/ssl/certs/signing_cert.pem -pubkey | certutil -A -d /var/ceph/nss -n signing_cert -t "P,P,P" [root@os-node1 ~(keystone_admin)]# mkdir -p /var/ceph/nss [root@os-node1 ~(keystone_admin)]# openssl x509 -in /etc/keystone/ssl/certs/ca.pem -pubkey|certutil -d /var/ceph/nss -A -n ca -t "TCu,Cu,Tuw" Notice: Trust flag u is set automatically if the private key is present. [root@os-node1 ~(keystone_admin)]# [root@os-node1 ~(keystone_admin)]# openssl x509 -in /etc/keystone/ssl/certs/signing_cert.pem -pubkey | certutil -A -d /var/ceph/nss -n signing_cert -t "P,P,P" [root@os-node1 ~(keystone_admin)]# ls -1 /var/ceph/nss/ total 76 -rw------- 1 root root 65536 Apr 17 00:40 cert8.db -rw------- 1 root root 16384 Apr 17 00:40 key3.db -rw------- 1 root root 16384 Apr 17 00:38 secmod.db [root@os-node1 ~(keystone_admin)]#
-
Создайте
/var/ceph/nss directory
наrgw-node1
:# mkdir -p /var/ceph/nss
-
Скопируйте
openssl
сертификаты сopenstack-node1
наrgw-node1
. Если вы регистрируетесь в первый раз, вы получите кведомление SSH; наберитеyes
, затем введите парольroot
, который установлен в значениеvagrant
для всех ваших машин:# scp /var/ceph/nss/* rgw-node1:/var/ceph/nss
-
На
rgw-node1
создайте каталоги и измените их владельца наApache
:# mkdir /var/run/ceph # chown apache:apache /var/run/ceph # chown -R apache:apache /var/ceph/nss
-
На
client-node1
rgw-node1
:# apt-get install python-setuptools
-
Измените
/etc/ceph/ceph.conf
наrgw-node1
следующими записями в разделе[client.radosgw.gateway]
:rgw keystone url = http://192.168.1.111:5000 rgw keystone admin token = f72adb0238d74bb885005744ce526148 rgw keystone accepted roles = admin, Member, swiftoperator rgw keystone token cache size = 500 rgw keystone revocation interval = 60 rgw s3 auth use keystone = true nss db path = /var/ceph/nss
-
Наконец запустите службу
ceph-radosgw
:# systemctl restart ceph-radosgw
-
Теперь чтобы протестировать интеграцию Keystone и Ceph, переключимся назад на
openstack-node1
и выполним основные команды Swift, причём они не должны запрашивать у нас никаких ключей пользователей:# swift list # swift post swift-test-bucket # swift list [root@os-node1 ~(keystone_admin)]# swift list [root@os-node1 ~(keystone_admin)]# swift post swift-test-bucket [root@os-node1 ~(keystone_admin)]# swift list swift-test-bucket [root@os-node1 ~(keystone_admin)]#
-
Вы должны быть в состоянии выполнять любые операции с сегментами (bucket) с применением как
swift cli
, так и из инструментальной панели OpenStack Horizon, в разделеObject storage
, без каких- либо запросов полномочий для пользователя RGW Ceph; это обусловлено выполненными нами изменениями настроек, проверяемые Keystone маркеры (token) теперь принимаются вашим RGW Ceph.
Ceph RGW может быть развёрнут в федеративных конфигурациях с множеством регионов, а также множеством зон для региона.
Как показано на схеме ниже, множественные экземпляры Ceph radosgw могут быть развёрнуты географически разделяемым
образом. Настройка регионов шлюзов объектов Ceph и агенты синхронизации метаданных помогают поддерживать единое пространство
имён, даже если экземпляры radosgw
работают в различных географических местоположениях
или различных кластерах хранения Ceph.
Другой подход состоит в размещении одного или более экземпляров Ceph radosgw
которые
ещё географически разделены в пределах региона в раздельных логических контейнерах, называемых зонами. В этом случае агент
синхронизации данных также делает возможным вашей службе поддерживать одну или более копий данных вашей главной зоны в
пределах региона в том же кластере Ceph. Эти дополнительные копии данных важны для вариантов применения резервного копирования
или восстановления после отказов.
В данном рецепте мы изучим как размещать последним методом федерации Ceph radosgw
.
В соответствии с этим, мы создадим главный (master) регион, US
,который будет размещать
две зоны: master zone
: us-east
, содержащую
экземпляр RGW us-east-1
, и secondary zone
:
us-west
, содержащую экземпляр RGW us-west-1
.
Далее приводятся параметры и их значения, которые мы будем применять:
-
Главный Регион → Соединённые Штаты:
us
-
Главная Зона → зона восточного региона Соединённых Штатов:
us-east
-
Вторичная Зона → зона западного региона Соединённых Штатов:
us-west
-
Экземпляр-1
radosgw
→ Экземпляр1 зоны восточного региона Соединённых Штатов:us-east-1
-
Экземпляр-2
radosgw
→ Экземпляр1 зоны западного региона Соединённых Штатов:us-west-1
-
На вашей машине хоста поднимите виртуальные машины
us-east-1
иus-west-1
с применением Vagrant:$ cd ceph-cookbook $ vagrant status us-east-1 us-west-1 $ vagrant up us-east-1 us-west-1 $ vagrant status us-east-1 us-west-1setuptools teeri:ceph-cookbook ksingh$ vagrant status us-east-1 us-west-1 Current machine states: us-east-1 running (virtualbox) us-west-1 running (virtualbox) This environment represents multiple vms. The vms are all listed above with their current state. For more information about a specific VM, run `vagrant status NAME`. teeri:ceph-cookbook ksingh$
С этого момента мы будем выполнять все команды с любой из ваших машин монитора Ceph пока не определено иное. В нашем случае мы будем применять
ceph-node1
. Далее мы создадим пулы Ceph, которые будут применяться для хранения пучка критически важной информации о данных хранилища объектов, такие как сегмент (bucket), индекс сегмента, глобального каталога, журналов, идентификаторов пользователя S3, учётных записей пользователя Swift, адресов электронной почты и тому подобного. -
Создайте пулы Ceph для вашей зоны
us-east
:# ceph osd pool create .us-east.rgw.root 32 32 # ceph osd pool create .us-east.rgw.control 32 32 # ceph osd pool create .us-east.rgw.gc 32 32 # ceph osd pool create .us-east.rgw.buckets 32 32 # ceph osd pool create .us-east.rgw.buckets.index 32 32 # ceph osd pool create .us-east.rgw.buckets.extra 32 32 # ceph osd pool create .us-east.log 32 32 # ceph osd pool create .us-east.intent-log 32 32 # ceph osd pool create .us-east.usage 32 32 # ceph osd pool create .us-east.users 32 32 # ceph osd pool create .us-east.users.email 32 32 # ceph osd pool create .us-east.users.swift 32 32 # ceph osd pool create .us-east.users.uid 32 32
-
Создайте пулы Ceph для вашей зоны
us-west
:# ceph osd pool create .us-west.rgw.root 32 32 # ceph osd pool create .us-west.rgw.control 32 32 # ceph osd pool create .us-west.rgw.gc 32 32 # ceph osd pool create .us-west.rgw.buckets 32 32 # ceph osd pool create .us-west.rgw.buckets.index 32 32 # ceph osd pool create .us-west.rgw.buckets.extra 32 32 # ceph osd pool create .us-west.log 32 32 # ceph osd pool create .us-west.intent-log 32 32 # ceph osd pool create .us-west.usage 32 32 # ceph osd pool create .us-west.users 32 32 # ceph osd pool create .us-west.users.email 32 32 # ceph osd pool create .us-west.users.swift 32 32 # ceph osd pool create .us-west.users.uid 32 32
-
Проверьте только что созданные пулы Ceph:
# ceph osd lspools [root@ceph-node1 ~]# ceph osd lspools 0 rbd,1 images,2 volumes,3 vms,4 .rgw.root,5 .rgw.contro1,6 .rgw,7 .rgw.gc,8 .users.uid,9 .users.emai1,10 .users,11 .users.swift,12 .rgw.buckets.index,13 .rgw.buckets,14 .us-east.rgw.root,15 .us-east.rgw.contro1,16 .us-east.rgw.gc,1 7 .us-east.rgw.buckets,18 .us-east. rgw.buckets.index,19 .us-east.rgw.buckets.extra,20 .us-east.log,21 .us-east.inten t-log,22 .us-east.usage,23 .us-east.users,24 .us-east.users.emai1,25 .us-east.users.swift,26 .us-east.users.uid,27 . us-west.rgw.root,28 .us-west.rgw.contro1,29 .us-west.rgw.gc,30 .us-west.rgw.buckets,31 .us-west.rgw.buckets.index,32 .us-west.rgw.buckets.extra,33 .us-west.log,34 .us-west.intent-log,35 .us-west.usage,36 .us-west.users,37 .us-west.0 sers.emai1,38 .us-west.users.swift,39 .us-west.users.uid, [root@ceph-node1 ~]#
-
Экземпляру RGW требуется пользователь и ключ для общения с вашим кластером хранения Ceph:
-
При помощи следующей команды создайте кольцо ключей:
# ceph-authtool --create-keyring /etc/ceph/ceph.client.radosgw.keyring # chmod +r /etc/ceph/ceph.client.radosgw.keyring
-
Сгенерируйте имя пользователя и ключ шлюза для каждого экземпляра:
# ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.us-east-1 --gen-key # ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.us-west-1 --gen-key
-
Добавьте возможности ключам:
# ceph-authtool -n client.radosgw.us-east-1 --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring # ceph-authtool -n client.radosgw.us-west-1 --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring
-
Добавьте ключи в ваш кластер хранения Ceph:
# ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.us-east-1 -i /etc/ceph/ceph.client.radosgw.keyring # ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.us-west-1 -i /etc/ceph/ceph.client.radosgw.keyring [root@ceph-node1 ~]# ceph-authtool --create-keyring /etc/ceph/ceph.client.radosgw.keyring creating /etc/ceph/ceph.client.radosgw.keyring [root@ceph-node1 ~]# chmod +r /etc/ceph/ceph.client.radosgw.keyring [root@ceph-node1 ~]# ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.us-east-1 --gen-key [root@ceph-node1 ~]# ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.us-west-1 --gen-key [root@ceph-node1 ~]# ceph-authtool -n client.radosgw.us-east-1 --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring [root@ceph-node1 ~]# ceph-authtool -n client.radosgw.us-west-1 --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring [root@ceph-node1 ~]# [root@ceph-node1 ~]# ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.us-east-1 /etc/ceph/ceph.client.radosgw.keyring added key for client.radosgw.us-east-1 [root@ceph-node1 ~]# [root@ceph-node1 ~]# ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.us-west-1 /etc/ceph/ceph .client.radosgw.keyring added key for client. radosgw.us-west-1 [root@ceph-node1 ~]#
-
-
Добавьте экземпляры RGW в ваш файл настроек Ceph, то есть
/etc/ceph/ceph.conf
:[client.radosgw.us-east-1] host = us-east-1 rgw region = us rgw region root pool = .us.rgw.root rgw zone = us-east rgw zone root pool = .us-east.rgw.root keyring = /etc/ceph/ceph.client.radosgw.keyring rgw dns name = rgw-node1 rgw socket path = /var/run/ceph/client.radosgw.us-east-1.sock log file = /var/log/ceph/client.radosgw.us-east-1.log [client.radosgw.us-west-1] host = us-west-1 rgw region = us rgw region root pool = .us.rgw.root rgw zone = us-west rgw zone root pool = .us-west.rgw.root keyring = /etc/ceph/ceph.client.radosgw.keyring rgw dns name = rgw-ndoe1 rgw socket path = /var/run/ceph/client.radosgw.us-west-1.sock log file = /var/log/ceph/client.radosgw.us-west-1.log [root@ceph-node1 ceph]# tail -22 ceph.conf [client.radosgw.us-east-1] host = us-east-1 rgw region = us rgw region root pool = .us.rgw.root rgw zone = us-east rgw zone root pool = .us-east.rgw.root keyring = /etc/ceph/ceph.client.radosgw.keyring rgw dns name = rgw-node1 rgw socket path = /var/run/ceph/client.radosgw.us-east-1.sock log file = /var/log/ceph/client.radosgw.us-east-1.log [client. radosgw.us-west-1] host = us-west-1 rgw region = us rgw region root pool = .us.rgw.root rgw zone = us-west rgw zone root pool = .us-west.rgw.root keyring = /etc/ceph/ceph.client.radosgw.keyring rgw dns name = rgw-node1 rgw socket path = /var/run/ceph/client.radosgw.us-west-1.sock log file = /var/log/ceph/client.radosgw.us-west-1.log [root@ceph-node1 ceph]#
-
Далее мы установим пакеты Ceph на узлы
us-east-1
иus-west-1
с помощьюceph-deploy
с вашей машиныceph-node1
. Наонец, мы добавим файлы настроек на эти узлы:-
Позволим
cep-node1
выполнять регистрацию на ваших узлах RGW без паролей. Парольroot
установлен по умолчанию, то естьvagrant
:# ssh-copy-id us-east-1 # ssh-copy-id us-west-1
-
Установите пакеты Ceph на ваши экземпляры RGW:
# ceph-deploy install us-east-1 us-west-1
-
Когда пакеты Ceph установятся на ваш экземпляр RGW, поместите файлы настроек Ceph:
# ceph-deploy --overwrite-conf config push us-east-1 uswest-1
-
Скопируйте кольца ключей RGW с
ceph-node
на экземпляр шлюза:# scp ceph.client.radosgw.keyring us-east-1:/etc/ceph # scp ceph.client.radosgw.keyring us-west-1:/etc/ceph
-
Далее установите пакеты
ceph-radosgw
иradosgw-agent
на экземпляры radosgwus-east-1
иus-west-1
:# ssh us-east-1 yum install -y ceph-radosgw radosgw-agent # ssh us-west-1 yum install -y ceph-radosgw radosgw-agent
-
Для простоты мы запретим межсетевые экраны на ваших узлах:
# ssh us-east-1 systemctl disable firewalld # ssh us-east-1 systemctl stop firewalld # ssh us-west-1 systemctl disable firewalld # ssh us-west-1 systemctl stop firewalld
-
-
Создайте регион
us
. Зарегистрируйтесь наus-east-1
и выполните следующие команды:-
Создайте infile региона с названием
us.json
в каталоге/etc/ceph
со следующим содержимым. Вы можете использовать для справки авторскую версию вашего файлаus.json
поставляемого с пакетом кода данной главы:{ "name": "us", "api_name": "us", "is_master": "true", "endpoints": [ "http:\/\/us-east-1.cephcookbook.com:7480\/"], "master_zone": "us-east", "zones": [ { "name": "us-east", "endpoints": [ "http:\/\/us-east-1.cephcookbook.com:7480\/"], "log_meta": "true", "log_data": "true"}, { "name": "us-west", "endpoints": [ "http:\/\/us-west-1.cephcookbook.com:7480\/"], "log_meta": "true", "log_data": "true"}], "placement_targets": [ { "name": "default-placement", "tags": [] } ], "default_placement": "default-placement"} [root@us-east-1 ceph]# cat us.json { "name": "us", "api_name": "us", "is_master": "true", "endpoints": [ "http:\/\/us-east-1.cephcookbook.com:7480\/"], "master_zone": "us-east", "zones": [ { "name": "us-east", "endpoints": [ "http:\/\/us-east-1.cephcookbook.com:7480\/"], "log_meta": "true", "log_data": "true"}, { "name": "us-west", "endpoints": [ "http:\/\/us-west-1.cephcookbook.com:7480\/"], "log_meta": "true", "log_data": "true"}], "placement_targets": [ { "name": "default-placement", "tags": [] } ], "default_placement": "default-placement"} [root@us-east-1 ceph]#
-
Создайте регион
us
с только что созданным вами infileus.json
:# cd /etc/ceph # radosgw-admin region set --infile us.json --name client.radosgw.us-east-1
-
Удалите регион по умолчанию, если он существует:
# rados -p .us.rgw.root rm region_info.default --name client.radosgw.us-east-1
-
Установите регион
us
в качестве региона по умолчанию:# radosgw-admin region default --rgw-region=us --name client.radosgw.us-east-1
-
Наконец, обновите карту региона:
# radosgw-admin regionmap update --name client.radosgw.us-east-1
-
-
Сгенерируйте
access_keys
иsecret_keys
для зонus-east
иus-west
:-
Сгенерируйте
access_keys
для вашей зоныus-east
:# < /dev/urandom tr -dc A-Z-0-9 | head -c${1:-20};echo;
-
Сгенерируйте
secret_keys
для вашей зоныus-east
:# < /dev/urandom tr -dc A-Z-0-9-a-z | head -c${1:-40};echo; [root@us-east-1 ceph]# < /dev/urandom tr -dc A-Z-0-9 | head -c$11:-20};echo; XNK0ST8WXTMWZGN29NF9 [root@us-east-1 ceph]# [root@us-east-1 ceph]# < /dev/urandom tr -dc A-Z-0-9-a-z | head -c$11:-40};echo; 7VJm8uAp7lxKQZkjoPZmHu4sACA1SY8jTjay9dP5 [root@us-east-1 ceph]#
-
Сгенерируйте
access_keys
для вашей зоныus-west
:# < /dev/urandom tr -dc A-Z-0-9 | head -c${1:-20};echo;
-
Сгенерируйте
secret_keys
для вашей зоныus-west
:# < /dev/urandom tr -dc A-Z-0-9-a-z | head -c${1:-40};echo; [root@us-east-1 ceph]# < /dev/urandom tr -dc A-Z-0-9 | head -c${1:-20};echo; AAK0ST8WXTMWZGN29NF9 [root@us-east-1 ceph]# < /dev/urandom tr -dc A-Z-0-9-a-z | head -c${1:-40};echo; AAJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dPS [root@us-east-1 ceph]#
-
-
Создайте infile зоны с названием
us-east.json
для вашей зоныus-east
. Вы можете применять для справки авторский файлus-east.json
предоставляемый пакетом кода данной главы:{ "domain_root": ".us-east.domain.rgw", "control_pool": ".us-east.rgw.control", "gc_pool": ".us-east.rgw.gc", "log_pool": ".us-east.log", "intent_log_pool": ".us-east.intent-log", "usage_log_pool": ".us-east.usage", "user_keys_pool": ".us-east.users", "user_email_pool": ".us-east.users.email", "user_swift_pool": ".us-east.users.swift", "user_uid_pool": ".us-east.users.uid", "system_key": { "access_key": " XNK0ST8WXTMWZGN29NF9", "secret_key": "7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5"}, "placement_pools": [ { "key": "default-placement", "val": { "index_pool": ".us-east.rgw.buckets.index", "data_pool": ".us-east.rgw.buckets"} } ] } [root@us-east-1 ceph]# cat us-east.json { "domain_root": ".us-east.domain.rgw", "control_pool": ".us-east.rgw.control", "gc_pool": ".us-east.rgw.gc", "log_pool": ".us-east.log", "intent_log_pool": ".us-east.intent-log", "usage_log_pool": ".us-east.usage", "user_keys_pool": ".us-east.users", "user_email_pool": ".us-east.users.email", "user_swift_pool": ".us-east.users.swift", "user_uid_pool": ".us-east.users.uid", "system_key": { "access_key": "XNK0ST8WXTMWZGN29NF9", "secret_key": "7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5"}, "placement_pools": [ { "key": "default-placement", "val": { "index_pool": ".us-east.rgw.buckets.index", "data_pool": ".us-east.rgw.buckets"} } ] } [root@us-east-1 ceph]#
-
Добавьте применение infile зоны
us-east
и в east, и в west пулы:# radosgw-admin zone set --rgw-zone=us-east --infile us-east.json --name client.radosgw.us-east-1 [root@us-east-1 ceph]# radosgw-admin zone set --rgw-zone.us-east --infile us-east.json --name client.radosgw.us-east-1 2015-05-03 21:56:38.878117 7fc365bd5880 0 couldn't find old data placement pools config, setting up new ones for the zone { "domain_root": ".us-east.domain.rgw", "control pool": ".us-east.rgw.control", "gc_pool": ".us-east.rgw.gc", "log_pool": ".us-east.log", "intent_log_pool": ".us-east.intent-log", "usage_log_pool": ".us-east.usage", "user_keys_pool": ".us-east. users", "user_email_pool": ".us-east.users.email", "user_swift_pool": ".us-east.users.swift", "user_uid_pool": ".us-east.users.uid", "system_key": { "access_key": "XNK0ST8WXTMWZGN29NF9", "secret_key": "7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5", "placement_pools": [ { "key": "default-placement", "van { "index_pool": ".us-east.rgw.buckets.index", "data_pool": ".us-east.rgw.buckets", "data_extra_pool": ""} }] } [root@us-east-1 ceph]# [root@us-east-1 ceph]#
Теперь выполните следующую команду:
# radosgw-admin zone set --rgw-zone=us-east --infile us-east.json --name client.radosgw.us-west-1 [root@us-east-1 ceph]# radosgw-admin zone set --rgw-zone=us-east --infile us-east.json --name client.radosgw.us-west-1 2015-05-03 21:58:58.982509 7f4b14f47880 0 couldn't find old data placement pools config, setting up new ones for the zone { "domain_root": ".us-east.domain.rgw", "control_pool": ".us-east.rgw.control", "gc_pool": ".us-east.rgw.gc", "log_pool": ".us-east.log", "intent_log_pool": ".us-east.intent-log", "usage_log_pool": ".us-east.usage", "user_keys_pool": ".us-east.users", "user_email_pool": ".us-east.users.email", "user_swift_pool": ".us-east.users.swift", "user_uid_pool": ".us-east.users.uid", "system_key": { "access_key": "XNK0ST8WXTMWZGN29NF9", "secret_key": "7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5"}, "placement_pools": [ "key": "default-placement", "val": { "index_pool": ".us-east.rgw.buckets.index", "data_pool": ".us-east.rgw.buckets", "data_extra_pool": ""} }] } [root@us-east-1 ceph]# [root@us-east-1 ceph]#
-
Аналогично, для зоны
us-west
создайте infileus-west.json
со следующим содержимым. Вы можете для справки использовать авторскую версию файлаus-west.json
предоставляемую пакетом кода для данной главы:{ "domain_root": ".us-west.domain.rgw", "control_pool": ".us-west.rgw.control", "gc_pool": ".us-west.rgw.gc", "log_pool": ".us-west.log", "intent_log_pool": ".us-west.intent-log", "usage_log_pool": ".us-west.usage", "user_keys_pool": ".us-west.users", "user_email_pool": ".us-west.users.email", "user_swift_pool": ".us-west.users.swift", "user_uid_pool": ".us-west.users.uid", "system_key": { "access_key": "AAK0ST8WXTMWZGN29NF9", "secret_key": "AAJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5"}, "placement_pools": [ { "key": "default-placement", "val": { "index_pool": ".us-west.rgw.buckets.index", "data_pool": ".us-west.rgw.buckets"} }] } [root@us-east-1 ceph]# cat us-west.json { "domain_root": ".us-west.domain.rgw", "control_pool": ".us-west.rgw.control", "gc_pool": ".us-west.rgw.gc", "log_pool": ".us-west.log", "intent_logpool": ".us-west.intent-log", "usage_log_pool": ".us-west.usage", "user_keys_pool": ".us-west.users", "user_email_pool": ".us-west.users.email", "user_swift_pool": ".us-west.users.swift", "user_uid_pool": ".us-west.users.uid", "system_key": { "access_key": "AAK0ST8WXTMWZGN29NF9", "secret_key": "AAJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5"}, "placement_pools": [ {"key": "default-placement", "val: {"index_pool": ".us-west.rgw.buckets.index", "data_pool": ".us-west.rgw.buckets"} }] } [root@us-east-1 ceph]#
-
Добавьте зону
us-west
с использованием infile в east и west пулы:# radosgw-admin zone set --rgw-zone=us-west --infile us-west.json --name client.radosgw.us-east-1 [root@us-east-1 ceph]# radosgw-admin zone set --rgw-zone=us-west --infile us-west.json --name client.radosgw.us-east-1 2015-05-03 22:03:16.279758 7f4ac6bd4880 0 couldn't find old data placement pools config, setting up new ones for the zone { "domain_root": ".us-west.domain.rge", "control_pool": ".us-west.rgw.control", "gc_pool": ".us-west.rgw.gc", "log_pool": ".us-west.log", "intent_log_pool": ".us-west.intent-log", "usage_log_pool": ".us-west.usage", "user_keys_pool": ".us-west.users", "user_email_pool": ".us-west.users.email", "user_swift_pool": ".us-west.users.swift", "user_uid_pool": ".us-west.users.uid", "system_key": {"access_key": "AAK0ST8WXTMWZGN29NF9", "secret_key": "AAJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5"}, "placement_pools": [ { "key": "default-placement", "val": { "index_pool": ".us-west.rgw.buckets.index", "data_pool": ".us-west.rgw.buckets", "data_extra_pool": ""} }] } [root@us-east-1 ceph]# [root@us-east-1 ceph]# # radosgw-admin zone set --rgw-zone=us-west --infile us-west.json --name client.radosgw.us-west-1 [root@us-east-1 ceph]# radosgw-admin zone set --rgw-zone=us-west --infile us-west.json --name client.radosgw.us-west-1 2015-05-03 22:04:48.050644 7f74fd327880 0 couldn't find old data placement pools config, setting up new ones for the zone { "domain_root": ".us-west.domain.rgw", "control_pool": ".us-west.rgw.control", "gc_pool": ".us-west.rgw.gc", "log_pool": ".us-west.log", "intent_log_pool": ".us-west.intent-log", "usage_log_pool": ".us-west.usage", "user_keys_pool": ".us-west.users", "user_email_pool": ".us-west.users.email", "user_swift_pool": ".us-west.users.swift", "user_uid_pool": ".us-west.users.uid", "system_key": { "access_key": "AAKOST8WXTMWZGN29NF9", "secret_key": "AA3m8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5"}, "placement_pools": [ { "key": "default-placement", "val": { "index_pool": ".us-west.rgw.buckets.index", "data_pool": ".us-west.rgw.buckets", "data_extra_pool": ""} }] } [root@us-east-1 ceph]# [root@us-east-1 ceph]#
-
Удалите зону по умолчанию, если она существует:
# rados -p .rgw.root rm zone_info.default --name client.radosgw.us-east-1
-
Обновите карту региона:
# radosgw-admin regionmap update --name client.radosgw.us-east-1
-
После настройки зон создайте пользователей зон:
-
Создайте своего пользователя зоны
us-east
для вашего экземпляра шлюзаus-east-1
. Применяйте те жеaccess_key
иsecret_key
, которые мы сгенерировали ранее для зоныus-east
:# radosgw-admin user create --uid="us-east" --displayname="Region-US Zone-East" --name client.radosgw.useast-1 --access_key="XNK0ST8WXTMWZGN29NF9" --secret="7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5" --system [root@us-east-1 ceph]# radosgw-admin user create --uid="us-east" --displayname="Region-US Zone-East" --name client.radosgw.useast-1 --access_key="XNK0ST8WXTMWZGN29NF9" --secret="7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5" --system { "user_id": "us-east", "display_name": "Region-US Zone-East", "email": "", "suspended": 0, "max_buckets": 1000, "auid": 0, "subusers": [], "keys": [ { "user": "us-east", "access_key": "XNK0ST8WXTMWZGN29NF9", "secret_key": "7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5"}], "swift_keys": [], "caps": [], "op_mask": "read, write, delete", "system": "true", "default_placement": "", "placement_tags" : [], "bucket_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1}, "user_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1}, "temp_url_keys": [] } [root@us-east-1 ceph]#
-
Создайте своего пользователя зоны
us-west
для вашего экземпляра шлюзаus-west-1
. Применяйте те жеaccess_key
иsecret_key
, которые мы сгенерировали ранее для зоныus-west
:# radosgw-admin user create --uid="us-west" --displayname="Region-US Zone-West" --name client.radosgw.uswest-1 --access_key="AAK0ST8WXTMWZGN29NF9" --secret="AAJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5" --system [root@us-east-1 ceph]# radosgw-admin user create --uid="us-west" --displayname="Region-US Zone-West" --name client.radosgw.uswest-1 --access_key="AAK0ST8WXTMWZGN29NF9" --secret="AAJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5" --system { "user_id": "us-west", "display_name": "Region-US zone-West", "email": "", "suspended": 0, "max_buckets": 1000, "auid": 0, "subusers": [], "keys": [ { "user": "us-west", "access_key": "AAK0ST8WXTMWZGN29NF9", "secret_key": "AAJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5"}], "swift_keys": [], "caps": [], "op_mask": "read, write, delete", "system": "true", "default_placement": "", "placement_tags": [], "bucket_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1}, "user_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1}, "temp_url_keys": [] } [root@us-east-1 ceph]#
-
Создайте своего пользователя зоны
us-east
для вашего экземпляра шлюзаus-west-1
. Применяйте те жеaccess_key
иsecret_key
, которые мы сгенерировали ранее для зоныus-east
:# radosgw-admin user create --uid="us-east" --displayname="Region-US Zone-East" --name client.radosgw.uswest-1 --access_key="XNK0ST8WXTMWZGN29NF9" --secret="7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5" --system [root@us-east-1 ceph]# radosgw-admin user create --uid="us-east" --displayname="Region-US Zone-East" --name client.radosgw.uswest-1 --access_key="XNK0ST8WXTMWZGN29NF9" --secret="7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5" --system { "user_id": "us-east", "display_name" : "Region-US zone-East", "suspended": 0, "max.buckets" : 1000, "auid" : 0, "subusers": [] , "keys": [ { "user": "us-east", "access_key" : "XNK0ST8WXTMWZGN29NF9", "secret_key" : "7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5"}] , "swift-keys": [], "caps": [], "op_mask" : "read, write, delete", "system" : "true", "default_placement" : "" , "placement_tags": [] , "bucket_guota" : { "enabled": false, "max_size_kb": -1, "max_objects, -1}", "user_guota": { "enabled": false, "max_size_kb": -1, "max_objects": -1}, "temp_url_keys": [] } [root@us-east-1 ceph]#
-
Создайте своего пользователя зоны
us-west
для вашего экземпляра шлюзаus-east-1
. Применяйте те жеaccess_key
иsecret_key
, которые мы сгенерировали ранее для зоныus-west
:# radosgw-admin user create --uid="us-west" --displayname="Region-US Zone-West" --name client.radosgw.useast-1 --access_key="AAK0ST8WXTMWZGN29NF9" --secret="AAJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5" --system [root@us-east-1 ceph]# radosgw-admin user create --uid="us-west" --displayname="Region-US Zone-West" --name client.radosgw.useast-1 --access_key="AAK0ST8WXTMWZGN29NF9" --secret="AAJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5" --system { "user_id": "us-west", "display_name" : "Region-US zone-west", "suspended" : 0, "max_buckets" : 1000, "auid" : 0, "subusers" : [] , "keys": [ { "user" : "us-west", "access_key" : "AAK0ST8WXTMWZGN29NF9" , "secret_key" : "AAJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5"}] , "swift_keys" : [] , "caps" : [] , "op_mask" : "read, write, delete", "system" : "true", "default_placement" : "" , "placement_tags" : [] , "bucket_guota" : { "enabled": false, "max_size_kb": -1, "max_objects" : -1} , "user_quota" : { "enabled": false, "max_size_kb" : -1, "max_objects" : -1} , "temp_url _keys" : [] } [root@us-east-1 ceph]#
-
-
Обновите сценарий инициализации
ceph-radosgw
и установите пользователем по умолчаниюroot
. По умолчанию выполнениеceph-radosgw
применяет пользователяApache
и вы можете столкнуться с ошибками если пользовательApache
отсутствует:# sed -i s"/DEFAULT_USER.*=.*'apache'/DEFAULT_USER='root'"/g /etc/rc.d/init.d/ceph-radosgw [root@us-east-1 ceph]# cat /etc/rc.d/init.d/ceph-radosgw | grep -i root DEFAULT_USEIR = 'root' [root@us-east-1 ceph]#
-
Зарегистрируйтесь на ваших узлах
us-east-1
иus-west-1
и перезапустите службуceph-radosgw
:# systemctl restart ceph-radosgw
-
Проверьте что настройки региона, зоны и
ceph-radosgw
верны, выполните следующие команды с узлаus-east-1
:# radosgw-admin regions list --name client.radosgw.us-east-1 # radosgw-admin regions list --name client.radosgw.us-west-1 # radosgw-admin zone list --name client.radosgw.us-east-1 # radosgw-admin zone list --name client.radosgw.us-west-1 # curl http://us-east-1.cephcookbook.com:7480 # curl http://us-west-1.cephcookbook.com:7480 [root@us-east-1 ceph]# radosgw-admin regions list --name client.radosgw.us-east-1 { "default_info": {"default_region": "us"}, "regions": [ "us"]} [root@us-east-1 ceph]# radosgw-admin regions list --name client.radosgw.us-west-1 { "default_info": "default_region": "us"}, "regions": [ "us"]} [root@us-east-1 ceph]# radosgw-admin zone list --name client.radosgw.us-east-1 { "zones": [ "us-west", "us-east"]} [root@us-east-1 ceph]# radosgw-admin zone list --name client.radosgw.us-west-1 { "zones": [ "us-west", "us-east"]} [root@us-east-1 ceph]# curl http://us-east-1.cephcookbook.com:7480 <?xml version="1.0" encoding="UTF-8"?> <ListAllMyBucketsResult xmlns="http://s3.amazona ws.com/doc/2006-03-01/"> <Owner> <ID>anonymous</ID> <DisplayName></DisplayName> </Owner> <Buckets></Buckets> </ListAllMyBucketsResult> [root@us-east-1 ceph]# [root@us-east-1 ceph]# curl http://us-west-1.cephcookbook.com:7480 <?xml version="1.0" encoding="UTF-8"?> <ListAllMyBucketsResult xmlns="http://s3.amazona ws.com/doc/2006-03-01/"> <Owner> <ID>anonymous</ID> <DisplayName></DisplayName> </Owner> <Buckets></Buckets> </ListAllMyBucketsResult> [root@us-east-1 ceph]# [root@us-east-1 ceph]#
-
Настройте репликацию множества площадок создав файл
cluster-data-sync.conf
со следующим содержимым:src_zone: us-east source: http://us-east-1.cephcookbook.com:7480 src_access_key: XNK0ST8WXTMWZGN29NF9 src_secret_key: 7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5 dest_zone: us-west destination: http://us-west-1.cephcookbook.com:7480 dest_access_key: AAK0ST8WXTMWZGN29NF9 dest_secret_key: AAJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5 log_file: /var/log/radosgw/radosgw-sync-us-east-west.log [root@us-east-1 ceph]# cat cluster-data-sync.conf srczone: us-east source: http://us-east-1.cephcookbook.com:7480 src_access_key: XNK0ST8WXTMWZGN29NF9 src_secret_key: 7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5 dest_zone: us-west destination: http://us-west-1.cephcookbook.com:7480 dest_access_key: AAK0ST8WXTMWZGN29NF9 dest_secret_key: AAJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5 /var/log/radosgw/radosgw-sync-us-east-west.log [root@us-east-1 ceph]#
-
Активируйте агента синхронизации данных. Когда синхронизация данных запустится, вы должны увидеть вывод аналогичный показанному ниже:
# radosgw-agent -c cluster-data-sync.conf
Для того, чтобы протестировать федеративную конфигурацию мы вначале добавим некоторые объекты в нашу зону
us-east
через экземпляр radosgw
,
us-east-1
, используя Swift. Затем, после синхронизации данных между зонами
us-east
и us-west
, мы получим доступ к тем же объектам из зоны
us-west
через интерфейс шлюза us-west-1
.
-
Создайте подпользователя Swift для пользователя зоны
us-east
:# radosgw-admin subuser create --uid="us-east" --subuser="useast:swift" --access=full --name client.radosgw.us-east-1 --keytype swift --secret="7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5" # radosgw-admin subuser create --uid="us-east" --subuser="useast:swift" --access=full --name client.radosgw.us-west-1 --keytype swift --secret="7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5" [root@us-east-1 ceph]# radosgw-admin subuser create --uid="us-east" --subuser="useast:swift" --access=full --name client.radosgw.us-east-1 --keytype swift --secret="7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5" { "user_id": "us-east", "display_name:" "Region-US Zone-East", "email": "", "suspended": 0, "max_buckets": 1000, "avid": 0, "subusers": [ { "id": "us-east:swift", "permissions": "full-control"}], "keys": [ { "user": "us-east", "access_key": "XNK0ST8WXTMWZGN29NF9", "secret_key": "7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5"}], "swiftkeys": [ { "user": "us-east:swift", "secret_key": "7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5"}], "caps" : [], "op_mask" : "read, write, delete", "system": "true", "default_placement": "placement_tags": [], "bucket_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1}, "user_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1}, "temp_url_keys.: [] } [root@us-east-1 ceph]#
-
Аналогично, создадим подпользователя Swift для пользователя зоны
us-west
:# radosgw-admin subuser create --uid="us-west" --subuser="us-west:swift" --access=full --name client.radosgw.us-east-1 --key-type swift --secret="AAJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5" # radosgw-admin subuser create --uid="us-west" --subuser="us-west:swift" --access=full --name client.radosgw.us-west-1 --key-type swift --secret="AAJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5"
-
Установите клиента
python-swift
на узлахus-east-1
иus-west-1
:# yum install python-swift # yum install python-setuptools # easy_install pip # pip install --upgrade setuptools # pip install python-swiftclient
-
Соберите
python-swiftclient
на узлеus-east-1
:# export ST_AUTH="http://us-east-1.cephcookbook.com:7480/auth/1.0" # export ST_KEY=7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5 # export ST_USER=us-east:swift
-
Выведите перечень и создайте некоторые объекты на узле
us-east-1
:# swift list # swift upload container-1 us.json # swift list # swift list container-1 [root@us-east-1 ceph]# export ST_AUTH="http://us-east-l.cephcookbook.com:7480/auth/1.0" [root@us-east-1 ceph]# export ST_KEY=7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5 [root@us-east-1 ceph]# export ST_USER=us-east:swift [root@us-east-1 ceph]# swift list [root@us-east-1 ceph]# swift upload container-1 us.json us.json [root@us-east-1 ceph]# swift list container-1 [root@us-east-1 ceph]# [root@us-east-1 ceph]# swift list container-1 us.json [root@us-east-1 ceph]#
-
Активируем агента синхронизации данных:
# radosgw-agent -c cluster-data-sync.conf
-
Когда синхронизация данных завершится, попытайтесь осуществить доступ из зоны
us-west
применяя экземпляр шлюзаus-west-1
. На данном этапе данные должны быть доступными для вас из экземпляра шлюзаus-west-1
:# export ST_AUTH="http://us-west-1.cephcookbook.com:7480/auth/1.0" # export ST_KEY=7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5 # export ST_USER=us-east:swift # swift list [root@us-west-1 ceph]# export ST_AUTH="http://us-west-1.cephcookbook.com:7480/auth/1.0" [root@us-west-1 ceph]# export ST_KEY=7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5 [root@us-west-1 ceph]# export ST_USER=us-east:swift [root@us-west-1 ceph]# swift list container-1 [root@us-west-1 ceph]# swift list container-1 us.json [root@us-west-1 ceph]#
Сслужбы синхронизации и совместного использования файлов, такие как Dropbox, Box, Google Drive и многие прочие, становятся чрезвычайно популярными в последние несколько лет. При помощи Ceph вы можете развёртывать локальную синхронизацию файлов и службы совместного использования применяя любые интерфейсы приложений на основе S3 или Swift, в этом рецепте мы продемонстрируем как построить синхронизацию файлов и службы совместного использования на основе Ceph и ownCloud.
Для построения такой службы нам понадобятся работающий кластер, экземпляр RGW, способный осуществлять дотуп к хранилищу Ceph через S3 и интерфейс среды ownClowd, как это показано ниже:
В последнем рецепте мы настроили экземпляр radosgw
, us-east-1
;
мы будем использовать тот же экземпляр шлюза в этом разделе для построения службы синхронизации файлоы и их совместного использования. Мы также
применяем службу DNS, которая настроена на rgw-node1
для поддержки вызовов поддомена S3 для нашего
экземпляра RGW us-east-1
; однако, мы также можем применять любой другой DNS сервер если он позволяет
разрешать поддомены для us-east-1
.
-
Зарегистриуйтесь на
rgw-node1
, который также является нашим сервером DNS и создайте файл/var/named/us-east-1.cephcookbook.com
со следующим содержимым:@ 86400 IN SOA cephcookbook.com. root.cephcookbook.com. ( 20091028 ; serial yyyy-mm-dd 10800 ; refresh every 15 min 3600 ; retry every hour 3600000 ; expire after 1 month + 86400 ); min ttl of 1 day @ 86400 IN NS cephbookbook.com. @ 86400 IN A 192.168.1.107 * 86400 IN CNAME @ [root@rgw-node1 ~]# cat /var/named/us-east-1.cephcookbook.com @ 86400 IN SOA cephcookbook.com. root.cephcookbook.com. ( 20091028 ; serial yyyy-mm-dd 10800 ; refresh every 15 min 3600 ; retry every hour 3600000 ; expire after 1 month + 86400 ); min ttl of 1 day @ 86400 IN NS cephbookbook.com. @ 86400 IN A 192.168.1.107 * 86400 IN CNAME @ [root@rgw-node1 ~]#
-
Настройте ваш узел
us-east-1
на применение вашего сервера DNS. Измените/etc/resolve.conf
своими адресамиrgw-node1
и выполните ping любого поддомена; это должно разрешить адресus-east-1
.[root@us-east-1 ~]# cat /etc/resolv.conf # Generated by NetworkManager search cephcookbook.com nameserver 192.168.1.106 [root@us-east-1 ~]# [root@us-east-1 ~]# ping anything.us-east-l.cephcookbook.com -c 1 PING us-east-l.cephcookbook.com (192.168.1.107) 56(84) bytes of data. 64 bytes from us-east-l.cephcookbook.com (192.168.1.107): icmp_seq=1 tt1=64 time=0.038 ms --- us east-1.cephcookbook.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time Oms rtt min/avg/max/mdev = 0.038/0.038/0.038/0.000 ms [root@us-east-1 ~]#
-
Убедитесь, что ваш узел
us-east-1
может соединиться с кластером хранения Ceph поверх S3. В последнем рецепте мы создали пользователя с именемus-east
и воспользуемся его доступом и ключом безопасности с помощьюs3cmd
:-
Установите
s3cmd
:# yum install -y s3cmd
-
Настройте
s3cmd
и предоставьтеaccess_key
установленный вXNK0ST8WXTMWZGN29NF9
иsecret_key
установленный в7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5
:# s3cmd --configure
-
Измените
/root/.s3cmd
подробностями хоста:host_base = us-east-1.cephcookbook.com:7480 host_bucket = %(bucket)s.us-east-1.cephcookbook.com:7480
-
Проверьте соединение
s3cmd
:# s3cmd ls
-
Создайте сегмент (bucket) для ownCloud, который будет применяться для сохранения его объектов:
# s3cmd mb s3://owncloud
-
-
Далее мы установим ownCloud, который снабдит нас внешним и пользовательским интерфейсами для службы синхронизации и совместного применения файлов:
-
Поднимите виртуальную машину ownCloud с помощью Vagrant и зарегистрируйтесь на этой ВМ:
# vagrant up owncloud # vagrant ssh owncloud
-
Установите репозиторий ownCloud следующим образом:
# cd /etc/yum.repos.d/ # wget http://download.opensuse.org/repositories/isv:ownCloud:community/CentOS_CentOS-7/isv:ownCloud:community.repo
-
Установите ownCloud как показано ниже:
# yum install owncloud -y
-
Поскольку это пробная сборка, запретим межсетевой экран:
# systemctl disable firewalld # systemctl stop firewalld
-
Попытайтесь получитьдоступ к веб- интерфейсу ownCloud набрав на своём хосте в веб браузере
http://192.168.1.120/owncloud/
. Создайте учётную запись администратора с именемowncloud
и паролемowncloud
:
-
Первый экран регистрации будет выглядеть как это отображено ниже; в любое время мы можем применять ownClowd в качестве рабочего стола или мобильного приложения:
Настройте ownCloud для применения Ceph в качестве внешнего хранилища S3:
-
Из учётной записи администратора ownClowd сделайте доступным внешнее хранилище переместившись в
Files | Apps | Not enabled | External Storage
и кликнув наEnable it
. -
Далее настройте внешнее хранилище на применение Ceph. Для этого переместитесь в правую сторону окна и выберите пользователя ownCloud, затем выберите
admin
, а потом переместитесь в панель с левой стороны и выберитеExternal Storage
. -
Настройте Amazon S3 и соответствующее хранилище под ownCloud, выбрав
Enable User External Storage
, а затем переместившись вAmazon S3 and compliant | Add Storage | Amazon S3 and Compliant
.
Снабдите пользователя Ceph
radosgw
подробностями ключей доступа и безопасности, а также имени хоста:-
Folder name
: Введите имя вашей папки, которую вы хотите показывать на своей странице файлов ownCloud. -
Access key
: Введите ваш код доступа S3,XNK0ST8WXTMWZGN29NF9
-
Secret key
: Введите ваш код безопасности S3,7VJm8uAp71xKQZkjoPZmHu4sACA1SY8jTjay9dP5
-
Bucket
: Введите имя вашего S3 сегмента, который мы создали на 3м шаге -
: Введите
us-east-1.cephcookbook.com
-
Port
: Введите7480
-
Region
(не обязательно): ВведитеUS
-
Available for
: Введитеowncloud
(не обязательно)
Как только вы введёте предыдущие подробности, ownCloud должен соединиться с кластер Ceph поверх S3 и вы должны увидеть зелёную окружность сразу перед именем вашей папки, как это отображено на предыдущем снимке.
Далее загрузите файлы через ownCloud своим пользовательским веб- интерфейсом. Для выполнения этого переместитесь в
Files | External Storage
и кликните на свойceph-s3
загрузки файлов или каталогов.Убедитесь что файлы были добавлены в ваш кластер хранения Ceph переключившись на узел
us-east-1
и выполнив командуs3cmd ls s3://owncloud
; вы должны получить файл, который вы загрузили через пользовательский веб- интерфейс ownCloud.[root@us-east-1 ~]# s3cmd ls s3://owncloud DIR s3://owncloud/mona/ 2015-05-05 21:32 148481 s3://owncloud/eknumber.jpg [root@us-east-1 ~]#
Поздравляем! Вы научились строить свои частные службы синхронизации и совместного применения файлов с использованием хранилища объектов Ceph S3 и ownCloud.
-
Для получения дополнительной информации по ownCloud, посетите https://owncloud.org/.