Vue global de la configuration
- Système
- Debian stable ( 8.x )
- Kernel :
- Paramétrages TCP, Memoire et du système de fichier
- Redis
- Serveur : Tous les serveurs redis pourront etre maitre ou esclave
- Sentinel : Gere la bascule master/slave entre le serveurs en cas de panne
- Keepalived
- Placer L’IP de service ( vrrp ) sur le serveur Redis Maitre
Redis
Installation des paquets redis-server et redis-tools
apt-get install redis-server redis-tools
Configuration commune redis
daemonize yes
pidfile "/var/run/redis/redis-server.pid"
port 6379
tcp-backlog 65535
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-disable-tcp-nodelay no
slave-priority 100
maxclients 10000
appendonly yes
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
Configuration commune aux deux serveur sentinel
Remplacer 192.168.1.2 par l’ip de l’autre serveur
port 26379
daemonize yes
pidfile "/var/run/redis/redis-sentinel.pid"
loglevel notice
logfile "/var/log/redis/redis-sentinel.log"
dir "/tmp"
sentinel monitor redis_master 192.168.1.2 6379 2
sentinel failover-timeout redis_master 6000
sentinel config-epoch redis_master 1
sentinel leader-epoch redis_master 1
Keepalived
J’ai mit la meme configuration, sur les different neuds, ils auront donc tous le meme poid, le fonctionnement fait, qu’il n’y aura qu’un seul nœud a la fois OK vu de keepalied, tous les autre seront en dans l’état " fault "
Paramètres a modifier :
- router_id : doit etre unique par cluster KeepAlive
- virtual_ipaddress : ip de votre vrrp redis
- interface : si vous avez plusieurs carte réseau
global_defs {
router_id VRRP_REDIS
}
vrrp_script chk_redis {
script "redis-cli info replication| grep 'role:master' 1>/dev/null 2>1"
interval 2
}
vrrp_instance redis {
interface eth0
state MASTER
advert_int 2
virtual_router_id 2
priority 101
track_interface {
eth0
}
virtual_ipaddress {
192.168.1.100 dev eth0 label eth0:redis
}
track_script {
chk_redis
}
notify /usr/local/bin/keepalived_notif.sh
}
on script pour généré un fichier d’état du keepalied
#!/bin/sh
MAILTO='[email protected]'
echo "<p>Dernier changement d’état : $(date +"%Y/%m/%d %H:%M : ") -> <u>$3</u></p>" > /tmp/keepalived.$2.state
case $3 in
MASTER )
echo 00 >> /tmp/keepalived.$2.state
echo "Dernier changement d’état : $(date +"%Y/%m/%d %H:%M : ") -> $3" | mail -s "$(hostname -s ) - $2 - $3" $MAILTO
;;
BACKUP )
echo 11 >> /tmp/keepalived.$2.state
echo "Dernier changement d’état : $(date +"%Y/%m/%d %H:%M : ") -> $3" | mail -s "$(hostname -s ) - $2 - $3" $MAILTO
;;
FAULT )
echo 22 >> /tmp/keepalived.$2.state
echo "Dernier changement d’état : $(date +"%Y/%m/%d %H:%M : ") -> $3" | mail -s "$(hostname -s ) - $2 - $3" $MAILTO
pkill -9 keepalived
;;
* )
echo 44 >> /tmp/keepalived.$2.state
;;
esac
Paramètres kernel
Paramètres kernel lié a keepalived ( permet d’écouter sur une ip inexistante, utile lors de la bascule)
net.ipv4.ip_nonlocal_bind=1
Paramètres lié a Redis
fs.file-max = 1000000
fs.nr_open = 1000000
vm.overcommit_memory=1
net.core.somaxconn=512
vm.swappiness=0
net.ipv4.tcp_sack=1
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_congestion_control=cubic
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_recycle=1
Depot
Tous les fichiers sont ici -> https://git.depad.fr/depad/redis-ha