Проблемы и решения, описанные в этой статье, также применимы к Тенсент Облако Elasticsearch Service(ES)。
Elasticsearch Сервис (ES) основан на поисковой системе с открытым исходным кодом. Elasticsearch Создайте полностью управляемое высокодоступное масштабируемое облако. Elasticsearch услуги, в том числе Kibana и часто используемые плагины, а также интегрирует расширенные функции (X-Pack), такие как безопасность, SQL, машинное обучение, сигналы тревоги и мониторинг. Используйте Тенсент Облако ES, вы можете быстро развертывать, легко управлять, расширять свой кластер по требованию, упрощать сложные операции по эксплуатации и обслуживанию, а также быстро создавать анализ журналов, мониторинг исключений, поиск по веб-сайтам, корпоративный поиск и бизнес-аналитику. Анализ и другие виды бизнеса.
ES обычно имеет следующие методы миграции:
План миграции | Онлайн-миграция | Инкрементная синхронизация | Удалить/обновить синхронизацию | Очистить/преобразовать/фильтровать | Ограничения версии | Метод миграции | Скорость миграции |
---|---|---|---|---|---|---|---|
Слияниеплан | да | поддерживать | поддерживать | Нетподдерживать | Источник<=Цель | резать | скоро |
решение для моментального снимка | нет | поддерживать | поддерживать | Нетподдерживать | Источник<=Цель | копировать | быстрый |
решение для логсташа | нет | Часть сцены одобрена | Нетподдерживать | поддерживать сложную трансформацию | Нет требований | копировать | медленный |
Схема CCR | Квази-реальное время | поддерживать | поддерживать | Нетподдерживать | > 7.x | копировать | быстрый |
переиндексация удаленного решения | нет | Часть сцены одобрена | Нетподдерживать | поддерживатьquery、script | Нет требований | копировать | медленный |
решение эластичного дампа | нет | Часть сцены одобрена | Нетподдерживать | толькоподдерживатьquery | Нет требований | копировать | оченьмедленный |
Полная миграция данных: миграция существующих данных;
Поэтапная миграция данных: данные постоянно меняются.,Некоторые службы невозможно остановить,Требуется план с Инкрементной синхронизацией;
Проверка данных: данные после миграции необходимо проверить;
Синхронизация метаданных: синхронизация атрибутов индекса (настройки, сопоставление), миграция шаблонов;
Другая миграция контента: миграция пользователей, миграция разрешений ролей;
Миграция отдельных компонентов: миграция кибаны.
1. Нет простоты,быстрыйскорость,автоматизация,Простые в использовании инструменты интерфейса,Запуск сценария является трудоемким,подвержен ошибкам,Требуется много рабочей силы;
2. Как обеспечить точность данных в процессе миграции;
3. Как сделать так, чтобы процесс миграции оказывал минимальное влияние на бизнес;
4. Большинство повторяющихся операций командной строки во время миграции требуют ручной проверки целостности и согласованности данных, а общий ход миграции неудобно просматривать;
5. После миграции проверьте проблемы совместимости версии бизнес-компонента, настройку конфигурации параметров и управление разрешениями;
6. Изменения исторических данных в процессе миграции предполагают инкрементальную миграцию, а ручное сканирование, фильтрацию и синхронизацию измененных данных усложнено;
7. Скрипты инструментов разбросаны, их необходимо систематизировать и автоматически подключать.
Слияниеввод инструмента миграции
Примечание. Во всех методах обнаружения, описанных в этой статье, в качестве примера используется Curl.
Самодельный ESтребуется версия<=В версия облакеES, нет продолжения работы, Пример API:
curl -s '10.10.10.10:9200?pretty' | grep -oP '(?<="number" : ")[^"]+'
Самодельный ES Версия лицензии должна быть такой же, как В. облаке полностью соответствует, продолжению работы не разрешено, Пример API:
curl -s '10.10.10.10:9200/_license?pretty' | grep -oP '(?<="type" : ")[^"]+'
Самодельныйjdkтребуется версия<=11.0.9.1-ga,потому чтодля В облакеES использует да11.0.9.1-ga. Если она выше этой версии, возникнут проблемы, например, алгоритм шифрования сертификата не поддерживается. Пример API:
curl -s '10.10.10.10:9200/_nodes?filter_path=nodes.*.jvm.version&pretty'
Пример API:
curl '10.10.10.10:9200/_nodes/http?pretty' | grep -oP '(?<="publish_address" : ")[^"]+'
В В облакекаждый узел, верно Самоделка все полученное выше узел выполняет запросы на обход HTTP-портов, чтобы обеспечить наличие кластеров на обоих концах. все порты узлов соединены между собой, Пример API:
curl '10.10.10.10:9200'
Решение «Слияние» использует транспортный порт для связи.,нуждаться В В облаке Узел кластераверно Транспортный порт самостоятельно построенного узла инициирует тест подключения, Пример API:
curl -s '10.10.10.10:9200/_nodes/http?pretty' | grep -oP '(?<="transport_address" : ")[^"]+'
В В облакекаждый узел,вернополучено выше Самодельныйвсе узлыруководитьtransportЗапрос на прохождение порта,Убедитесь, что оба конца кластеравсе все порты узлов соединены между собой, Пример API:
curl '10.10.10.10:9300'
Сначала получите IP-адрес главного узла. Пример API:
curl -s '10.10.10.10:9200/_cat/nodes?h=ip,node.role' | grep "m" | awk '{print $1}'
Тогда по словам мастера IP получает транспортный порт, пример API:
curl -s '10.10.10.10:9200/_nodes/http?pretty' | grep -oP '(?<="transport_address" : ")[^"]+' | grep "10.10.10.10\|10.10.10.11\|10.10.10.12"
Хосты Cloud Discovery можно получить из метаданных управления.
Имя кластера, созданное самостоятельно, должно совпадать с В. облаке точно такое же, нет запрещено Начать синтез,Обнаружение Пример API:
curl -s '10.10.10.10:9200/_cluster/health?pretty' | grep -oP '(?<="cluster_name" : ")[^"]+'
Обнаружение плагинов, установленных в самостоятельно созданных кластерах, и взаимодействие с ними. облакекластерверно Сравнивать。В в облакеCluster не существует плагина, автоматическая оценка плагина требует выборочной установки. Обнаружение API:
curl -s '10.10.10.10:9200/_cat/plugins?h=component,version' | sort | uniq
Просмотрите настройки всех индексов,Получить index.anaанализ.filter.*.synonyms_path,Иллюстрировать индекс содержит синонимы, если есть значение. Если у вас есть синонимы, сначала их нужно загрузить.,После загрузки сравните путь и имя файла в каталоге узла кластера с настройками индекса.,Необходимо быть полностью последовательным,нетно Нетпозволять Начать синтез,Обнаружение Пример API:
curl -s '10.10.10.10:9200/{index_name}/_settings?pretty' | grep synonyms_path
Словарь сегментатора слов ik невозможно получить через API. Пользователь должен получить инструкции в консоли с помощью следующих методов. Полученный словарь сегментации слов и словарь стоп-слов загружаются в сегментатор слов ik ES. console. Например, метод получения:
[root@tencentos es]# cat config/analysis-ik/IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="ext_dict">ext-dict/test.dic</entry>
<entry key="ext_stopwords">ext-dict/stop.dic</entry>
</properties>
Как перед Слиянием, так и после Слияния необходимо постоянно обнаруживать, что созданный самостоятельно кластер данет содержит close Индекс, если включен close Индекс, Начать нельзя раньше Слияние синтез, Слияние и затем на пульте выдается серьезное предупреждение;
Обход всех индексов и обнаружение параметров индекса index.routing.allocation.total_shards_per_node, убедитесь, что значение по умолчанию для, нет приведет к неполному перемещению шардов.
для Для предотвращения опорожнения В облаке Система автоматически создает индекс после его индексации. Сначала необходимо отключить автоматическое создание индекса. API:
PUT _cluster/settings
{
"transient": {
"action": {
"auto_create_index": "false"
}
},
"persistent": {
"action": {
"auto_create_index": "false"
}
}
}
PUT _cluster/settings
{
"transient": {
"action.destructive_requires_name": "false"
}
}
Пример API:
DELETE .mo*
DELETE .apm*
DELETE .kibana*
DELETE .s*
DELETE .t*
DELETE .w*
DELETE _data_stream/ilm-history-5
DELETE ilm-history-3-000001
DELETE _data_stream/.logs-deprecation.elasticsearch-default
Пример API:
curl -s '10.10.10.10:9200/_cat/nodes?h=name'
Пример API:
curl -H "Content-Type: application/json" -XPUT http://10.10.10.10:9200/_cluster/settings -d '
{
"transient" : {
"cluster.routing.allocation.include._name" : "node-01,node-02,node-03"
}
}'
Отобразите кнопку «Слияние», чтобы пользователи могли помочь себе. Начать синтез.
Воля Самодельныйкластеризdiscovery.zen.ping.unicast.hostsЗначение параметра и В облакеруководить Слияние,верно В кластер облаке инициирует следующий запрос, Управляйте запросами, такими как:
curl localhost:5100/cluster/update -d '{
"cluster_name": "es-xxxxxxxx",
"operator": "xxxxxxxx",
"es_config": {
"discovery.zen.ping.unicast.hosts": "[\"10.10.10.10:9300\", \"10.10.10.11:9300\", \"10.10.10.12:9300\", \"172.17.245.162:9300\", \"172.17.244.19:9300\", \"172.17.244.137:9300\"]"
},
"restart_type": "full_cluster_restart"
}'
Запустите процесс переименования имя_кластера, чтобы реорганизовать целевой кластер в кластер с именем merge_temp (полный перезапуск), например:
curl localhost:5100/cluster/update -d '{
"cluster_name": "es-xxxxxxxx",
"operator": "xxxxxxxx",
"es_config": {
"cluster.name": "merge_temp"
},
"restart_type": "full_cluster_restart"
}'
После успешного установления снова будет выдан процесс смены имени + процесс Discovery.seed_hostsСлияние.,Поместите это в процесс,Измените имя кластера обратно и добавьте сид Слияние (только для раздачи без перезапуска),Управляйте запросами, такими как:
curl localhost:5100/cluster/update -d '{
"cluster_name": "es-xxxxxxxx",
"operator": "daemonyue",
"es_config": {
"cluster.name": "qcloud",
"discovery.seed_hosts": "[\"10.10.25.17:9300\", \"10.10.18.194:9300\", \"10.10.26.129:9300\", \"10.10.25.79:9300\", \"10.10.26.54:9300\", \"10.10.18.158:9300\"]"
},
"restart_type": "no_restart"
}'
Наконец, выполните инициализацию метаданныхпроцесс,Сделать официальный ролл,Пример выполнения скрипта:
./init_cloud_metadata.sh --sourceEndPoint 10.10.10.10 --sourcePort 9200 --user elastic --password xxxxxxxx --cloudInfoJsonFile json/qytest
Обеспечьте переключатель ограничения скорости миграции по всему миру.,Скорость переезда можно динамически регулировать в режиме реального времени.,и регулировка одновременного перемещения не в реальном времени. Требуется подсказка для одновременного перемещения,Обновление вступает в силу в режиме реального времени,Задержка вниз вступает в силу. Пример API:
PUT _cluster/settings
{
"transient":{
"cluster.routing.allocation.node_concurrent_recoveries":10,
"cluster.routing.allocation.node_concurrent_incoming_recoveries":10,
"cluster.routing.allocation.node_initial_primaries_recoveries":10,
"cluster.routing.allocation.node_concurrent_outgoing_recoveries":10,
"cluster.routing.allocation.cluster_concurrent_rebalance":10,
"indices.recovery.max_bytes_per_sec":"100mb"
}
}
Предоставьте кнопку миграции,Начать миграцию сегментов,Пример API:
curl -H "Content-Type: application/json" -XPUT http://10.10.10.10:9200/_cluster/settings -d '
{
"transient" : {
"cluster.routing.allocation.include._name" : null,
"cluster.routing.allocation.exclude._name" : "node-01,node-02,node-03"
}
}'
верно _cat/allocation Интерфейс для мониторинга, расчета и отображения хода миграции в режиме реального времени.
После завершения миграции пользователю будет предложено переключить IP доступа к облаку и перевести старую ноду в автономный режим. Также рекомендуется переименовать имя_кластера старого кластера, например:
[root@tencentos es]# grep "cluster.name" config/elasticsearch.yml
cluster.name: "qcloud"
# Воля cluster.name из оригинала qcloud изменятьдля qcloud_local
[root@tencentos es]# grep "cluster.name" config/elasticsearch.yml
cluster.name: "qcloud_local"
Обнаружив, что созданный самостоятельно узел полностью отключен от сети, серверная часть Qinge предоставляет Метаданные. управления откатом кнопка:
Управляйте запросами, такими как:
curl localhost:5100/cluster/update -d '{
"cluster_name": "es-xxxxxxxx",
"operator": "daemonyue",
"es_config": {
"discovery.zen.ping.unicast.hosts": "null"
},
"restart_type": "no_restart"
}'
Управляйте запросами, такими как:
curl localhost:5100/cluster/update -d '{
"cluster_name": "es-xxxxxxxx",
"operator": "xxxxxxxx",
"es_config": {
"discovery.seed_hosts": "null"
},
"restart_type": "no_restart"
}'