redis双机热备(伪Redis Cluster)
来源:互联网 发布:学解剖的软件 编辑:程序博客网 时间:2024/06/07 07:56
目前官方开发中的Redis Cluster提供的功能尚不完善(可参考官方网站或http://redis.io/topics/cluster-tutorial)
环境部署
环境介绍:
Master: 192.168.0.22 redis,keepalived
Slave: 192.168.0.23 redis,keepalived
Virtural IP Address (VIP): 192.168.0.88
设计思路:
两个redis server主从备份。提供redis 服务高可用;两个keepalived 服务主从备份,提供VIP 服务的高可用。
1)每台redis server分别有主,从两个配置文件(redis_master.conf, redis_slave.conf),通过启动脚本启动服务,启动脚本会检测这个redis集群中的其他服务器的角色,如果有master 服务存在,则以slave角色启动,否则将自己以master服务器启动;
2) keepalived 监控脚本,定时(频率:每秒一次)检测当前服务器是否获取集群VIP,如果获取集群VIP,则将本服务器上的redis服务器设置为master。同时将远端的其他redis服务器设置为slave;保证获取集群VIP的redis 服务器角色为master,其他的设置为slave。
3) keepalived 监控脚本,还会自动检测当前redis服务器是否正常,如果连续两次检测异常,则停掉本本机的keepalived服务,释放集群VIP,让去漂移到其他可以提供redis 服务的服务器上;
4)当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责同步数据;当 Master 挂掉,Slave 正常时, Slave接管服务,同时关闭主从复制功能;当 Master 恢复正常,则从Slave同步数据,同步数据之后关闭主从复制功能,恢复Master身份,于此同时Slave等待Master同步数据完成之后,恢复Slave身份。然后依次循环。
实施步骤:
—-安装配置redis
1.下载redis源码
wget http://download.redis.io/releases/redis-3.0.2.tar.gz
2.安装redis
tar -zxvf redis-3.0.2.tar.gz
cd redis-3.0.2
redis的安装可以不用执行configure
make && make install
3.配置redis
特别注意:这里我们不使用redis官方提供的主从配置,只需要配置守护进程和日志就可以了,其他的默认!
#守护进程daemonize yes#日志文件路径logfile "/var/log/redis.log"
—-安装配置keepalived
1.下载keepalived源码Release 1.2.19
wget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz
2.安装keepalived
tar –zxvf keepalived-1.2.19.tar.gz
cd keepalived-1.2.19
./configure –prefix=/usr/local/keepalived
make && make install
3.配置keepalived
在Master和Slave上创建如下配置文件(可根据实际情况调整):
mv /usr/local/keepalived/etc/keepalived/keepalived.conf /usr/local/keepalived/etc/keepalived/keepalived.conf.bak
vim /usr/local/keepalived/etc/keepalived/keepalived.conf
特别注意:在主从备份的集群中router_id需要保持一致!
! Configuration File for keepalivedglobal_defs { router_id redis}vrrp_script chk_redis{ script /usr/local/keepalived/etc/keepalived/scripts/redis_check.sh interval 2 timeout 2 fall 3}vrrp_instance redis { state BACKUP #MASTER|BACKUP(这里主服务则是MASTER,备用服务则是BACKUP) interface enp9s0f0 virtual_router_id 50 priority 100 advert_int 1 authentication { #all node must same auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.0.88 } track_script { chk_redis } notify_master /usr/local/keepalived/etc/keepalived/scripts/redis_master.sh notify_backup /usr/local/keepalived/etc/keepalived/scripts/redis_backup.sh notify_fault /usr/local/keepalived/etc/keepalived/scripts/redis_fault.sh notify_stop /usr/local/keepalived/etc/keepalived/scripts/redis_stop.sh}
编写需要的脚本:
mkdir /usr/local/keepalived/etc/keepalived/scripts/
vim /usr/local/keepalived/etc/keepalived/scripts/redis_check.sh
vim /usr/local/keepalived/etc/keepalived/scripts/redis_master.sh
vim /usr/local/keepalived/etc/keepalived/scripts/redis_backup.sh
vim /usr/local/keepalived/etc/keepalived/scripts/redis_fault.sh
vim /usr/local/keepalived/etc/keepalived/scripts/redis_stop.sh
完成之后一定要赋予他们的权限
chmod +x *.sh
具体的脚本内容如下:
redis_check.sh
#!/bin/bashREDISPATH=/usr/local/redis-3.0.2REDISCLI=$REDISPATH/bin/redis-cliIP=127.0.0.1PORT=6379ALIVE=`$REDISCLI -h $IP -p $PORT PING`LOGFILE="/var/log/keepalived-redis-check.log"echo "[CHECK]" >> $LOGFILEdate >> $LOGFILEif [ $ALIVE = "PONG" ]; then echo "Success: redis-cli -h $IP -p $PORT PING $ALIVE" >> $LOGFILE 2>&1 exit 0else echo "Failed: redis-cli -h $IP -p $PORT PING $ALIVE " >> $LOGFILE 2>&1 exit 1fi
redis_master.sh
#!/bin/bashREDISPATH=/usr/local/redis-3.0.2REDISCLI=$REDISPATH/bin/redis-cliLOCALIP=127.0.0.1#注意:如果是主服务的redis_master.sh,则这里的地址是从服务的ip地址;如果是从服务的redis_master.sh,则这里是主服务的ip地址REMOTEIP=192.168.0.23PORT=6379LOGFILE="/var/log/keepalived-redis-state.log"echo "[master]" >> $LOGFILEdate >> $LOGFILEecho "Being master...." >> $LOGFILE 2>&1echo "Run MASTER cmd ..." >> $LOGFILE 2>&1$REDISCLI -h $LOCALIP -p $PORT SLAVEOF $REMOTEIP $PORT >> $LOGFILEsleep 10 #delay 10 s wait data async cancel syncecho "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
redis_backup.sh
#!/bin/bashREDISPATH=/usr/local/redis-3.0.2REDISCLI=$REDISPATH/bin/redis-cli#注意:如果是主服务的redis_backup.sh,则这里的地址是从服务的ip地址;如果是从服务的redis_backup.sh,则这里是主服务的ip地址REMOTEIP=192.168.0.23PORT=6379LOGFILE="/var/log/keepalived-redis-state.log"echo "[backup]" >> $LOGFILEdate >> $LOGFILEecho "Run SLAVEOF cmd ..." >> $LOGFILE$REDISCLI SLAVEOF $REMOTEIP $PORT >> $LOGFILE 2>&1# echo "Being slave...." >> $LOGFILE 2>&1sleep 15 #delay 15 s wait data sync exchange role
redis_fault.sh
#!/bin/bashLOGFILE=/var/log/keepalived-redis-state.logecho "[fault]" >> $LOGFILEdate >> $LOGFILE
redis_stop.sh
#!/bin/bashLOGFILE=/var/log/keepalived-redis-state.logecho "[stop]" >> $LOGFILEdate >> $LOGFILE
重要:将相应的配置文件放到相应的地方.
首先在2台服务器上设置keepalived的启动文件:
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived
然后在2台服务器上创建配置文件的链接:
mkdir /etc/keepalived/
ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
系统测试注意:一定要先启动redis,再启动keealived,否则redis_check.sh会将keepalived自动关闭。脚本创建完成以后,我们开始按照如下流程进行测试: 1.启动Master/Slave上的Redis cd /home/redis/redis-3.0.2/src/./redis-server ../redis.conf2.关闭Master/Slave上的Redis这里我们直接使用kill命令来关闭3.启动Master上的Keepalived /etc/rc.d/init.d/keepalived start#关闭方法#/etc/rc.d/init.d/keepalived stop4.启动Slave上的Keepalived /etc/rc.d/init.d/keepalived start#关闭方法#/etc/rc.d/init.d/keepalived stop
- redis双机热备(伪Redis Cluster)
- redis双机热备
- Redis双机热备方案--转
- redis+keepalived实现双机热备
- 一步步实现redis+sentinel双机热备
- 使用keepalived实现Redis双机热备、高可用
- redis cluster
- redis cluster
- redis cluster
- redis cluster
- redis cluster
- redis cluster
- redis cluster
- redis cluster
- Redis Cluster
- redis cluster
- redis-cluster
- Redis Cluster
- android之布局与UI组件
- Android spannableStringBuilder使用
- 小技巧
- Fisher vector fundamentals
- postman使用规范
- redis双机热备(伪Redis Cluster)
- 学习Android百分百布局库
- Android 实现个性的ViewPager切换动画 实战PageTransformer(兼容Android3.0以下)
- 课程设计-银行储蓄系统
- 模式匹配运算符–Shell
- 反射
- Handler 引起的内存泄露
- csdn_shuchong1111第一篇博客
- Ogre源码编译及HelloWorld程序