一. redis主从复制(读写分离)
- redis的主从复制分为两类节点:1个master和多个slave,master进行读写操作,slav进行只读操作
- 启动步骤:
主节点照常启动,slave节点启动后,进入redis-cli执行slaveof ip port来告知slave节点master的ip和端口 - 原理:
二. 主从复制注意事项
- master要激活持久化:
slave是master的完整备份,因此如果master通过一个空数据集重启,slave也会被清掉。 - 若master设置了密码,slave节点要配置masterauth参数设置主数据库的密码,来实现免密码登录
三. redis的Sentinel
Sentinel是独立于redis的一个监控系统,监控master-slave架构下的redis。
功能
(1)监控(Monitoring): Redis Sentinel实时监控主服务器和从服务器运行状态。
(2)提醒(Notification):当被监控的某个 Redis 服务器出现问题时, Redis Sentinel 可以向系统管理员发送通知, 也可以通过 API 向其他程序发送通知。
比如说, 名为 +sdown 的频道就可以接收所有实例进入主观下线(SDOWN)状态的事件。
(3)自动故障转移(Automatic failover): 当一个主服务器不能正常工作时,Redis Sentinel 可以将一个从服务器升级为主服务器, 并对其他从服务器进行配置,让它们使用新的主服务器。当应用程序连接Redis 服务器时, Redis Sentinel会告之新的主服务器地址和端口。步骤
(1)修改sentinel.conf文件
sentinel monitor mymaster(主节点名称) 192.168.1.170(主节点ip) 6379(主节点端口) 2(2个sentinal认定主观下线后进行自动转移)
(2)启动 : redis-sentinal sentinal.conf命令
四. java操作sentinal
public class SentinelTest {
@Test
public void test1() throws Exception {
String masterName = "mymaster";
Set<String> sentinels = new HashSet<String>();
sentinels.add("192.168.1.172:26379"); // sentinal的主机
sentinels.add("192.168.1.173:26379");
JedisPoolConfig poolConfig = new JedisPoolConfig();
//最大空闲连接数
poolConfig.setMaxIdle(10);
//连接池中最大连接数
poolConfig.setMaxTotal(100);
//在获取链接的时候设置的超市时间
poolConfig.setMaxWaitMillis(1000);
//表示在向连接池中创建连接的时候会对链接进行测试,保证连接池中的链接都是可用的。
poolConfig.setTestOnBorrow(true);
JedisSentinelPool jedisSentinelPool = new JedisSentinelPool(masterName, sentinels, poolConfig);
HostAndPort currentHostMaster = jedisSentinelPool.getCurrentHostMaster();
System.out.println("当前主节点,ip:"+currentHostMaster.getHost());
Jedis jedis = jedisSentinelPool.getResource();
jedis.set("a", "1");
jedisSentinelPool.returnResourceObject(jedis);
}
}