keepalived实现redis主从高可用

方案说明  

两台机器(称为A和B),以统一的VIP对外提供服务 
1.正常情况下,A和B都启动,B会把A的数据同步过来(B is slave of A) 
2.当A挂了后,VIP漂移到B;B的keepalived 通知redis 执行:slaveof no one,由B提供服务 
3.当A起来后,VIP不切换,仍在B上面;而A的keepalived 通知redis 执行slaveof B,开始把B的数据同步过来(A is slave of B) 
4.依此循环 

也就是说: 
当两台机器都正常时,一个为master,一个为slave; 
当master挂掉时,slave升级为master; 
当原master再次起来时,它不会抢占,而是作为slave;依此循环 


机器  

10.75.201.67:/home/redis 
10.75.201.66: /home/redis 
初次启动时,10.75.201.67为master,10.75.201.66为slave 

配置  
Java代码   收藏代码
  1. //A机器  
  2. vrrp_script chk_nutcraker {  
  3.                 script "/home/redis/redis/bin/redis_check.sh"  
  4.                 interval 2  
  5. }  
  6. vrrp_instance VI_2 {  
  7.         state BACKUP        #both BACKUP  
  8.         interface eth1  
  9.         virtual_router_id 12  
  10.         priority 101    #101 on master, 100 on backup  
  11.         nopreempt       #both nopreempt  
  12.         track_script {  
  13.                 chk_nutcraker  
  14.         }  
  15.         virtual_ipaddress {  
  16.              10.75.201.3  
  17.         }  
  18.         notify /home/redis/redis/bin/redis_notify.sh  
  19. }  

Java代码   收藏代码
  1. //B机器  
  2. vrrp_script chk_nutcraker {  
  3.                 script "/home/redis/redis/bin/redis_check.sh"  
  4.                 interval 2  
  5. }  
  6. vrrp_instance VI_2 {  
  7.         state BACKUP        #both BACKUP  
  8.         interface eth1  
  9.         virtual_router_id 12  
  10.         priority 100    #101 on master, 100 on backup  
  11.         nopreempt       #both nopreempt  
  12.         track_script {  
  13.                 chk_nutcraker  
  14.         }  
  15.         virtual_ipaddress {  
  16.              10.75.201.3  
  17.         }  
  18.         notify /home/redis/redis/bin/redis_notify.sh  
  19. }  


检测redis是否正常的脚本: 
[root@redhat1 ~]# cat /home/redis/redis/bin/redis_check.sh 
Java代码   收藏代码
  1. #!/bin/bash  
  2.   
  3. ALIVE=`/home/redis/redis/bin/redis-cli PING`  
  4. if [ "$ALIVE" == "PONG" ]; then  
  5.   echo $ALIVE  
  6.   exit 0  
  7. else  
  8.   echo $ALIVE  
  9.   exit 1  
  10. fi  


redis根据keepalived状态转移而更新自己的状态:进入master时slaveof no one,进入backup时,slaveof另一台机器: 
[root@redhat1 ~]# cat /home/redis/redis/bin/redis_notify.sh 
Java代码   收藏代码
  1. #!/bin/bash  
  2.   
  3. REMOTE=10.75.201.67  #在10.75.201.67机器上则为10.75.201.66  
  4. PORT=6379  
  5.   
  6. REDIS_HOME=/home/redis/redis  
  7. REDISCLI="$REDIS_HOME/bin/redis-cli"  
  8. LOGFILE="$REDIS_HOME/logs/redis_notify.log"  
  9.   
  10. DATE_TIME=`date "+%Y-%m-%d %H:%M:%S"`  
  11.   
  12. TYPE=$1  
  13. NAME=$2  
  14. STATE=$3  
  15.   
  16. case $STATE in  
  17.         "MASTER")   
  18.                   echo "$DATE_TIME:became master:" >> $LOGFILE  
  19.                   $REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1   
  20.                   exit 0  
  21.                   ;;  
  22.         "BACKUP")    
  23.                   echo "$DATE_TIME:became slave:" >> $LOGFILE  
  24.                   $REDISCLI SLAVEOF $REMOTE $PORT >> $LOGFILE  2>&1  
  25.                   exit 0  
  26.                   ;;  
  27.         "FAULT")    
  28.                   echo "$DATE_TIME:[fault]" >> $LOGFILE  
  29.                   exit 0  
  30.                   ;;  
  31.         *)        echo "unknown state"  
  32.                   exit 1  
  33.                   ;;  
  34. Esac  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis主从+Keepalived是一种常见的Redis高可用方案。它的基本原理是通过使用Keepalived实现Redis主从切换。具体步骤如下: 1. 首先,需要安装和配置Keepalived。可以按照以下步骤进行操作: - 下载并解压Keepalived的源代码。 - 进入解压后的目录,并执行以下命令进行编译和安装: ``` ./configure --prefix=/usr/local/keepalived/ make make install ``` - 拷贝所需的文件到相应的目录,例如: ``` cp /usr/local/src/keepalived-1.3.5/keepalived/etc/init.d/keepalived /etc/init.d/keepalived cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ mkdir -p /etc/keepalived/ cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf ``` - 修改keepalived.conf文件,根据实际情况配置虚拟IP(VIP)和监控脚本等参数。 2. 然后,需要配置Redis主从复制。可以按照以下步骤进行操作: - 在Redis的主节点上,修改redis.conf文件,将`slaveof`参数设置为空,即不指定从节点。 - 在Redis的从节点上,修改redis.conf文件,将`slaveof`参数设置为主节点的IP和端口,例如:`slaveof <master_ip> <master_port>`。 3. 最后,启动KeepalivedRedis服务。 - 在Master节点上,启动Keepalived服务。 - 在Master和Slave节点上,分别启动Redis服务。 这样,当Redis的Master节点发生故障时,Keepalived会检测到故障并自动切换到Slave节点,确保Redis服务的高可用性。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [redis高可用keepalived+redis主从部署](https://blog.csdn.net/liuguanghui1988/article/details/77098143)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Keepalived+redis主从](https://blog.csdn.net/qq_37668945/article/details/88618390)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值