Русские Блоги
Русские Блоги
Для построения кластера в одной системе существует два основных решения: синхронизация данных и отказоустойчивость кластера.
Наивный план
Простое и грубое решение состоит в том, чтобы развернуть несколько идентичных сервисов Redis, а затем использовать балансировку нагрузки для распределения нагрузки и мониторинга состояния сервиса. Преимущество этой схемы — простая отказоустойчивость, пока она существует, весь кластер все еще доступен. Однако его проблема заключается в обеспечении согласованности данных этих служб Redis, что вызовет большое количество операций синхронизации данных, что повлияет на производительность и стабильность.
Redis кластерное решение
Кластерное решение Redis основано на идее разделяй и властвуй. Данные в Redis хранятся в форме Key-Value, а данные разных ключей не зависят друг от друга. Следовательно, Ключ может быть разделен на несколько разделов в соответствии с определенным правилом, и данные разных разделов могут храниться на разных узлах. Эта схема похожа на структуру хэш-таблицы в структуре данных. В реализации кластера Redis используется алгоритм хеширования (формула CRC16(Key) mod 16383 ) Карта Ключ к целому числу в диапазоне от 0 до 16383. Таким образом, каждое целое число соответствует хранилищу нескольких данных значения ключа, а абстрактное хранилище, соответствующее такому целому числу, называется интервалом. Каждый узел Redis Cluster, если быть точным, главный узел отвечает за определенный диапазон слотов.Кластер всех узлов охватывает весь диапазон от 0 до 16383 слотов.
Говорят, что любую проблему с компьютером можно решить, добавив промежуточный слой. Концепция слотов тоже такой слой. Он находится между данными и узлом, что упрощает сложность операций расширения и сжатия. Отношение отображения между данными и интервалом завершается с помощью фиксированного алгоритма, и обслуживание не требуется. Узлу необходимо только поддерживать отношение отображения между собой и интервалом.
Slave
Вышеупомянутое решение только решает проблему расширения производительности, и отказоустойчивость кластера не была улучшена. Метод повышения отказоустойчивости обычно заключается в использовании каких-либо резервных / избыточных средств. Узел, отвечающий за определенное количество слотов, называется главным узлом. Чтобы повысить стабильность кластера, каждый главный узел может быть настроен с несколькими резервными узлами, которые называются подчиненными узлами. Как правило, подчиненный узел сохраняет данные главного узла в виде холодной резервной копии и заменяет главный узел, когда главный узел выходит из строя. В некоторых случаях, когда давление доступа к данным является относительно высоким, подчиненный узел также может обеспечивать функцию чтения данных, но данные в режиме реального времени подчиненного узла будут несколько хуже. Операция записи данных может быть выполнена только через главный узел.
Запрос перенаправления
Когда узел Redis получает команду для ключа, если слот, соответствующий ключу, не находится в пределах его собственной ответственности, он возвращает ошибку перенаправления MOVED, сообщая клиенту перейти на правильный узел для доступа к данным.
Если происходят частые ошибки перенаправления, это неизбежно повлияет на производительность доступа. Поскольку алгоритм отображения от ключа к слоту является фиксированным и общедоступным, клиент может поддерживать отношение отображения между слотом и узлом внутри. При доступе к данным он может вычислить слот по ключу и найти правильный узел для уменьшения ошибок перенаправления. В настоящее время большинство языков разработки клиентов Redis реализуют эту стратегию. Этот адресhttps://redis.io/clientsВы можете просмотреть клиент Redis на основных языках.
Диагностика проблем с WMI
В первую очередь нужно проверить служба Windows Management Instrumentation (Winmgmt) установлена в Windows и запущена. Вы можете проверить состояние службы в консоли services.msc или с помощью PowerShell:
Get-Service Winmgmt | Select DisplayName,Status,ServiceName
Если служба Winmgmt запущена, вы можете проверить работоспособность WMI, обратившись к ней с помощью простого WMI-запроса. Вы можете выполнить wmi запрос из командной строки или из PowerShell. Например, следующая команда выведет список установленных в Windows программ:
wmic product get name,version
Простейшая PowerShell команда для получения информации о версии и билда Windows 10 через WMI может выглядеть так:
Как вы видите, служба WMI ответила на запрос корректно. Если при выполнении такого WMI-запроса Windows возвращает ошибку, скорее всего сервиса WMI работает некорректно, поврежден WMI репозиторий или есть какие-то другие проблемы.
В моем случае, например, при открытии свойств WMI Control в консоли управления компьютером (compmgmt.msc) появлялась надпись:
Ранее для диагностики WMI существовала официальная утилита от Microsoft – WMIDiag.vbs (Microsoft WMI Diagnosis). WMIdiag это vbs скрипт, который проверяет различные подсистемы WMI и записывает собранную информацию в лог файлы (по умолчанию логи находятся в каталоге %TEMP% — C:USERS%USERNAME%APPDATALOCALTEMP). Получившийся отчет состоит из файлов, имена которых начинаются с WMIDIAG-V2.2 и включает в себя следующие типы фалов:
- .log файлы содержат подробный отчет об активности и работе утилиты WMIDiag;
- .txt файлы содержат итоговые отчеты о найденных ошибках, на которые стоит обратить внимание;
- В .csv файлах содержится информация, нужная для долгосрочного анализа работы подсистемы WMI.
в противном случае появится ошибка:
После окончания работы утилиты WMIDiag администратор должен изучить полученные файлы логов, проанализировать и попытаться исправить найденные ошибки.
К сожалению, последняя версия WMIDiag 2.2 корректно работает только с версиями до Windows 8.1/Windows Server 2012 R2. На данный момент Microsoft даже удалила ссылку на загрузку WMIDiag из Download Center. Но при желании, этот скрипт можно найти в сети.
WMIDiag может дать подробную информацию по исправлению частных ошибок в WMI, но в большинстве случаев процесс это довольно трудоемкий и стоит потраченного времени только при решении инцидентов в критичных системах (как правило, на продуктивных серверах). Для массового сегмента рабочих станций пользователей сбросить и пересоздатьWMI репозиторий в Windows.