На slave сервере потерялись ключи? Данные утеряны? Короткий ответ - "нет". Тем не менее, было бы полезно понять, почему, собственно, ваш slave показывает меньшее количество ключей, даже если вы не потеряли никаких данных. Причина в двух деталях реализации - как Redis работает с ключами, чей срок жизни истёк и как мастер Redis посылает данные для новых slave серверов.
Как в Redis заканчивается срок жизни для ключей?
Просроченные ключи в Redis не удаляются из памяти в тот момент, когда истекает срок их жизни. Вместо этого, они удаляются с помощью одного из двух методов:- Когда вы пытаетесь читать или писать, сервер Redis сначала проверяет, существует ли этот ключ и имеет ли он срок действия. Если он существует и просрочен, Redis удаляет его из оперативной памяти до выполнения операции.
- Чтобы избежать ситуации, в которой ключи останутся в памяти навсегда, если к ключам не обращались, Redis использует простой пассивный алгоритм: каждые 10 миллисекунд, он берёт 100 случайных ключи со сроком жизни и сразу удаляет любые ключи, срок жизни которых уже истёк. Если удалось удались 25 или более ключей, Redis берёт еще 100 ключей и т.д.
Понимание того, как работает второй метод очень важно, т.к. это означает, что до 25% из ваших ключей могут быть уже просрочены, но еще не были удалены из памяти. При этом Redis будет по прежнему их учитывать и в "ключах" и в "истекает" при выводе INFO, пока они не будут исключены из памяти.
Как Redis шлёт данные на slave сервер?
Когда новый slave подключатся к master, мастер создает RDB снимок своего набора ключей и отправляет его в slave. А когда Redis создает RDB снимки, он не включает в него просроченные ключи, даже если они еще не удалены из памяти.
Так почему же на slave меньше ключей, чем на master?
При подключении, slave к Redis серверу он получает набор данных, который не включает в себя ключи с истёкшим сроком жизни, даже если они еще не были удалены из памяти. И поскольку до 25% от вашего общего количества ключей, могут быть ключи срок жизни которых уже истёк, твой slave может показывать количество ключей до 25% ниже, чем у мастера. Кроме того, это та же самая причина, при которой ваши ключи со сроком жизни могут потеряться при восстановлении сервера Redis из резервной копии RDB.
Оригинал на английском языке: http://www.redisgreen.net/blog/missing-keys-on-redis-slave/?utm_source=redisweekly&utm_medium=email
Комментариев нет :
Отправить комментарий