Как устранить проблему с unassigned shards в кластере OpenSearch, которая вызывает переход в статус red?

Всем привет! <br/> <br/> У меня есть кластер Opensearch, состоящий из трех узлов: две дата-узла и один узел-менеджер кластера. <br/> <pre><code>ip            heap.percent ram.percent cpu load_1m load_5m load_15m node.role node.roles      cluster_manager name
10.220.101.40           18          93   0    0.03    0.07     0.03 di        data,ingest     -               opensearch-d1
10.220.101.7            58          95   0    0.05    0.07     0.02 m         cluster_manager *               opensearch-cluster_manager
10.220.101.41           30          93   0    0.19    0.29     0.24 di        data,ingest     -               opensearch-d2</code></pre> <br/> <br/> Статус кластера отображается как "red". <br/> <pre><code>{
  "cluster_name": "graylog",
  "status": "red",
  "timed_out": false,
  "number_of_nodes": 3,
  "number_of_data_nodes": 2,
  "discovered_master": true,
  "discovered_cluster_manager": true,
  "active_primary_shards": 0,
  "active_shards": 0,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 9,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 0.0
}</code></pre> <br/> <br/> Вот конфигурации трех узлов: <br/> <br/> Настройки узла-менеджера кластера: <br/> <pre><code>cluster.name: graylog
node.name: opensearch-cluster_manager
node.roles: [ cluster_manager ]
path.data: /var/lib/opensearch
path.logs: /var/log/opensearch
network.host: 10.220.101.7            
discovery.seed_hosts: ["10.220.101.40", "10.220.101.7", "10.220.101.41"]
cluster.initial_cluster_manager_nodes: ["opensearch-cluster_manager", "opensearch-d1", "opensearch-d2"]
plugins.security.disabled: tr
  • 28 октября 2024 г. 6:23
Ответы на вопрос 1
Проблема с unassigned shards в вашем кластере OpenSearch, что приводит к статусу "red", может быть вызвана несколькими факторами. Давайте рассмотрим шаги, которые можно предпринять для устранения этой проблемы.

### Шаги по устранению проблемы с unassigned shards

1. **Проверка логов**:
   Начните с просмотра логов каждого узла (особенно дата-узлов) для поиска ошибок, связанных с распределением шардов. Логи могут содержать информацию о причинах, по которым шард не был назначен.

2. **Удаление индексных данных**:
   Если проблема произошла из-за повреждения индекса или отсутствия ресурсов, вы можете попробовать удалить старые или неиспользуемые индексы. Используйте команду для удаления индексов:

   ```bash
   curl -X DELETE "http://<ip-адрес>:9200/<имя_индекса>"
   ```

   #### Либо удалите все индексы (осторожно):
   ```bash
   curl -X DELETE "http://<ip-адрес>:9200/*"
   ```

3. **Проверка конфигурации шардирования**:
   Убедитесь, что количество шардов и реплик для индексов настроено правильно. Для этого проверьте настройки индексирования, так как слишком много шардов на минимальное количество узлов может привести к проблемам. Например, у вас может быть настройки, создающие больше шардов, чем может обработать ваш кластер.

   Измените настройки непосредственно при создании индекса или по умолчанию в index template.

4. **Проверка доступного места**:
   Нехватка дискового пространства на узлах также может вызвать проблемы с назначением шардов. Убедитесь, что на всех узлах достаточно свободного места.

5. **Настройка `cluster.routing.allocation`**:
   Проверьте, не включены ли настройки, препятствующие распределению шардов. Например:

   ```bash
   curl -X GET "http://<ip-адрес>:9200/_cluster/settings"
   ```

   Убедитесь, что нет настроек, блокирующих распределение шардов, например, такой блокировки:

   ```json
   "cluster.blocks.read_only_allow_delete": true
   ```

   Если такие настройки есть, удалите их:

   ```bash
   curl -X PUT "http://<ip-адрес>:9200/_cluster/settings" -H 'Content-Type: application/json' -d '
   {
       "persistent": {
           "cluster.blocks.read_only_allow_delete": false
       }
   }'
   ```

6. **Перепроверка конфигурации узлов**:
   Убедитесь, что все узлы правильно указаны в параметрах `discovery.seed_hosts` и `cluster.initial_cluster_manager_nodes`. Все узлы должны быть доступны и видимы друг для друга.

7. **Инициирование переназначения шардов**:
   Если после всех проверок проблема не решается, можно попробовать инициировать переназначение шардов. Это можно сделать с помощью команды:

   ```bash
   curl -X POST "http://<ip-адрес>:9200/_cluster/reroute?retry_failed"
   ```

### Мониторинг состояния кластера

После выполнения всех вышеуказанных действий следите за состоянием кластера с помощью команды:

```bash
curl -X GET "http://<ip-адрес>:9200/_cluster/health"
```

Если статус все еще остается "red", возможно, необходимо дополнительное исследование проблемы. В некоторых случаях может потребоваться увеличение ресурсов кластера (например, добавление новых узлов) для улучшения его производительности и способности обрабатывать шардирование.

Если у вас возникнут дополнительные вопросы или потребуются дополнительные рекомендации, не стесняйтесь обращаться!
Похожие вопросы