您的位置:首页 > 数据库 > Redis

Keepalived架构高可用的redis数据库缓存服务器

2014-08-20 10:34 477 查看
一. 架构图:



二. keepalived + redis安装
略......
三. 配置文件配置
1. master:
/etc/keepalived/keepalived.conf
/opt/redis/conf/redis.conf
/opt/redis/script/redis_master.sh
/opt/redis/script/redis_backup.sh
/opt/redis/script/redis_check.sh
/opt/redis/script/redis_fault.sh
/opt/redis/script/redis_stop.sh
master-keepalived:
# keepalived.conf
# /etc/keepalived/keepalived.conf

global_defs {
router_id LVS_DEVEL
}
vrrp_script Monitor_Redis {
script "/opt/redis/script/redis_check.sh" ###监控脚本
interval 3 # 每3秒执行一次
#weight -20
}
# VIP1
vrrp_instance VI_1 {
state BACKUP # 主备服务器都设置成BACKUP
interface eth1
virtual_router_id 155 # 主备服务器一致
priority 100 # 备份服务上将100改为90
advert_int 1 # 检查间隔
nopreempt # 设置为不抢占,注意这个配置只能设置在state为BACKUP的主机上,而且这个主机的priority必须比另外一台高
authentication {
auth_type PASS
auth_pass 1111
}
notify_master /opt/redis/script/redis_master.sh
notify_backup/opt/redis/script/redis_backup.sh
notify_fault /opt/redis/script/redis_fault.sh
notify_stop /opt/redis/script/redis_stop.sh
track_script {
Monitor_Redis # 调用redis进程检测脚本
}
virtual_ipaddress {
192.168.98.155/24 dev eth1 # 如果有多个VIP,继续换行填写.
}
}
master-redis:
# /opt/redis/conf/redis.conf
daemonize yes
pidfile /opt/redis/logs/redis1m.pid
port 6379
timeout 180
tcp-keepalive 60
loglevel notice
logfile /opt/redis/logs/redis1m.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 /opt/redis/redis-db/
slave-serve-stale-data yes
slave-read-only yes
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
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
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
redis检测脚本:
#!/bin/bash
# /opt/redis/script/redis_master.sh
REDISCLI="/usr/local/bin/redis-cli"
LOGFILE="/opt/redis/logs/keepalived-redis-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "master Being master...." >> $LOGFILE 2>&1
echo "master Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -h 192.168.98.53 -p 6379 SLAVEOF 192.168.98.54 6379 >> $LOGFILE 2>&1
sleep 10 #延迟10秒以后待数据同步完成后再取消同步状态 (要和backup.sh里面的延迟时间一直)
echo "master Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI -h 192.168.98.53 -p 6379 SLAVEOF NO ONE >> $LOGFILE 2>&1
#!/bin/bash
# /opt/redis/script/redis_backup.sh
REDISCLI="/usr/local/bin/redis-cli"
LOGFILE="/opt/redis/logs/keepalived-redis-state.log"
echo "backup [backup]" >> $LOGFILE
date >> $LOGFILE
echo "backup Being slave...." >> $LOGFILE 2>&1
sleep 10 #延迟15秒待数据被对方同步完成之后再切换主从角色 (要和master.sh里面的延迟时间一致)
echo "backup Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -h 192.168.98.53 -p 6379 SLAVEOF 192.168.98.54 16379 >> $LOGFILE 2>&1
#!/bin/bash
# /opt/redis/script/redis_check.sh
LOGFILE="/opt/redis/logs/keepalived-redis-state.log"
ALIVE=`/usr/local/bin/redis-cli -p 6379 PING`
if [ "$ALIVE" == "PONG" ]
then
echo "check $ALIVE alive" >> $LOGFILE
exit 0 #(keepalived会根据这个返回值判断自身状态 0:正常,1:非正常状态)
else
echo "check $ALIVE dead" >> $LOGFILE
exit 1 #(keepalived会根据这个返回值判断自身状态 0:正常,1:非正常状态)
fi
#!/bin/bash
# /opt/redis/script/redis_fault.sh
# 作用为记录状态到日志文件
LOGFILE=/opt/redis/logs/keepalived-redis-state.log
echo "fault [fault]" >> $LOGFILE
date "fault " >> $LOGFILE
#!/bin/bash
# /opt/redis/script/redis_stop.sh
# 作用为记录状态到日志文件
LOGFILE=/opt/redis/logs/keepalived-redis-state.log
echo "sstop [stop]" >> $LOGFILE
date >> $LOGFILE
2.slaver
/etc/keepalived/keepalived.conf
/opt/redis/conf/redis.conf
/opt/redis/script/redis_master.sh
/opt/redis/script/redis_backup.sh
/opt/redis/script/redis_check.sh
/opt/redis/script/redis_fault.sh
/opt/redis/script/redis_stop.sh
slave-keepalived:
# keepalived.conf
global_defs {
router_id LVS_DEVEL
}
vrrp_script Monitor_Redis {
script "/uniapp/users/pards01/script/redis_check.sh"
interval 3 # 每3秒执行一次
#weight -20
}
# VIP1
vrrp_instance VI_1 {
state BACKUP # 主备服务器都设置成BACKUP
interface eth1
virtual_router_id 155
priority 90 # 备份服务上将100改为90
advert_int 1 # 检查间隔
nopreempt # 设置为不抢占,注意这个配置只能设置在state为BACKUP的主机上,而且这个主机的priority必须比另外一台高
authentication {
auth_type PASS
auth_pass 1111
}
notify_master /uniapp/users/pards01/script/redis_master.sh
notify_backup /uniapp/users/pards01/script/redis_backup.sh
notify_fault /uniapp/users/pards01/script/redis_fault.sh
notify_stop /uniapp/users/pards01/script/redis_stop.sh
track_script {
Monitor_Redis # 调用redis进程检测脚本
}
virtual_ipaddress {
192.168.98.155/24 dev eth1 # 如果有多个VIP,继续换行填写.
}
}
slave-redis:
# /opt/redis/conf/redis.conf
daemonize yes
pidfile /opt/redis/logs/redis1s.pid
port 6379
timeout 180
tcp-keepalive 60
loglevel notice
logfile /opt/redis/logs/redis1s.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 /opt/redis/redis-db/
slaveof 192.168.98.53 6379
slave-serve-stale-data yes
slave-read-only yes
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
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
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
keepalived检测脚本:
#!/bin/bash
# /opt/redis/script/redis_check.sh

