Еще раз про Redis
В этот раз необходим Master-Slave с переключением роли. Коротко об этой СУБД - хранит все в памяти, но в отличии от memcache умеет скидывать на диск, Master-Slave и с версии 3 Redis-Cluster.
Установка из исходников
1) RDB - такой себе снапшот раз в определенный промежуток, удобство в том что на выходе у нас один файл находящийся в /var/lib/redis/6379, который можно бекапить, переносить и прочее. Также, согласно доке, из него быстро все поднимается. Из недостатков - это потеря последних данных.
2) AOF - лог изменений, который пишется согласно настройкам (по дефолту каждую сек), при восстановлении оно просто читает файл и выполняет все что там есть.
RDB
Сохранять каждые 60 сек если 1000 или более ключей изменилось
Всякий раз когда редис делает дамп он:
1) Делает форк
2) Форкнутый процесс пишет во временный rdb файл
3) По окончанию меняет старый на новый
AOF
После этой опции каждое изменение будет добавляться в лог, fsync для сброса на диск, можно настроить отдельно.
Для настройки слейва нужно указать в конфиге только
Узлы, запущеные без
На этом slave готов, но в данном виде оно мало пригодно. Нужен еще какой-то failover, для этого есть sentinel - это отдельный процесс, который мониторит redis и оповещает о его состоянии. Самое крутое что при падении мастера он занимается выбором нового мастера, оповещает клиентов о новом мастере, и обладает возможностью шаринга конфигов между узлами. Еще согласно доке, не рекомендуется использовать 2 sentinel'a/redis'a.
Стандартный конфиг есть в каталоге redis-3.0.3/sentinel.conf, в него достаточно добавить мастер который необходимо мониторить, все остальное добавится после обнаружения.
или
/etc/init.d/sentinel start
С помощью redis-cli также можно подключиться к sentinel'у и посмотреть состояние
И последнее, необходим балансировщик который будет направлять запросы к мастеру, для этого использую haproxy
Установка из исходников
apt-get install -y tk8.5 tcl8.5 wget http://download.redis.io/releases/redis-3.0.3.tar.gz tar xvfz redis-3.0.3.tar.gz cd redis-3.0.3/ make make test make install cd utils ./install_server.shНемного про сохранение данных, существует 2 варианта:
1) RDB - такой себе снапшот раз в определенный промежуток, удобство в том что на выходе у нас один файл находящийся в /var/lib/redis/6379, который можно бекапить, переносить и прочее. Также, согласно доке, из него быстро все поднимается. Из недостатков - это потеря последних данных.
2) AOF - лог изменений, который пишется согласно настройкам (по дефолту каждую сек), при восстановлении оно просто читает файл и выполняет все что там есть.
RDB
save 60 1000Сохранять каждые 60 сек если 1000 или более ключей изменилось
Всякий раз когда редис делает дамп он:
1) Делает форк
2) Форкнутый процесс пишет во временный rdb файл
3) По окончанию меняет старый на новый
AOF
appendonly yesПосле этой опции каждое изменение будет добавляться в лог, fsync для сброса на диск, можно настроить отдельно.
Для настройки слейва нужно указать в конфиге только
slaveof 192.168.1.1 6379Узлы, запущеные без
slaveof, являются мастером. После перезапускаем redis, и смотримredis-cli info replicationНа этом slave готов, но в данном виде оно мало пригодно. Нужен еще какой-то failover, для этого есть sentinel - это отдельный процесс, который мониторит redis и оповещает о его состоянии. Самое крутое что при падении мастера он занимается выбором нового мастера, оповещает клиентов о новом мастере, и обладает возможностью шаринга конфигов между узлами. Еще согласно доке, не рекомендуется использовать 2 sentinel'a/redis'a.
Стандартный конфиг есть в каталоге redis-3.0.3/sentinel.conf, в него достаточно добавить мастер который необходимо мониторить, все остальное добавится после обнаружения.
/etc/redis/sentinel.confport 26379 dir /tmp logfile "/var/log/sentinel.log" sentinel monitor mymaster 192.168.1.1 6379 2 sentinel down-after-milliseconds mymaster 10000 sentinel failover-timeout mymaster 60000 sentinel parallel-syncs mymaster 1Для запуска
redis-sentinel /etc/redis/sentinel.confили
/etc/init.d/sentinel start
С помощью redis-cli также можно подключиться к sentinel'у и посмотреть состояние
redis-cli -p 26379127.0.0.1:26379> sentinel master mymaster127.0.0.1:26379> infoИ последнее, необходим балансировщик который будет направлять запросы к мастеру, для этого использую haproxy
/etc/haproxy/haproxy.conf
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemon
defaults
log global
mode http
option tcplog
option dontlognull
retries 3
option redispatch
maxconn 2000
timeout connect 5000
timeout client 1800000
timeout server 1800000
frontend stats-front
bind *:81
mode http
default_backend stats-back
backend stats-back
mode http
balance roundrobin
stats uri /haproxy/stats
stats auth user:password
frontend ft_redis
bind 127.0.0.1:6380 name redis
mode tcp
default_backend bk_redis
backend bk_redis
mode tcp
option tcp-check
tcp-check connect
tcp-check send PING\r\n
tcp-check expect string +PONG
tcp-check send info\ replication\r\n
tcp-check expect string role:master
tcp-check send QUIT\r\n
tcp-check expect string +OK
server R1 192.168.1.1:6379 check inter 1s
server R2 192.168.1.2:6379 check inter 1s