服务器准备:Redis服务器(已经部署好Redis),服务器db02。
Redis:192.168.198.132
db02:192.168.198.146
一、模拟实践:
备份了数据,但是主库不小心同步了空的从库,主库恢复数据。
彻底关闭redies:
#pkill redus
清空数据:
#rm -rf /data/redis_cluster/redis_6379/*
配置文件:
cat >/application/redis_cluster/redis_6379/conf/redis_6379.conf<<EOF
###守护进程启动模式
daemonize yes
###绑定的主机地址
bind 192.168.198.132 127.0.0.1
###监听端口
port 6379
###pid文件和log文件的保存地址
pidfile /application/redis_cluster/redis_6379/pid/redis_6379.pid
logfile /application/redis_cluster/redis_6379/logs/redis_6379.log
###设置数据库的数量,默认数据库为0
database 16
###指定本地持久化的文件名,默认是dump.rdb
dbfilename redis_6379.rdb
###本地数据库的目录
dir /data/redis_cluster/redis_6379
save 60 100
save 300 10
save 600 1
###以下内容注释掉
#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
EOF
所有节点启动服务:
redis-server /application/redis_cluster/redis_6379/conf/redis_6379.conf
2、redis主库操作
redis主库上执行:
for i in {1..2000};do redis-cli set k_${i} v_${i};echo "${i} is ok";done
主库生成数据:
redis-cli bgsave
主库备份数据:
#cd /data/redis_cluster/redis_6379/
#cp redis_6379.rdb redis_6379.rdb.bak
#mv redis_6379.rdb.bak /data/redis_cluster/
模拟操作失误,主库同步了从库:
#redis-cli
>slaveof 192.168.198.146 6379
#ps -ef|grep redis
3、redis主库恢复操作:
停掉redis主库的redis服务:
#redis-clis shutdown
检查是否真的停止:
#ps -ef|grep redis
注释掉配置文件里的slaveof:
#slaveof
恢复备份:
#cd /data/redis_cluster/redis_6379/
#cp redis_6379.rdb.bak redis_6379.rdb
启动:
redis-server /application/redis_cluster/redis_6379/conf/redis_6379.conf
检查:
#redis-cli
>keys *
二、主库故障
模拟主库故障
1、主库故障切换到从库
在db02上执行:
#redis-cli
>SLAVEOF 192.168.198.132 6379
查看db02日志:
#tail -f /application/redis_cluster/redis_6379/logs/redis_6379.log
关闭主库redis:(主库宕机)
#redis-cli shutdown
从库一直发生连接错误,主库崩溃,如何尽快恢复业务?
从库db02如何接管:
从库slaveof no one取消主从关系
db02备份数据:
#redis-cli bgsave
#cd /data/redis_cluster/redis_6379/
#cp redis_6379.rdb redis_6379.rdb.bak
2、旧主库redis修复上线:
(1)旧主库启动:
redis-server /application/redis_cluster/redis_6379/conf/redis_6379.conf
(2)旧主库数据恢复
旧主库设置为从库,把db02的数据都复制过来。
#redis-cli
>slaveof 192.168.198.146 6379
(3)主库再次切换到旧主库里:
负载均衡关闭后端负载,防止数据写入。
修复后的从库重新升级为主库
redis>slaveof no one
代码修改为主库的IP,负载均衡重新挂载后端服务。
(4)重新生成主从关系:
从库db02>slaveof 192.168.198.132