Sentinel选举新的matser时候需要过半的几点才能选举成功,因此我们设置了1个master,2个slave redis服务器,同时在三个服务器上面都需要配置 Sentinel,Sentinel会监控三个redis服务器,同时三个 Sentinel 之前也会互相监控。
服务器说明:三台服务器
masterIp:192.168.43.213
slave1Ip:192.168.43.169
slave2Ip:192.168.43.39
1、master配置:master redis.conf只需要配置密码即可
# 设置密码
requirepass "123456"
masterauth 123456
2、两个slave的redis.conf的配置
# 设置密码
requirepass "123456"
masterauth 123456
# 指定主服务器,注意:有关slaveof的配置只是配置从服务器,主服务器不需要配置
slaveof 192.168.43.213 6379
3、哨兵配置:三个哨兵的配置都一样;在Redis安装目录下有一个sentinel.conf文件,copy一份进行修改
# 配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义,192.168.43.213代表监控的主服务器,6379代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
sentinel monitor mymaster 192.168.43.213 6379 2
# sentinel author-pass定义服务的密码,mymaster是服务名称,123456是Redis服务器密码
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster 123456
4、配置完毕,按顺序先启动mater-salve1-slave2,再启动三个 Sentinel
控制台可以看见 哨兵间互相监控
5、java链接哨兵模式使用redis
5.1引入jredis的pom依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.1</version><!--版本号可根据实际情况填写 -->
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
java使用代码:
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(10);
jedisPoolConfig.setMaxIdle(5);
jedisPoolConfig.setMinIdle(5);
Set<String> sentinels = new HashSet<String>(Arrays.asList("192.168.43.213:26379", "192.168.43.169:26379", "192.168.43.39:26379"));
JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels, jedisPoolConfig, "123456");
Jedis jedis = pool.getResource();
jedis.set("SentinelKey","SentinelValue2");
System.out.println(jedis.get("SentinelKey"));
控制台输出:
关闭master服务器等几秒查看剩余两台slave服务器,有一台切换为了master
再使用上面代码测试成功,说明操作成功
5.2 Redisson连接哨兵模式使用redis
引入pom依赖:
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.13.3</version>
</dependency>
使用实例:
Config config = new Config();
config.useSentinelServers().setMasterName("mymaster").addSentinelAddress("redis://192.168.4
3.213:26379","redis://192.168.43.169:26379","redis://192.168.43.39:26379").setPassword("123456");
RedissonClient client = Redisson.create(config);
client.getBucket("key1").set("value2");
String a = (String) client.getBucket("key1").get();
System.out.println(a);
client.shutdown();