Документальный фильм об онлайн-обновлении Redis

Redis задняя часть сервер Командная строка

hello world!
hello world!

## QPS связанные

QPS — количество запросов, обрабатываемых в секунду. В определенной степени это может отражать ситуацию с давлением службы в настоящее время. Далее можно проанализировать, как примерно оценить количество запросов в секунду службы через обращение.

Справочная информация. Событие, которое было запущено вчера, будет отправлять купоны в соответствии со временем исполнения и вычислять количество запросов в секунду для этого поведения отправки купонов.

Анализ: будет журнал для каждого поведения доставки купона, как показано ниже.

2017-10-27 15:10:16    songtime=355 userid=56135899 giftid=20331 addednumbers=1

Таким образом, количество запросов песенного времени в секунду можно рассчитать как целевое значение.

Таким образом, вы можете использовать следующую команду:

developer@hosttx:~$ sudo devpssh -i -h /opt/iplist.all.svn 'grep songtime /home/log/baofang-yanzhishengdian.log' | grep 10-27 | cut -d " " -f 2  | uniq -c

Поскольку количество посетителей относительно невелико, количество запросов в секунду обычно составляет 2–3.

Объяснение: Вам может быть интересно, как это рассчитывается? Поясним, наша цель — проверить количество логов songtime за определенную секунду.

  • Определить, содержит ли журналsongtime, вы можете использовать команду grep.
  • Чтобы найти записи журнала между несколькими компьютерами GET онлайн, вы можете использоватьsudo devpssh -i -h /opt/iplist.all.svn 'grep songtime /home/log/baofang-yanzhishengdian.log'
  • Вы можете использовать команду cut для разделения журнала второго уровня,-d "delimiter"используется для указания символов-разделителей,-fNКакое поле используется для отображения, по умолчанию считается от 1.
  • Команда uniq короткая и лаконичная,-cПараметр используется для статистики, но только один и тот же лог в двух соседних строках будет накапливаться по порядковому номеру перед первой.

Смоделируйте процесс синхронизации Redis

Сначала проверьте, запущена ли в данный момент служба Redis на компьютере:

ps aux | grep redis-server
ps aux | grep redis-server

Вроде нет, тогда можно запустить несколько redis-серверов, т.к. он на одной машине, поэтому хорошо указать разные порты.

redis-server --port 6666
redis-server --port 6666

Аналогичным образом используйтеredis-server --port 7777Запустите другую службу Redis.

Наконец, давайте посмотрим, запущена ли служба.

ps aux | grep redis-server
ps aux | grep redis-server

Что ж, теперь есть два совершенно новых сервиса Redis. Прежде чем приступить к подготовке конкретных операций репликации и синхронизации master-slave, укажите отношение master-slave.

  • Порт 6666 как мастер
  • Порт 7777 как подчиненный

Затем отслеживайте ведомое устройство с помощью команды монитора redis-cli, чтобы увидеть, как ведомое устройство реагирует на изменение некоторых ключей в ведущем устройстве.

对slave使用monitor监视
Используйте монитор для мониторинга ведомого

Пусть 7777 будет рабом 6666 ниже.

slaveof 127.0.0.1 6666
slaveof 127.0.0.1 6666

В то же время под терминалом 7777сервера появится некоторый вывод как слейв 6666.

7777终端输出
Выход терминала 7777

В то же время 6666, являющийся ведущим, также будет отвечать на запрос синхронизации, отправленный 7777.

6666终端输出
Выход терминала 6666

确认同步结果
Подтвердить результат синхронизации

Чтобы имитировать синхронизацию, вам нужно только установить несколько ключей в мастере в это время и посмотреть на вывод в окне монитора ведомого.

slave实时同步master
Ведомый синхронизирует ведущего в режиме реального времени

Видно, что ведомое устройство будет синхронизировать данные на ведущем в режиме реального времени для достижения согласованности данных. Таким образом выполняется простая синхронизация master-slave.

Но следует отметить, что redis в качестве слейва писать нельзя. Например, мы случайным образом устанавливаем несколько ключей на подчиненном устройстве, чтобы увидеть, если это не так, вы увидите следующие результаты.

slave状态下不能写入数据
Данные не могут быть записаны в ведомом состоянии

Это потому, что Redisslave-read-onlyПо умолчаниюyesТо есть он находится в состоянии только для чтения, поэтому эту переменную нужно модифицировать после завершения синхронизации.config set slave-read-only noможет.

config set slave-read-only no
config set slave-read-only no

Операции на слейве не повлияют на мастер, что необходимо.

对slave的操作不会影响master
Операции на слейве не повлияют на мастер

После завершения окончательной синхронизации, если вы не хотите, чтобы 7777 был подчиненным 6666, вы можете использоватьslaveof no oneреализовать.

停止slave模式可以使用slaveof no one 来实现
Остановить подчиненный режим можно с помощью slaveof no one для достижения

Онлайн-обновление Redis

Redis работает онлайн, как правило, для стабильности, а версия не очень высокая. Но он не может быть слишком низким, поэтому иногда необходимо обновить Redis, что неизбежно. Однако онлайн-редис обычно содержит большой объем данных, который может быть на N больше, чем G, и не может напрямую выполнять синхронизацию ведущий-ведомый, поэтому запросы синхронизации от подчиненных будут вытеснять запросы внешних пользователей. Заставляет службу выдавать сигнал тревоги.

обычно онлайнRedisЧтобы сделать обновление, есть такой способ мышления:найти замену, а затем выполните следующие действия.

  • сделать заменуslaveстать онлайн-машиной, после завершения синхронизацииslave-read-onlyУстановить какno.
  • Привлекайте интернет-трафик кslaveвверх, в это времяslaveСтаньте онлайн-машиной, просмотрите онлайн-машинуQPS, до 0.
  • В это время удалите онлайн旧Redis, затем установите новую версиюRedis.
  • новая версияRedisв видеslaveсинхронизировать онлайнRedisданные, после завершения синхронизации то же самое будетslave-read-onlyУстановить какno, а затем верните онлайн-трафик, проверьте предыдущий替身RedisизQPSМожет быть 0.

Во время этого процесса см.redisпросилQPSЛучший путь черезmonitorреализовать.

redis-cli -h 127.0.0.1 -p 6379 monitor | cut -d "." -f1 | uniq -c

пока на линии апгрейдаRedisКогда количество внешних подключений, особенно количество внешних подключений, иногда это обычный бизнес-запрос, иногда этоcrontabСкрипты работают по статистическим данным, в любом случае ситуация разнообразная, можно пройтиss -anp | grep redis:portКоманда для проверки состояния соединения.

Следует отметить, что вам необходимо использовать привилегии суперпользователя, чтобы увидеть конкретную информацию о PID.

ss -anp | grep .7777
ss -anp | grep .7777

Тогда вы можете пройтиps auxКоманда определяет, какая команда запущена. Затем назначьте правильное лекарство и завершите всю операцию.

查看具体是什么命令在连接redis
Проверьте, какая команда подключается к Redis


Суммировать

Напомним, что эта статья в основном посвящена онлайн-redisОпыт обновления, а также повествование о некотором здравом смысле. Чтобы двигаться шаг за шагом,QPSиRedisКонкретные этапы работы синхронизации ведущий-ведомый и, наконец, приводят к этапам и процессу обновления.

На самом деле шаги не важны, важна общая идея, а также умение пользоваться инструментами.