许多用户自建的Redis使用了sentinel来做高可用,因此也使用了支持sentinel的客户端,为了方便用户上云,阿里云Redis也开发了sentinel兼容模式以适应各种业务场景。
【注】:此处的sentinel兼容模式仅针对客户端而言,是为了让业务代码尽量少改动的情况下可以顺利迁移上云,阿里云Redis使用自研的高可用HA组件。
下面是阿里云Redis sentinel兼容模式的使用教程。
开启sentinel兼容模式
开启的入口在控制台【参数设置】处。
【注】:2.8版本暂不支持sentinel兼容模式。
在控制台【参数设置】处将#no_loose_sentinel-enabled参数修改为yes即可。
如果发现自己的4.0实例不支持sentinel兼容模式,可以做小版本升级。
【注】:由于社区sentinel无需密码验证环节,所以一般支持sentinel的客户端也没有auth这一过程,而云Redis是由Redis本身来兼容sentinel模式,故密码验证无法省略,所以目前仅在VPC免密的情况下客户端才能访问Redis,VPC免密开启如下图:
sentinel兼容模式使用
关于客户端是如何支持sentinel的不再赘述,有兴趣可以Google或百度。
以JedisSentinelPool为例,假设我们现在有一个实例helloworld.redis.rds.aliyuncs.com,密码为abcd,并且已开启sentinel兼容模式,配置如下即可。
Set<String> sentinels = new HashSet<String>();
//此处填写云Redis实例地址
sentinels.add("helloworld.redis.rds.aliyuncs.com:6379");
//masterName可以是任意字符串
JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels, "abcd");
Jedis myjedis = pool.getResource();
myjedis.set("key", "value");
myjedis.get("key");
OK,现在就可以愉快的使用了。
【注】:sentinel的核心其实就是客户端向sentinel询问redis的地址,阿里云Redis的sentinel兼容模式实现也是如此,Redis伪装成sentinel告诉客户端自己的地址,而且Redis是不知道其他Redis地址的,也无法通过masterName来区分不同的Redis,所以地址一定要填写正确。