Высокая доступность Ozone S3 Gateway
Ozone S3 Gateway (S3G) предоставляет S3-совместимый интерфейс к хранилищу Ozone. Он спроектирован как stateless-компонент, то есть он не хранит данные локально. В Apache Ozone данные хранятся на локальных дисках Ozone Datanode, а метаданные управляются отдельно с помощью Ozone Manager и Ozone Storage Container Manager.
Такой архитектурный подход позволяет одновременно запускать несколько идентичных экземпляров S3 Gateway без особых проблем синхронизации, что позволяет использовать режим высокой доступности (HA). Если один экземпляр шлюза становится недоступным, другие продолжают обслуживать запросы без потери данных или несогласованности.
Компонент HAProxy Ozone S3G
Переключение между несколькими экземплярами Ozone S3 Gateway выполняется компонентом HAProxy Ozone S3G. Он действует как обратный прокси (reverse proxy) между S3-клиентами и серверами Ozone S3 Gateway в ADH.
Этот компонент основан на проекте HAProxy и использует его модель конфигурации, описанную в документации HAProxy.
|
ВАЖНО
|
Конфигурация HAProxy в ADCM
Когда сервис Ozone S3G работает в режиме HA, ADCM автоматически генерирует конфигурацию HAProxy для маршрутизации входящих запросов ко всем доступным экземплярам S3 Gateway.
Основным конфигурационным файлом является /etc/adh-haproxy/conf/haproxy-ozone-s3g.cfg. Этот файл генерируется из Jinja-шаблона в ADCM и его не рекомендуется редактировать вручную на хостах.
Чтобы изменить конфигурацию через ADCM:
-
На странице Clusters выберите нужный кластер.
-
Перейдите на вкладку Services и нажмите Ozone.
-
Откройте вкладку Components и выберите HAProxy Ozone S3G.
-
Выберите параметр haproxy-ozone-s3g.cfg и внесите необходимые изменения.
-
Подтвердите изменения в конфигурации, нажав Save.
-
В раскрывающемся меню Actions выберите Restart, убедитесь, что для параметра Apply configs from ADCM установлено значение
true, и нажмите Run.
При запуске сервиса итоговый файл haproxy-ozone-s3g.cfg будет сгенерирован из следующего шаблона:
{% set ssl_cert = '' %}
{%- if ozone_ssl_enable -%}
{% set ssl_cert = ozone_haproxy_conf_ssl_vars %}
{% endif %}
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global (1)
log /dev/log sample 1:10 local0
log 127.0.0.1:514 local0
log-tag hp-ozone-s3g
chroot /var/lib/adh-haproxy/ozone-s3g
maxconn 1024
user haproxy
group haproxy
daemon
ssl-server-verify none
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults (2)
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
listen stats (3)
bind *:7002 {{ ssl_cert }}
stats enable
stats uri /
frontend ozone_s3g_http_in (4)
bind *:{{ roles_ozone_vars_component_ports['haproxy_ozone_s3g']['s3'] }} {{ ssl_cert }}
default_backend ozone_s3g_http_servers
backend ozone_s3g_http_servers (5)
balance roundrobin
{% for host in haproxy_ozone_s3g_conf_hosts %}
{{ host }}
{% endfor %}
frontend ozone_s3g_webui_http_in (6)
bind *:{{ roles_ozone_vars_component_ports['haproxy_ozone_s3g']['webadmin'] }} {{ ssl_cert }}
default_backend ozone_s3g_webui_http_servers
backend ozone_s3g_webui_http_servers (7)
balance roundrobin
{% for host in haproxy_ozone_s3g_webadmin_conf_hosts %}
{{ host }}
{% endfor %}
| 1 | Глобальные параметры HAProxy (логирование, директория chroot, SSL и т.д.). |
| 2 | Параметры режима HTTP по умолчанию и настройки тайм-аутов. |
| 3 | Включает endpoint статистики и мониторинга HAProxy (по умолчанию: http://<haproxy_host>:7002/). |
| 4 | Определяет список прослушиваемых сокетов, принимающих входящие соединения по протоколу S3. |
| 5 | Список серверов Ozone S3 Gateway, на которые HAProxy пересылает S3-трафик. В цикле {% for host in … %} формируется список серверов Ozone S3G, доступных в кластере ADH. balance roundrobin равномерно распределяет запросы между всеми доступными хостами. |
| 6 | Определяет список прослушиваемых сокетов для веб-интерфейса Ozone S3G. |
| 7 | Список серверов S3 gateway, на которые HAProxy будет пересылать входящие запросы для веб-интерфейса Ozone S3G. |
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log /dev/log sample 1:10 local0
log 127.0.0.1:514 local0
log-tag haproxy-ozone-s3g
chroot /var/lib/adh-haproxy/ozone-s3g
maxconn 1024
user haproxy
group haproxy
daemon
ssl-server-verify none
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
listen stats
bind *:7002 ssl crt /etc/ssl/serverkey.pem
stats enable
stats uri /
frontend ozone_s3g_http_in
bind *:9879 ssl crt /etc/ssl/serverkey.pem
default_backend ozone_s3g_http_servers
backend ozone_s3g_http_servers
balance roundrobin
server server1 test-adh-ozone1.ru-central1.internal:9879 ssl check inter 1s fall 2 rise 5
server server2 test-adh-ozone2.ru-central1.internal:9879 ssl check inter 1s fall 2 rise 5
server server3 test-adh-ozone3.ru-central1.internal:9879 ssl check inter 1s fall 2 rise 5
frontend ozone_s3g_webui_http_in
bind *:19879 ssl crt /etc/ssl/serverkey.pem
default_backend ozone_s3g_webui_http_servers
backend ozone_s3g_webui_http_servers
balance roundrobin
server server1 test-adh-ozone1.ru-central1.internal:19879 ssl check inter 1s fall 2 rise 5
server server2 test-adh-ozone2.ru-central1.internal:19879 ssl check inter 1s fall 2 rise 5
server server3 test-adh-ozone3.ru-central1.internal:19879 ssl check inter 1s fall 2 rise 5
Подробное описание настроек HAProxy доступно в документации HAProxy.
Конфигурация Ozone S3G
Чтобы использовать веб-интерфейс и эндпойнт REST API для получения секретов, настройте один из следующих параметров в конфигурационном файле /etc/ozone/conf/ozone-site.xml для Ozone S3G.
| Параметр | Описание | Значение по умолчанию |
|---|---|---|
ozone.s3g.webadmin.http-address |
HTTP-адрес для использования веб-интерфейса S3 Gateway и получения секретов через REST API |
0.0.0.0:19878 |
ozone.s3g.webadmin.https-address |
HTTPS-адрес для использования веб-интерфейса S3 Gateway и получения секретов через REST API |
0.0.0.0:19879 |
Чтобы изменить конфигурацию через ADCM:
-
На странице Clusters выберите нужный кластер.
-
Перейдите на вкладку Services и нажмите Ozone.
-
Откройте вкладку Components и выберите Ozone S3G.
-
Выберите нужный параметр и внесите изменения.
-
Подтвердите изменения, нажав Save.
-
В раскрывающемся меню Actions выберите Restart, убедитесь, что для параметра Apply configs from ADCM установлено значение
true, и нажмите Run.
Особенности Kerberos
Веб-интерфейс Ozone S3 Gateway предоставляет эндпойнт REST API для получения S3-секретов (если включен Kerberos/SPNEGO).
Чтобы включить аутентификацию Kerberos:
-
На странице Clusters выберите нужный кластер.
-
Перейдите на вкладку Services и нажмите Ozone.
-
Откройте вкладку Components и выберите Ozone S3G.
-
Установите флаг Advanced и нажмите Add property в разделе Custom ozone-site.xml.
-
Добавьте параметр ozone.s3g.secret.http.enabled со значением
Trueи подтвердите изменения, нажав Save. -
В раскрывающемся меню Actions выберите Restart, убедитесь, что для параметра Apply configs from ADCM установлено значение
true, и нажмите Run.
Получать секреты через REST API могут только администраторы. Добавить администратора Ozone можно через параметр ozone.administrators в разделе ozone-site.xml в ADCM. В этом случае пользователь автоматически получит административные привилегии для S3-хранилища.
Если необходимо добавить роль администратора только для Ozone S3G, добавьте параметр ozone.s3.administrators в разделе Custom ozone-site.xml в конфигурации компонента Ozone S3G.
Чтобы предоставить административный доступ группе пользователей, используйте параметр ozone.administrators.groups или ozone.s3.administrators.groups соответственно.
В качестве значения для всех параметров укажите список имен пользователей или групп, разделенных запятыми, которым необходимо выдать доступ администратора.
Чтобы добавить администратора или группу администраторов через ADCM:
-
На странице Clusters выберите нужный кластер.
-
Перейдите на вкладку Services и нажмите Ozone.
-
В разделе ozone-site.xml заполните значения параметров ozone.administrators или ozone.administrators.groups.
-
В раскрывающемся меню Actions выберите Restart, убедитесь, что для параметра Apply configs from ADCM установлено значение
true, и нажмите Run.
-
На странице Clusters выберите нужный кластер.
-
Перейдите на вкладку Services и нажмите Ozone.
-
Откройте вкладку Components и выберите Ozone S3G.
-
Установите флаг Advanced и нажмите Add property в разделе Custom ozone-site.xml.
-
Добавьте параметр ozone.s3.administrators или ozone.s3.administrators.groups, заполните значения и подтвердите изменения, нажав Save.
-
В раскрывающемся меню Actions выберите Restart, убедитесь, что для параметра Apply configs from ADCM установлено значение
true, и нажмите Run.
Пример запроса аутентификации:
$ curl --insecure -X PUT --negotiate -u : https://<haproxy_host>:19879/secret/<username>
где:
-
<haproxy_host>— хост шлюза HAProxy; -
<username>— имя пользователя для аутентификации.
Пример ответа:
<S3Secret>
<awsAccessKey>user</awsAccessKey>
<awsSecret>***</awsSecret>
</S3Secret>
Логирование
По умолчанию логи сохраняются в /var/log/adh-haproxy/ozone-s3g.log. Настройки логирования можно задать в секции global в конфигурационном файле haproxy-ozone-s3g.cfg.
Пример конфигурации Rsyslog:
$AddUnixListenSocket /var/lib/adh-haproxy/ozone-s3g/dev/log
:programname, startswith, "haproxy-ozone-s3g" {
/var/log/adh-haproxy/ozone-s3g.log
stop
}
Чтобы изменить конфигурацию Rsyslog через ADCM:
-
На странице Clusters выберите нужный кластер.
-
Перейдите на вкладку Services и нажмите Ozone.
-
Откройте вкладку Components и выберите HAProxy Ozone S3G.
-
Выберите параметр /etc/rsyslog.d/haproxy-ozone-s3g.conf и внесите необходимые изменения.
-
Подтвердите изменения, нажав Save.
-
В раскрывающемся меню Actions выберите Restart, убедитесь, что для параметра Apply configs from ADCM установлено значение
true, и нажмите Run.