В этой статье представлены функции OpenSearch межкластерной репликация (CCR, Cross Cluster Replication).
Кросс-кластерная репликация
Межкластерная репликация позволяет зеркально отображать индексы на разных кластерах. Исходный индекс выступает в роли "лидера", и затем все операции над документами, выполняемые с этим индексом (создание, обновление, удаление), будут выполняться по индексу в удаленном(ых) кластере(ах).
Важно отметить, что репликация происходит на уровне индекса, поэтому вы можете следить за одним индексом на многих кластерах или осуществлять двунаправленную репликацию.
Кросс-кластерная репликация может использоваться в следующих случаях:
- Наличие резервного кластера на случай возникновения проблем
- Более близкий кластер к конечным пользователям (задержка)
- Разделение объема поиска и индексирования
Необходимые условия для работы CCR
Плагин Replication должен быть установлен на всех кластерах.
Если вы переопределили свойства node.roles в файле opensearch.yml, то на кластере-последователе необходимо снова добавить remote_cluster_client:
1 | node.roles: [<other_roles>, remote_cluster_client] |
Разрешения, необходимые для CCR
OpenSearch изначально включает роли для лидера и последователей, чтобы пользователи, не являющиеся администраторами, могли выполнять все действия лидера/последователя (начать/остановить следование). Такая конфигурация является оптимальной в большинстве случаев.
При желании можно создать собственные роли. При этом могут быть предоставлены следующие разрешения:
Подчиненный кластер
- indices:admin/plugins/replication/index/setup/validate
- indices:admin/plugins/replication/index/start
- indices:admin/plugins/replication/index/pause
- indices:admin/plugins/replication/index/resume
- indices:admin/plugins/replication/index/stop
- indices:admin/plugins/replication/index/update
- indices:admin/plugins/replication/index/status_check
- indices:data/write/plugins/replication/changes
- cluster:admin/plugins/replication/autofollow/update
Мастер кластер
- indices:admin/plugins/replication/validate
- indices:data/read/plugins/replication/file_chunk
- indices:data/read/plugins/replication/changes
Как настроить межкластерную репликацию в OpenSearch
Создать связь с лидером
Начните создание соединения в кластере последователей:
1 2 3 4 5 6 7 8 9 10 11 12 | curl -XPUT -k -H 'Content-Type: application/json' -u 'admin:admin' 'https://follower-ip-address:9200/_cluster/settings?pretty' -d ' { "persistent": { "cluster": { "remote": { "my-connection-alias": { "seeds": ["<leader-ip-address>:9300"] } } } } }' |
Обратите внимание на порт 9300. Именно 9300, а не 9200, поскольку это транспортный уровень (связь между узлами). Порт 9200 предназначен для http-связи (связь клиента с узлом).
Создание лидерного индекса
Лидерский индекс - это обычный индекс OpenSearch, и он должен быть создан на кластере-лидере.
1 | curl -XPUT -k -H 'Content-Type: application/json' -u 'admin:admin' 'https://leader-ip-address:9200/leader-01?pretty' |
Репликация на индекс последователя
1 2 3 4 5 6 7 8 9 | curl -XPUT -k -H 'Content-Type: application/json' -u 'admin:admin' 'https://follower-ip-address:9200/_plugins/_replication/follower-01/_start?pretty' -d ' { "leader_alias": "my-connection-alias", "leader_index": "leader-01", "use_roles":{ "leader_cluster_role": "cross_cluster_replication_leader_full_access", "follower_cluster_role": "cross_cluster_replication_follower_full_access" } }' |
Если плагин безопасности отключен, опустите параметр use_roles. Если же он включен, то необходимо указать роли кластера-лидера и кластера-последователя, которые OpenSearch будет использовать для аутентификации запроса.
Теперь индекс leader-01 из кластера-лидера будет реплицирован на индекс follower-01 кластера-последователя.
Дополнительные действия
Для удаления индекса-последователя необходимо сначала остановить репликацию.
Подтверждение репликации
1 | curl -XGET -k -u 'admin:admin' 'https://follower-ip-address:9200/_plugins/_replication/follower-01/_status?pretty' |
Приостановить репликацию
1 | curl -XPOST -k -H 'Content-Type: application/json' -u 'admin:admin' 'https://follower-ip-address:9200/_plugins/_replication/follower-01/_pause?pretty' -d '{}' |
Возобновить репликацию
1 | curl -XPOST -k -H 'Content-Type: application/json' -u 'admin:admin' 'https://follower-ip-address:9200/_plugins/_replication/follower-01/_resume?pretty' -d '{}' |
Остановить репликацию
1 | curl -XPOST -k -H 'Content-Type: application/json' -u 'admin:admin' 'https://follower-ip-address:9200/_plugins/_replication/follower-01/_stop?pretty' -d '{}' |
Автоматическое слежение
Помимо репликации отдельных индексов, можно создавать правила репликации, которые представляют собой набор шаблонов, определяющих, когда индекс должен выполняться.
1 2 3 4 5 6 7 8 9 10 | curl -XPOST -k -H 'Content-Type: application/json' -u 'admin:admin' 'https://follower-ip-address:9200/_plugins/_replication/_autofollow?pretty' -d ' { "leader_alias" : "my-connection-alias", "name": "my-replication-rule", "pattern": "movies*", "use_roles":{ "leader_cluster_role": "all_access", "follower_cluster_role": "all_access" } }' |
Это правило начнет создавать и сопровождать все индексы, начинающиеся с фильмов в кластере-последователе, а затем все индексы, созданные после него.
Чтобы удалить правило репликации, необходимо выполнить следующее:
1 2 3 4 5 | curl -XDELETE -k -H 'Content-Type: application/json' -u 'admin:admin' 'https://follower-ip-address:9200/_plugins/_replication/_autofollow?pretty' -d ' { "leader_alias" : "my-connection-alias", "name": "my-replication-rule" }' |
Это позволит избежать репликации новых индексов, но существующие будут продолжать следовать за ними. Чтобы прекратить репликацию существующих индексов, воспользуйтесь API остановки репликации после удаления правила.
Краткое описание межкластерной репликация в OpenSearch
В заключение следует отметить, что кросс-кластерная репликация позволяет зеркально отображать индексы на разных кластерах и обладает рядом преимуществ:
- Поддержание резервного кластера
- Снижение задержек за счет использования кластера, расположенного ближе к пользователям
- Отделение объема поиска от индексирования.
В этой статье мы рассмотрели пошаговую настройку:
- Установить соединение с кластером-лидером
- Создать индекс лидера
- Выполнить репликацию на индекс последователя
И выполнять задачи обслуживания:
- Подтвердить репликацию
- Приостановить репликацию
- Возобновить репликацию
- Остановить репликацию
- Автоматическое слежение
Понимание и внедрение кросс-кластерной репликации позволяет организациям улучшить управление данными, увеличить избыточность и повысить удобство работы пользователей.