主從服務,在主服務掛掉以後須要咱們手動操做,從新設置其餘服務來充當主服務。html
而 sentinel 能夠自動完成這一動做。node
啓動 redis 服務能夠查看前面章節,咱們須要 1 主 2 從。redis
主 127.0.0.1:6379spring
從 127.0.0.1:6380、127.0.0.1:6381dom
1. 配置文件 sentinel.confspa
daemonize yes # 是否守護進程啓動 pidfile "/var/run/redis-sentinel-26379.pid" # pid文件 logfile "26379.log" # 日誌文件 dir "/usr/local/src/redis/redis-5.0.7/data" # 工做空間 sentinel monitor mymaster 127.0.0.1 6379 2 # redis 主節點的 ip 和端口,即便單機多實例也不能使用127.0.0.1
2. 啓動服務日誌
redis-sentinel sentinel.conf
3. 查看服務信息code
redis-cli -p 26379 # 訪問服務 info # 查看服務信息
4. 最少啓動 3 個 sentinel 服務 htm
將配置文件分別複製出來端口號爲 26380、26381的兩個服務。blog
3 個 sentinel 服務分別爲:
127.0.0.1:2637九、127.0.0.1:26380、127.0.0.1:26381
1. 引入 jar 包
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> <type>jar</type> <scope>compile</scope> </dependency>
2. 客戶端
String masterName = "mymaster"; Set<String> set = new HashSet<>(); set.add("192.168.116.128:26379"); set.add("192.168.116.128:26380"); set.add("192.168.116.128:26381"); JedisSentinelPool jedisSentinelPool = new JedisSentinelPool(masterName, set); while (true) { Jedis jedis = null; try { jedis = jedisSentinelPool.getResource(); int index = new Random().nextInt(100000); String key = "key-" + index; String value = "value-" + index; jedis.set(key, value); System.out.println(key + " value is " + jedis.get(key)); TimeUnit.MILLISECONDS.sleep(10); } catch (Exception e) { e.printStackTrace(); } finally { if (jedis != null) { jedis.close(); } } }
執行上面程序時,能夠將主節點進程殺死觀察一下。
在控制檯輸出異常大約一兩分鐘後,senticenl 服務會恢復正常。
1. SpringBoot 集成 redis 參考博客:
https://www.cnblogs.com/zeng1994/p/03303c805731afc9aa9c60dbbd32a323.html
2. 在此基礎上僅僅修改配置文件:
spring.redis.sentinel.master=mymaster # sentinel config 中配置的 spring.redis.sentinel.nodes=127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381 # 3個sentinel服務 # 下面配置註釋掉 #spring.redis.database=0 #spring.redis.host=192.168.116.128 #spring.redis.port=6379
3. 注意點:
即便單機多實例狀況下,配置文件中也不要使用 127.0.0.1,而應該使用真實 IP,不然故障轉移可能會出現異常。