
Как быстро начать работу с VUE3.0: Давайте узнаем
об использовании функции кластера redis в nodejs . Я не нашел относительно полной и простой для понимания статьи, поэтому во время разработки и отладки я также делал много обходных путей. процесс.
В этой статье будет подробно описано , как построить кластер Redis локально, как использовать кластер на клиенте, а также обобщить и объяснить проблемы и ошибки, возникшие в процессе построения, чтобы избежать обходных путей в следующий раз и повысить эффективность разработки и работы.
Предыстория использования кластера такова: в одноэлементном режиме Redis с увеличением количества пользователей и посещений резко возрастает значение qps??, большое количество io -операций приводит cpu(100%) при определенное время, и в любой момент может произойти простой. В то же время Redis и другие методы пакетной обработки устраняют только симптомы, но не основную причину, и не могут преодолеть узкое место в производительности сервера . Поэтому крайне важно использовать кластерное решение или добавлять экземпляры Redis.
кластер обычно относится к кластеру серверов, который отличается от распределенной системы. Он объединяет множество серверов для выполнения одной и той же услуги. С точки зрения клиента это выглядит так, как будто существует только один сервер. Кластер может использовать несколько компьютеров для параллельных вычислений для достижения высокой скорости вычислений. Он также может использовать несколько компьютеров для резервного копирования, чтобы в случае поломки какой-либо машины вся система могла работать нормально. ( До redis3.0 вообще использовался режим дозорного, но конфигурация дозорного немного сложна, а производительность и высокая доступность средние ).
чтобы из-за механизма отказоустойчивости голосования более половины узлы считают, что определенный узел вышел из строя. Узел не работает, поэтому 2 узла не могут сформировать кластер, поэтому для кластера Redis требуется как минимум 3 узла.
Чтобы обеспечить высокую доступность кластера, на каждом узле должен быть подчиненный узел (то есть резервный узел), поэтому для кластера Redis требуется как минимум 6 серверов. (Три главных и три подчиненных, три депозита и три извлечения, высокая доступность и резервное копирование).
Конечно , мы не можем использовать такое количество серверов при локальной отладке, поэтому мы можем имитировать запуск 6 экземпляров redis локально. Кластер Redis в производственной среде. Сборка в основном такая же, как здесь.
. Вы можете установить его на официальном сайте или с помощью именованной строки
#install Brew install Redis. #Запускаем Redis-сервер #Войдите в клиент Redis redis-cli
вы должны сначала найти расположение файла конфигурации Redis
brew list redis # Проверьте расположение установочногоcd /opt/homebrew/Cellar/redis/6.2.4 # Введите версию в соответствии с местоположением Папка, в которой находится номер,open . # Откройте папкуXcode.app , чтобы открыть homebrew.mxcl.redis.plist и найти расположение redis.conf , как показано. ниже:

