Redis主从架构持久化存在一个问题,即前次测试的结论,持久化需要配置在主实例上才能跨越实例保证数据不丢失,这样以来主实例在持久化数据到硬盘的过程中,势必会造成磁盘的I/O等待,经过实际测试,这个持久化写硬盘的过程给应用程序带来的影响无法忍受;因而在大多数场景下,会考虑把持久化配置在从实例上,当主实例宕机后,通过手动或者自动的方式将从实例提升为主实例,继续提供服务!当主实例恢复后,先从原从实例上同步数据,同步完成后再恢复到原始的主从状态!要实现这种的要求,需要有keepalive的配合,一方面keepalive提供了VIP,可以避免修改应用程序连接,同时redis实例的配置文件监听部分也需要修改为全网监听;另一方面keepalive定时调度脚本来监控主从实例的状态,根据具体情况进行切换!本文将重点介绍下使用keepalive实现redis主从自动failover!
环境介绍
操作系统版本均为:rhel5.4 64bit
redis版本:2.6.4
redis实例端口均为:6379
redis实例密码均为:123
VIP:192.168.1.120
主实例为server11(192.168.1.112)
从实例为server12(192.168.1.113,开启快照持久化)
一:安装keepalive软件,server11安装完成后直接scp至server12上即可
01.[root@server11 ~]# wget http://keepalived.org/software/keepalived-1.1.19.tar.gz 02.[root@server11 ~]# tar -zxvf ../tarbag/keepalived-1.1.19.tar.gz 03.[root@server11 ~]# cd keepalived-1.1.19/ 04.[root@server11 ~]# ./configure --prefix=/usr/local/keepalived && make && make install
二:配置主节点server11配置文件
01.[root@server11 ~]# cat /usr/local/keepalived/etc/keepalived/keepalived.conf 02.! Configuration File for keepalived 03. 04.global_defs { 05. router_id LVS_DEVEL 06.} 07. 08.vrrp_script Monitor_redis { 09. script "/usr/local/scripts/redis_monitor.sh" 10. interval 2 11. weight 2 12.} 13. 14.vrrp_instance VI_1{ 15. state MASTER 16. interface eth0 17. virtual_router_id 51 18. mcast_src_ip 192.168.1.112 19. priority 100 20. advert_int 1 21. authentication { 22. auth_type PASS 23. auth_pass password_123 24.} 25. track_script { 26. Monitor_redis 27.} 28. virtual_ipaddress { 29. 192.168.1.120 30. } 31. notify_fault /usr/local/scripts/redis_fault.sh 32. notify_stop /usr/local/scripts/redis_stop.sh 33. 34.}
三:配置从节点server12配置文件
01.[root@server12 ~]# cat /usr/local/keepalived/etc/keepalived/keepalived.conf 02.! Configuration File for keepalived 03. 04.global_defs { 05. router_id LVS_DEVEL 06.} 07. 08.vrrp_script Monitor_redis { 09. script "/usr/local/scripts/redis_monitor.sh" 10. interval 2 11. weight 2 12.} 13. 14.vrrp_instance VI_1{ 15. state BACKUP 16. interface eth0 17. virtual_router_id 51 18. mcast_src_ip 192.168.1.113 19. priority 99 20. advert_int 1 21. authentication { 22. auth_type PASS 23. auth_pass password_123 24.} 25. track_script { 26. Monitor_redis 27.} 28. virtual_ipaddress { 29. 192.168.1.120 30. } 31. notify_master /usr/local/scripts/redis_master.sh 32. notify_backup /usr/local/scripts/redis_backup.sh 33. notify_fault /usr/local/scripts/redis_fault.sh 34. notify_stop /usr/local/scripts/redis_stop.sh 35. 36.}
四:准备相关的脚本,主从实例上都需要存在这些脚本,同时注意脚本需要由可执行权限
01.[root@server11 ~]# cat /usr/local/scripts/redis_monitor.sh 02.#!/bin/bash 03.ALIVE=$(/usr/local/redis2/bin/redis-cli -h 192.168.1.112 -p 6379 -a 123 PING) 04. 05.if [ "$ALIVE" == "PONG" ]; then 06. echo $ALIVE 07. exit 0 08. else 09. echo $ALIVE 10. killall -9 keepalived 11. service network restart 12. exit 1 13.fi 14. 15.[root@server11 ~]# sh /usr/local/scripts/redis_monitor.sh 16.PONG 17. 18.[root@server11 ~]# cat /usr/local/scripts/redis_master.sh 19.#!/bin/bash 20.REDISCLI="/usr/local/redis2/bin/redis-cli -h 192.168.1.112 -p 6379 -a 123" 21.LOGFILE="/usr/local/redis2/var/keepalived-redis-state.log" 22. 23.echo "[master]" >> $LOGFILE 24.date >> $LOGFILE 25.echo "Being master...." >> $LOGFILE 2>&1 26.echo "Run SLAVEOF cmd ..." >> $LOGFILE 27.$REDISCLI SLAVEOF 192.168.1.113 6379 >> $LOGFILE 2>&1 28.sleep 10 29.echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE 30.$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1 31. 32. 33.[root@server11 ~]# cat /usr/local/scripts/redis_backup.sh 34.#!/bin/bash 35.REDISCLI="/usr/local/redis2/bin/redis-cli -h 192.168.1.112 -p 6379 -a 123" 36.LOGFILE="/usr/local/redis2/var/keepalived-redis-state.log" 37. 38.echo "[backup]" >> $LOGFILE 39.date >> $LOGFILE 40.echo "Being slave...." >> $LOGFILE 2>&1 41.sleep 15 42.echo "Run SLAVEOF cmd ..." >> $LOGFILE 43.$REDISCLI SLAVEOF 192.168.1.113 6379 >> $LOGFILE 2>&1 44. 45.[root@server11 ~]# cat /usr/local/scripts/redis_stop.sh 46.#!/bin/bash 47.LOGFILE="/usr/local/redis2/var/keepalived-redis-state.log" 48.echo "[stop]" >> $LOGFILE 49.date >> $LOGFILE 50.[root@server11 ~]# cat /usr/local/scripts/redis_fault.sh #!/bin/bash LOGFILE="/usr/local/redis2/var/keepalived-redis-state.log" echo "[fault]" >> $LOGFILE date >> $LOGFILE
五:主从实例分别启动keepalive进程,测试VIP是否正常
java版本测试代码
package com.yanek.redis;
import redis.clients.jedis.Jedis;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.132.100");
jedis.set("id", "10000");
String id = jedis.get("id");
jedis.set("name", "javaboy2012");
String name = jedis.get("name");
System.out.println("id="+id);
System.out.println("name="+name);
System.out.println("name="+jedis.get("ray"));
}
}
分享到:
相关推荐
总结以上步骤,完成Redis主从配置与高可用哨兵模式的搭建,再整合Spring Cache,可以使应用程序在保证性能的同时具备高可用性。需要注意的是,所有的配置操作都需要在保证安全的前提下进行,避免生产环境下的操作...
redis主从模式与哨兵模式例子 # 当前Sentinel服务运行的端口 port 26378 # 哨兵监听的主服务器 sentinel myid 09a71e001825114de399e0b6214c4b6f5449ab3a # 3秒内mymaster没响应,则认为mymaster宕机 sentinel deny...
在Redis主从结构中,有一个主节点(Master)负责接收写操作,多个从节点(Slave)通过复制主节点的数据保持同步,确保数据的安全性。当主节点出现故障时,从节点可以接管服务,实现故障切换。 1. **安装Redis** 在...
Redis主从同步是Redis高可用性的一个重要特性,它允许数据在多个实例间进行复制,以实现数据备份、负载均衡和故障恢复。主从结构中,一个Redis实例作为主节点负责处理写请求,而其他实例作为从节点,接收并同步主...
### Redis 主从配置及哨兵模式详解 #### 一、实验环境 - **Redis 版本**: Redis 4.0.6 - **操作系统**: Linux (安装于虚拟机中) - **宿主主机**: Windows 10 x64 - **远程终端工具**: Xshell 5 #### 二、主从...
Redis Sentinel是一个用于实现高可用性的组件,它可以监控主从节点的状态,并在主节点发生故障时自动进行故障转移。 1. **创建配置文件**:创建一个名为`sentinel.conf`的文件,通常位于与`6379.conf`相同的目录中...
目录Redis故障转移测试这是用于测试主/从Redis配置之间的故障转移方案的测试平台。启动Redis实例要使用和3个哨兵监视主服务器来启动主/从Redis设置,请执行以下操作: docker-compose up 在不带-d标志的情况下运行...
它能够监控主从结构的 Redis 集群,并在主节点出现故障时,自动将一个从节点提升为主节点,从而确保服务的连续性。 **Sentinel 系统的主要功能包括:** 1. **监控(Monitoring)**:Sentinel 实例会持续检查主...
- **主从复制(Replication)**:Redis 集群中的每个节点都可以是主节点或从节点,主节点负责处理写操作,从节点则复制主节点的数据并处理读操作,提高读性能。 - **槽分配(Slots)**:集群将键空间划分为16384个...
哨兵系统是Redis的高可用性解决方案,它负责监控主从集群的状态,自动故障转移,并且提供了一种安全的客户端发现机制。 1. **安装Sentinel**: 首先,确保已经安装了Redis。然后,创建一个新的配置文件`sentinel....
一、Redis主从复制 主从复制是哨兵模式的基础,它允许数据在主节点和一个或多个从节点之间同步。当主节点写入新数据时,这些数据会被复制到从节点,实现数据备份和负载均衡。这样,即使主节点出现问题,从节点也能...
通过自动故障检测和恢复,可以提高 Redis 主从集群的稳定性。哨兵集群通常由多个哨兵实例组成,它们之间通过互相通信实现故障检测与转移。 **步骤一:创建哨兵实例** - 重复上述主从集群中创建实例的过程,为哨兵...
3. 配置Redis主从复制: 在`/etc/redis/redis.conf`配置文件中,为主服务器设置`slaveof`选项,指定主服务器的IP和端口,然后重启Redis服务。 4. 安装Sentinel: ```bash sudo apt-get install redis-sentinel ...
Redis哨兵集群是一种高可用性解决方案,用于监控和管理Redis主从复制结构。哨兵系统通过监控、故障检测和自动故障转移确保了集群的稳定运行。以下是对哨兵集群配置的详细步骤和相关知识点的解释: 1. **哨兵安装与...
为了保证数据库的高可用性和故障转移,Redis提供了哨兵模式(Sentinel mode)来监控Redis主从服务器,实现自动故障恢复。本文将详细介绍在Windows环境下搭建Redis哨兵模式的步骤,并解释相关配置参数。 首先,要...
- 哨兵是一个独立的监控进程,用于监视 Redis 集群中的主从节点状态,当检测到故障时,能够自动进行故障转移,确保高可用性。 - 单个哨兵可以监控主从数据库,而多个哨兵则能实现互相监控,提高系统稳定性。 - ...
哨兵模式是Redis的一种高可用解决方案,它能够监控Redis主从节点的状态,自动进行故障转移,并在故障恢复后自动恢复主从关系。 **1. Redis哨兵模式介绍** Redis哨兵系统由多个哨兵节点组成,它们之间通过Gossip...
2. **复制与故障转移**:Redis 集群支持主从复制,每个节点可以有多个从节点。如果主节点失败,其从节点将自动晋升为主节点,确保服务不间断。这个过程称为故障转移(Failover)。 3. **槽迁移**:在节点添加或移除...
### Redis 操作文档知识点 ...以上是关于Redis从安装到使用的详细介绍,包括安装、配置、主从配置、Sentinel配置、Java操作Redis以及实施注意事项等方面的知识点。这些内容对于初学者来说是非常实用的指导资料。