Настройка основного конфигурационного файла Redis — redis.conf (его расположение на файловой системе зависит от дистрибутива и способа установки)
1.Увеличиваем количество входящих соединений
Прроверяем текущее значение
1 |
# cat /proc/sys/net/core/somaxconn |
1 |
128 |
1 |
# nano /etc/redis.conf |
1 |
tcp-backlog 511 |
Выставим somaxconn больше,чем tcp-backlog
1 |
# sysctl -w net.core.somaxconn=1024 |
Для автозагрузки используем
1 |
# nano /etc/sysctl.conf |
1 |
net.core.somaxconn=1024 |
2.Настройка переменной ядра для работы с памятью vm.overcommit_memory
Определяет условия разрешения и отказа запросов больших объемов памяти.
При установки значения этого параметра в 1 ядро не обрабатывает перерасход памяти. При этом вероятность превышения нагрузки на память возрастает, но в то же время увеличивается производительность задач, активно использующих память
1 |
# sysctl -w vm.overcommit_memory=1 |
Для автозагрузки используем
1 |
# nano /etc/sysctl.conf |
1 |
vm.overcommit_memory=1 |
3. Отключение функции ядра Transparent HugePages
1 |
# echo never > /sys/kernel/mm/transparent_hugepage/enabled |
1 |
# cat /sys/kernel/mm/transparent_hugepage/enabled |
1 |
always madvise [never] |
Для автозагрузки добавляем в /etc/rc.local (перед строкой выхода exit 0)
1 |
# nano /etc/rc.local |
1 2 3 |
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabled fi |
4.Использование Unix-сокета вместо порта
Если сервер и клиент Redis находятся на одном хосте, то для ускорения работы Redis можно использовать Unix-сокет вместо порта(где используется TCP/IP-стек)
1 |
# nano /etc/sysctl.conf |
1 2 |
unixsocket /var/run/redis/redis.sock unixsocketperm 777 |
Если необходимо отключить работу Редиса через TCP/IP-стек
1 2 |
# port 6379 port 0 |
Подключение с консоли производится путем указания сокет-файла
1 |
# redis-cli -s /var/run/redis/redis.sock |
5.Определение количества одновременно подключенных клиентов
Значение этого параметра должно быть согласована со значением количества одновременно открытых файлов для пользователя, под которым запущен процесс redis
1 |
maxclients 10000 |
Увеличим количество одновременно открытых файлов для пользователя redis(например, до 10240)
1 |
# nano /etc/security/limits.d/95-redis.conf |
1 2 |
redis soft nofile 10240 redis hard nofile 10240 |
Проверяем
1 |
# su -l redis -s /bin/bash -c "ulimit -n" |
1 |
10240 |
6.Определение размера оперативной памяти выделяемой для кэширования
В случае дефолтного значения(нулевого значения), будет использована вся доступная оперативную память.
1 |
maxmemory 512mb |
При достижении установленного лимита памяти Redis будет пытаться удалять ключи из кеша согласно политике,указанной параметром maxmemory-policy.
Если Redis не может удалить ключи согласно политике либо установлена политика ‘noeviction'(политика,при которой ничего не удаляется из кеша, а отдается ошибка при операции записи), то Redis будет отдавать ошибку командам, которые пытались использовать больше памяти (SET,LPUSH и т.д.) и при этом корректно выполнять команды на чтение (GET и т.д.)
7.Определение политики работы с памятью
При данной политике, во время нехватки памяти, будут удаляться наиболее старые и наименее используемые ключи, чтобы освободить место для новых.
1 |
maxmemory-policy allkeys-lru |
Возможные политики
1 2 3 4 5 6 |
volatile-lru - удаляет ключи, удаляя наименее используемые, если установлен срок истечения allkeys-lru - удаляет ключи, убирая наименее используемые ключи (least recently used (LRU) volatile-random - удаляет ключи в случайном порядке, если установлен срок истечения allkeys-random - удаляет ключи в случайном порядке volatile-ttl - в первую очередь удаляет ключи c наименьшим сроком истечения noeviction -> ничего не удаляет, только возвращает ошибку при попытке использовать памяти больше лимита |
Бекапы
В Redis реализовано два persistence-режима: RDB и AOF.
Первый режим(RDB)
По умолчанию используется режим RDB
При включении RDB система создает компактные снэпшоты данных в заданные интервалы времени. Это хороший подход для восстановления информации в случае сбоя. Бэкапы пишутся в параллельном процессе при помощи команды fork(), который в случае большой БД затратен по ресурсам и времени. Кроме этого, в случае неожиданного выключения сервера, все данные, которые не были записаны или находились в процессе создания резервной копии, будут утеряны.
По умолчанию установлены параметры:
1 2 3 |
save 900 1 save 300 10 save 60 10000 |
Создать копию, если было хотя бы одно изменение в течение 15 минут (900 секунд);
Создать копию, если в течение 5 минут (300 секунд) было хотя бы 10 изменений;
Создать копию, если за минуту было 10 000 изменений.
Второй режим(AOF)
Append Only File(AOF) представляет собой лог операций, которые выполняют клиенты. то есть все новые данные добавляются к уже имеющимся данным, причем, каждую секунду по умолчания.
Так что в случае сбоя потери будут минимальны. Но подход немного медленнее RDB, лог-файл существенно больше, производительность зависит от параметров fsync.
Включение логирование команд,выполнение которых превышает указанное кол-во микросекунд
Установка отрицательного значения выключает логирование, а установка нулевого значения – включает логирование каждой команды
1 |
slowlog-log-slower-than 10000 |
Длина slow log. Когда новая команда записывается,самая старая – удаляется с очереди логируемых команд
1 |
slowlog-max-len 128 |
Конфигурационный файл редис имеет вид
1 |
# grep -vE '^$|^#' /etc/redis.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
daemonize yes pidfile /var/run/redis.pid port 0 tcp-backlog 511 bind 127.0.0.1 unixsocket /var/run/redis/redis.sock unixsocketperm 777 timeout 0 tcp-keepalive 0 loglevel notice logfile /var/log/redis/redis.log databases 16 save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /var/lib/redis/ slave-serve-stale-data yes slave-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no slave-priority 100 maxclients 10000 maxmemory 64mb maxmemory-policy allkeys-lru appendonly no appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-entries 512 list-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes |
Получение полной информации о Redis
1 |
# redis-cli info |
Получение статистики
1 |
# redis-cli info stats |
Мониторинг скорости кеширования
1 |
# redis-cli info stats | grep keyspace |
1 2 |
keyspace_hits:2927 keyspace_misses:150 |
Мониторинг лимита доступной памяти maxmemory через eviction ключей:
1 |
# redis-cli info stats | grep evicted_keys |
1 |
evicted_keys:0 |
Источники:
https://ruhighload.com/post/Redis-optimization
https://www.techandme.se/performance-tips-for-redis-cache-server/
https://rusadmin.biz/web-server/redis-setup-for-cache/