LOGFILE="/opt/redis/logs/keepalived-redis-state.log"
ALIVE=`/usr/local/bin/redis-cli -p 6379 PING`
if [ "$ALIVE" == "PONG" ]; then
echo "check $ALIVE" >> $LOGFILE
exit 0
else
echo "check $ALIVE" >> $LOGFILE
exit 1
fi
#!/bin/bash
# /opt/redis/script/redis_master.sh
REDISCLI="/usr/local/bin/redis-cli"
LOGFILE="/opt/redis/logs/keepalived-redis-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "master Being master...." >> $LOGFILE 2>&1
echo "master Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -h 192.168.98.54 -p 6379 SLAVEOF 192.168.98.53 6379 >> $LOGFILE 2>&1
sleep 10 #延迟10秒以后待数据同步完成后再取消同步状态
echo "master Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI -h 192.168.98.54 -p 6379 SLAVEOF NO ONE >> $LOGFILE 2>&1
#!/bin/bash
# /opt/redis/script/redis_backup.sh
REDISCLI="/usr/local/bin/redis-cli"
LOGFILE="/opt/redis/logs/keepalived-redis-state.log"
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "backup Being slave...." >> $LOGFILE 2>&1
sleep 10 #延迟15秒待数据被对方同步完成之后再切换主从角色
echo "backup Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI -h 192.168.98.54 -p 6379 SLAVEOF 192.168.98.53 6379 >> $LOGFILE 2>&1
#!/bin/bash
# /opt/redis/script/redis_fault.sh
LOGFILE="/uniapp/users/pards01/logs/keepalived-redis-state.log"
echo "[fault]" >> $LOGFILE
date >> $LOGFILE
#!/bin/bash
# /opt/redis/script/redis_stop.sh
LOGFILE="/uniapp/users/pards01/logs/keepalived-redis-state.log"
echo "[stop]" >> $LOGFILE
date >> $LOGFILE
四.检查
keepalived :
tail -f /var/log/messsage ----可以查看主机IP地址变化以及keepalived的状态变化
redis:
redis-cli -h 192.168.98.155 -p 16379 info
redis-cli -h 192.168.98.53 -p 16379 info
redis-cli -h 192.168.98.54 -p 16379 info
---> 可以查看各主机的redis状态 role/master/slave
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: