主從模式的弊端就是不具備高可用性,當master掛掉以后,Redis將不能再對外提供寫入操作,因此sentinel應運而生。
Redis Sentinel是Redis官方提供的集群管理工具,主要有三大功能:
- 監控:能持續監控Redis的主從實例是否正常工作;
- 通知:當被監控的Redis實例出問題時,能通過API通知系統管理員或其他程序;
- 自動故障恢復:如果主實例無法正常工作,Sentinel將啟動故障恢復機制把一個從實例提升為主實例,其他的從實例將會被重新配置到新的主實例,且應用程序會得到一個更換新地址的通知。
- 配置提供:因為sentinel保存着Redis主從的信息,所以Redis可以從sentinel那獲得所有的配置信息。
Redis Sentinel是一個分布式系統,可以部署多個Sentinel實例來監控同一組Redis實例,當然只要有一個Sentinel實例就可以完成上面的功能,當然一個sentinel實例也是不具備高可用性,所以一般也會搭建sentinel集群。
一、Redis sentinel模式搭建
https://redis.io/topics/sentinel講的很詳細了,照做即可,這還有中文版的,不過版本低了一點,依然可以用,地址為:http://doc.redisfans.com/topic/sentinel.html。
二、Redis sentinel的Java客戶端連接
sentinel就可以滿足一般生產的需求了,所以開發過程中可以使用:
Set<String> sentinels = new HashSet<>( Arrays.asList("ip:port", "ip:port", "ip:port")); GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); //此處對poolConfig進行設置 JedisSentinelPool pool = new JedisSentinelPool("yiwangzhibujian", sentinels, poolConfig); Jedis jedis = pool.getResource(); //使用jedis進行操作 //使用完直接close即可,會自動判斷,若單個連接則關閉,在連接池內則歸還 jedis.close();
這樣就可以了。