redis(2)双机备份

一、准备

主从 IP:端口
主Redis 192.168.100.6:6380
从Redis 192.168.100.6:6381

二、主从复制

修改从Redis的配置文件

1
vi redis.conf

在从Redis的配置文件中添加主Redis的ip和端口号

1
2
3
# slaveof <masterip> <masterport>
#添加
slaveof 192.168.100.6 6380

三、测试主从

先启动主Redis,再启动从Redis。其中,从Redis的启动界面会显示连接到主Redis,并开始同步。
image

!!!主Redis可以读写数据,从Redis只能读取数据,不可写入数据
image

四、哨兵模式

开启Redis哨兵模式,可实现当主Redis宕机后,从Redis自动转换为主Redis,保证Redis系统正常运行。
在redis目录中修改哨兵配置文件

1
vi sentinel.conf

修改配置文件

1
2
3
4
5
protected-mode no
#添加默认主Redis的ip 端口和投票次数(主Redis宕机后,由剩下的从Redis进行投票选举出一个主服务器)
sentinel monitor mymaster 192.168.100.6 6380 1
#哨兵每5s检查Redis集群
sentinel down-after-milliseconds mymaster 5000

启动哨兵

1
./src/redis-server ./sentinel.conf --sentinel

控制台打印 +slave slave 192.168.100.6:6381 192.168.100.6 6381 @ mymaster 192.168.100.6 6380即192.168.100.6 6381为从Redis,192.168.100.6 6380为主Redis

五、测试哨兵

关闭主Redis,5秒后,哨兵控制台打印以下代码

1
2
3
65506:X 05 Jul 15:44:34.462 # +switch-master mymaster 192.168.100.6 6380 192.168.100.6 6381
65506:X 05 Jul 15:44:34.462 * +slave slave 192.168.100.6:6380 192.168.100.6 6380 @ mymaster 192.168.100.6 6381
65506:X 05 Jul 15:44:39.497 # +sdown slave 192.168.100.6:6380 192.168.100.6 6380 @ mymaster 192.168.100.6 6381

即将原来的从Redis192.168.100.6 6381 转换为主Redis,原来的主Redis192.168.100.6 6381转换为从Redis

六、Java通过哨兵访问redis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Set<String> sentinels = new HashSet<String>();
// 添加哨兵IP 端口
sentinels.add("192.168.100.6:26379");
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
config.setMaxTotal(100);
config.setMinIdle(10);
JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels,config);
Jedis jedis = null;
jedis = pool.getResource();
jedis.set("name", "456");
String value = jedis.get("name");
System.out.println(value);
jedis.close();
pool.close();
>