MEASUREMENT
bench/valkey-cluster/runs/notready.txt
The script that produced the numbers in the article, and the record of the run. The file is read from the repository at build time — this is the code that was run, not a copy of it.
The run below is recorded in Russian. It is a lab record, kept in the language it was written in; the numbers, the tables and the code read the same either way.
Record of the run
This measurement has no recorded run — only the script.
Script
53 linesValkey 9.1.2 · один хост, процессы на случайных портах
окно между «кластер собран» и «кластер переживёт отказ»
11. СРАЗУ ПОСЛЕ СБОРКИ КЛАСТЕР РАБОТАЕТ, НО ОТКАЗ НЕ ПЕРЕЖИВЁТ
----------------------------------------------------------------------
cluster-node-timeout 2000 мс
cluster-replica-validity-factor 10
repl-ping-replica-period 10
как расходятся два признака готовности:
t= 0.01 cluster_state:ok у всех узлов (слоты покрыты, запросы обслуживаются)
t= 6.08 master_link_status:up у всех реплик (есть кому повышаться)
окно между ними 6.07 с
Внутри этого окна кластер выглядит полностью рабочим: слоты
покрыты, CLUSTER INFO отвечает ok, ключи пишутся и читаются. Но
у реплик ещё нет ни одной завершённой синхронизации, и
master_link_status у них down.
12. ЧТО БУДЕТ, ЕСЛИ МАСТЕР УПАДЁТ ВНУТРИ ЭТОГО ОКНА
----------------------------------------------------------------------
мастер, который упадёт 127.0.0.1:39151
его реплика 127.0.0.1:48151
master_link_status реплики down
master_link_down_since_seconds -1
t=0.00 мастер 39151 убит, ждём переключения 40 с
t= 0.00 состояние кластера ok, роль реплики slave
t= 2.87 состояние кластера fail, роль реплики slave
реплика повысилась НЕТ, за 40 с
что реплика записала в журнал:
Currently unable to failover: Disconnected from primary for
longer than allowed. Please check the
'cluster-replica-validity-factor' configuration option.
Это не поломка и не редкий случай — это прямое следствие того,
как считается возраст данных реплики. У реплики, ни разу не
подключившейся к мастеру, отметка «когда канал упал» так и
осталась нулевой, поэтому её данные считаются бесконечно
старыми, и повышаться она отказывается — навсегда, а не до
истечения какого-нибудь таймаута.
Практический вывод не про Valkey, а про эксплуатацию: «кластер
поднялся» и «кластер держит отказ» — разные проверки. Первая
отвечает на вопрос, обслуживаются ли запросы; вторая требует
смотреть на master_link_status каждой реплики. Автоматика,
которая раскатывает кластер и сразу гасит старый, по первой
проверке пройдёт, а по второй — нет.