Создайте шесть файлов конфигурации службы
cd /opt/homebrew/etc/ (каталог файла конфигурации, найденный на предыдущем шаге)
# Должен находиться в пути /opt/homebrew/etc/ mkdir -p redis/cluster/7000 mkdir -p redis/кластер/7001 mkdir -p redis/кластер/7002 mkdir -p redis/кластер/7003 mkdir -p redis/кластер/7004 mkdir -p redis/cluster/7005
Измените файл конфигурации
. Файл конфигурации по пути /opt/homebrew/etc/redis.conf не требует изменения. Просто скопируйте его в созданный выше каталог redis/cluster/7000 , а затем измените его. Шаги следующие:
cd /opt/homebrew/etc/ # Введите каталог файла конфигурации cp redis.conf redis/cluster/7000/7000.conf. code redis/cluster/7000/7000.conf # Откройте файл конфигурации с помощью редактора или vim, чтобы изменить его.
7000.conf измените следующие свойства# Номер порта Redis (каждый файл конфигурации 7000-7005 должен быть изменен). порт 7000 # Включить режим кластера и запустить кластер с поддержкой да # Путь к файлу конфигурации внутреннего файла конфигурации кластера, nodes-6379.conf по умолчанию (каждый файл конфигурации 7000-7005 должен быть изменен) файл конфигурации кластера nodes-7000.conf # Тайм-аут межузловой связиcluster-node-timeout 5000 # Только сохранение данных да
cd /opt/homebrew/etc/redis/cluster # Введите каталог файла конфигурации cp 7000/7000.conf 7001/7001.conf КП 7000/7000.conf 7002/7002.conf cp 7000/7000.conf 7003/7003.conf cp 7000/7000.conf 7004/7004.conf cp 7000/7000.conf 7005/7005.conf
7001.conf-7005.confПримечание. В каждом файле конфигурации необходимо настроить разные port和cluster-config-file значение port和cluster-config-file (иначе кластер не вступит в силу), отличающееся портом.
Каталог файла конфигурации можно найти с помощью команды find /opt/homebrew -name nodes-7000.conf .
Поскольку мы настроили 6 служб, невозможно запустить или остановить их одну за другой. Вам нужно использовать сценарий оболочки, чтобы
войти в каталог /opt/homebrew/etc/redis/cluster и создать его. start.sh и остановить файл .sh
# start.sh file#!/bin/sh. redis-server /opt/homebrew/etc/redis/cluster/7000/7000.conf & redis-server /opt/homebrew/etc/redis/cluster/7001/7001.conf & redis-server /opt/homebrew/etc/redis/cluster/7002/7002.conf & redis-server /opt/homebrew/etc/redis/cluster/7003/7003.conf & redis-server /opt/homebrew/etc/redis/cluster/7004/7004.conf & redis-server /opt/homebrew/etc/redis/cluster/7005/7005.conf & # файл stop.sh #!/bin/sh redis-cli -p 7000 выключение и redis-cli -p 7001 выключение и redis-cli -p 7002 выключение и redis-cli -p 7003 выключение и redis-cli -p 7004 выключение и redis-cli -p 7005 выключение и
выполнение ./start.sh или ./stop.sh для запуска и остановки службы.
Выполните ps -ef |grep redis чтобы просмотреть запущенную службу Redis.
Примечание. Необходимо выполнить ./. start.sh в первый раз. Авторизуйте разрешения на выполнение через sudo chmod +x start.sh
redis-cli -p 7000 # Запуск одного клиента redis-server 7000/7000.conf # Запуск одного сервера redis-cli -p 7000 Shutdown # Выключить сервер sudo chmod +x start.sh # Включить разрешение на выполнение сценария # Установить отношения главный-подчиненный Redis (три главных и три подчиненных) redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 nodes кластера #Просмотреть состояние узла кластера (введите клиента для выполнения) Информация о кластере #Просмотр информации о кластере (введите клиента для выполнения) Посмотреть все значения ключей: ключи * Удалить значение по указанному индексу: ключ del Очистите данные всего сервера Redis:lushall Очистите все ключи в текущей библиотеке: клиентlushdb
Redis. Cluster обеспечивает функцию автоматического сегментирования на нескольких узлах Redis. Используйте шесть ранее созданных серверов Redis, а затем запустите node redis.js , вы можете протестировать эффект кластера. йоредис
// redis.js
const Redis = require("ioredis");
const кластер = новый Redis.Cluster([
{
порт: 7000,
хост: «127.0.0.1»,
},
{
порт: 7001,
хост: «127.0.0.1»,
},
]);
Cluster.set("foo", "bar");
Cluster.get("foo", (err, res) => {
// res === 'бар'
}); импортируйте очередь из «быка»
// Создаем экземпляр очереди Redis const instance = new Queue('custom', {
префикс: '{myprefix}',
createClient (тип) {
// экземпляр кластера кластера такой же, как и выше, возвращаемый кластер
}
})
//Добавляем данные в очередь Redis (производитель)
экземпляр.добавить(
'запрос',
{
...параметры
},
{
удалитьОнКомплете: ложь
}
).catch(e => {
console.error(е)
})
// Обратный вызов потребителя instance.process('request', 5, async (job, Done) => {
console.log('Получить текущие потребляемые данные:', job.data)
//Выполняем асинхронную операцию в ожидании нового обещания((resolve)=>resolve())
сделанный()
}) Существует проблема при использовании bull Framework для подключения к кластеру ioredis : каждый раз, когда данные push в очередь redis , соответствующая функция обратного вызова может запускаться несколько раз. В настоящее время невозможно определить, является ли это проблемой. использование или проблема с самим фреймворком (если вы знаете больше, приветствуем всех, оставьте сообщение, чтобы сообщить).
Альтернатива кластеризации: если синхронизация и миграция данных не требуются, на клиенте можно использовать несколько экземпляров redis в сочетании с Math.random() , чтобы разделить данные поровну на один из redis , тем самым решая проблему оборудования с одним экземпляром. ( cpu и т. д.) проблема с узким местом.
1. Возникает ошибка при подключении к Redis в системе Mac?
Сообщение об ошибке консоли: Не удалось подключиться к Redis по адресу 127.0.0.1:6379: Соединение отклонено.
Причина: Сервер не запущен или не запускается.
Решение: Сначала необходимо запустить сервер Redis.
Ссылка на
redis-serverhttps://blog. csdn.net/qq_23347459/article/details/104257529
2. При запуске клиента выдает ошибку при чтении или записи?
Сообщение об ошибке: ClusterAllFailedError: не удалось обновить кэш слотов.
Причина: атрибуты файла конфигурации кластера в файлах конфигурации каждой службы согласованы.
Обработка: изменить уникальное значение атрибута.
Ссылка 1
https://stackoverflow.com/questions/57350961/ioredis-clusterallfailederror-failed-to-refresh-slots-cache
.Ссылка 2
https://github.com/luin/ioredis/ Issues. /711
3. Не удалось выполнить команду Redis создания главного-подчиненного устройства?
Оператор выполнения: redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
Ошибка запроса: [ERR] Node 127.0.0.1:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0
: при выполнении оператора создания данные не очищаются и кластер не сбрасывается.
Обработка: очистка данных
.
Сбросьте кластер, очистите файлы rdb и aof,см. очистку данных Redis
https://stackoverflow.com/questions/37206993/redis-server-cluster-not-working
# Воспользуйтесь службой порта 7000. в качестве примера повторите следующие операции для 7001-7005 $redis-cli -p 7000 127.0.0.1:7000> промыть 127.0.0.1:7000> сброс кластера 127.0.0.1:7000>выход # Используйте find, чтобы найти файлы rdb и aof (также в каталоге rdb) найдите /opt/homebrew -name dump.rdb # Повторно выполнить оператор создания успешно redis-cli --cluster create --cluster-replicas 1 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1: 7005
Использование кластера Redis на клиенте очень простое, по сравнению с этим настройка на сервере будет более громоздкой.
Конкретное использование клиента объясняется лишь кратко. Во время использования следует уделять внимание таким вопросам, как синхронизация и миграция данных Redis.
Хотя использование кластера может улучшить возможности обслуживания, поддержать репликацию master-slave, дозорный режим, разделение чтения и записи, а также равномерно распределить нагрузку на сервер и т. д. Однако он не имеет функций автоматической отказоустойчивости и восстановления. В случае простоя некоторые запросы на чтение и запись завершатся неудачей, что снижает доступность системы. При использовании анализируйте и выбирайте разные решения исходя из условий бизнеса.
Эта статья воспроизведена по адресу: https://juejin.cn/post/7079928963107127327.
Автор: Тагер