一. redis主从复制(读写分离)

  1. redis的主从复制分为两类节点:1个master和多个slave,master进行读写操作,slav进行只读操作
  2. 启动步骤:

    主节点照常启动,slave节点启动后,进入redis-cli执行slaveof ip port来告知slave节点master的ip和端口
  3. 原理:

二. 主从复制注意事项

  1. master要激活持久化:

    slave是master的完整备份,因此如果master通过一个空数据集重启,slave也会被清掉。
  2. 若master设置了密码,slave节点要配置masterauth参数设置主数据库的密码,来实现免密码登录

三. redis的Sentinel

  1. Sentinel是独立于redis的一个监控系统,监控master-slave架构下的redis。

  2. 功能

    (1)监控(Monitoring): Redis Sentinel实时监控主服务器和从服务器运行状态。

    (2)提醒(Notification):当被监控的某个 Redis 服务器出现问题时, Redis Sentinel 可以向系统管理员发送通知, 也可以通过 API 向其他程序发送通知。

    比如说, 名为 +sdown 的频道就可以接收所有实例进入主观下线(SDOWN)状态的事件。

    (3)自动故障转移(Automatic failover): 当一个主服务器不能正常工作时,Redis Sentinel 可以将一个从服务器升级为主服务器, 并对其他从服务器进行配置,让它们使用新的主服务器。当应用程序连接Redis 服务器时, Redis Sentinel会告之新的主服务器地址和端口。

  3. 步骤

    (1)修改sentinel.conf文件

    sentinel monitor mymaster(主节点名称) 192.168.1.170(主节点ip) 6379(主节点端口) 2(2个sentinal认定主观下线后进行自动转移)

    (2)启动 : redis-sentinal sentinal.conf

  4. 命令

四. 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);
}
}
05-02 08:52