讓我們探索Redis Sentinel,看看如何在Java上運行它,一起來看看,最近get了很多新知識,分享給大家參考學習。需要詳細的java架構思維導圖路線也可以評論獲取!
什么是Redis哨兵?
在優銳課的java分享中討論了,可用性是任何企業數據庫中最重要的質量之一。用戶必須保證他們可以訪問所需的信息和見解,從而在工作中表現出色。
但是,確保數據庫在需要時可用是一件容易的事,而做起來卻容易。術語“高可用性”是指可以連續運行而不會出現故障的系統,該系統的時間長度比平均時間長。
Redis Sentinel是Redis的高可用性解決方案,Redis是一種開源的內存中數據結構存儲,可用作非關系鍵值數據庫。 Redis Sentinel的目標是通過三種不同的功能來管理Redis實例:監視你的Redis部署,在出現問題時發送通知,以及通過創建新的主節點自動處理故障轉移過程。
作為分布式系統,Redis Sentinel旨在與其他Sentinel進程一起運行。這減少了在檢測到主節點發生故障時出現誤報的可能性,並且還為系統接種了任何單個進程的故障。
Redis Sentinel的創建者建議你至少有三個Sentinel實例,以便進行可靠的Sentinel部署。這些實例應分布在可能彼此獨立故障的計算機之間,例如位於不同地理區域的計算機。
如何運行Redis 哨兵
運行Redis Sentinel將需要以下兩個可執行文件之一:redis-sentinel或redis-server。
使用redis-sentinel可執行文件,你可以使用以下命令運行Redis Sentinel:
1 redis-sentinel /path/to/sentinel.conf
其中“ /path/to/sentinel.conf”是Sentinel配置文件的路徑。
借助redis-server可執行文件,你可以使用以下命令運行Redis Sentinel:
1 redis-server /path/to/sentinel.conf --sentinel
請注意,在兩種情況下,都必須提供指向Sentinel配置文件的鏈接。 運行Redis Sentinel時需要使用配置文件,以便在系統重新啟動時保存系統的當前狀態。
Redis Sentinel配置文件示例如下所示:
1 sentinel monitor mymaster 127.0.0.1 6379 2 2 3 sentinel down-after-milliseconds mymaster 60000 4 5 sentinel failover-timeout mymaster 180000 6 7 sentinel parallel-syncs mymaster 1 8 9 sentinel monitor resque 192.168.1.3 6380 4 10 11 sentinel down-after-milliseconds resque 10000 12 13 sentinel failover-timeout resque 180000 14 15 sentinel parallel-syncs resque 5
在此示例中,行``Sentinel Monitor <主組名稱> <ip> <端口> <仲裁>''在給定的IP地址和端口號上定義了一個名為master-group-name的Sentinel主節點。 法定參數是必須就主節點不可訪問這一事實達成共識的Sentinel進程數。
其他行定義以下設置:
“毫秒后下降”:定義將主節點視為不可達之后經過的毫秒數。
“ Sentinel故障轉移超時”:定義Sentinel進程將嘗試投票主節點的故障轉移的時間。
“ sentinel parallel-syncs”:定義可以在故障轉移后同時重新配置為使用同一主節點的從節點的數量。
在Java上連接到Redis Sentinel
對於Java程序員而言,壞消息是Redis Sentinel與Java兼容。 但是,好消息是Redis Sentinel和Java可以使用諸如Redisson的框架輕松地協同工作,Redisson是Redis的Java客戶端,它使用許多熟悉的Java編程語言構造。 Redisson提供了數十種以分布式方式實現的Java對象,集合,鎖和服務,從而允許用戶在不同的應用程序和服務器之間共享它們。
以下代碼示例演示了如何在Java中開始使用Redis Sentinel。 設置配置文件和Redisson客戶端后,該應用程序執行一些基本操作以演示將Redis與Java一起使用的可行性。
1 package redis.demo; 2 3 import org.redisson.Redisson; 4 5 import org.redisson.api.RBucket; 6 7 import org.redisson.api.RedissonClient; 8 9 /** 10 11 * Redis Sentinel Java example 12 13 * 14 15 */ 16 17 public class Application 18 19 { 20 21 public static void main( String[] args ) 22 23 { 24 25 Config config = new Config(); 26 27 config.useSentinelServers() 28 29 .addSentinelAddress("redis://127.0.0.1:6379") 30 31 .setMasterName("myMaster"); 32 33 RedissonClient redisson = Redisson.create(config); 34 35 // perform operations 36 37 // implements java.util.concurrent.ConcurrentMap 38 39 RMap<String, String> map = redisson.getMap("simpleMap"); 40 41 map.put("mapKey", "This is a map value"); 42 43 String mapValue = map.get("mapKey"); 44 45 System.out.println("stored map value: " + mapValue); 46 47 // implements java.util.concurrent.locks.Lock 48 49 RLock lock = redisson.getLock("simpleLock"); 50 51 lock.lock(); 52 53 try { 54 55 // do some actions 56 57 } finally { 58 59 lock.unlock(); 60 61 } 62 63 redisson.shutdown(); 64 65 } 66 67 }
總結
請務必注意,Redisson用戶必須指定至少一台Redis Sentinel服務器和至少一台Redis主節點。 啟動后,Redisson繼續監視Redis Sentinel中可用的主節點和從節點以及Sentinel節點的列表。 這意味着用戶無需監視Redis拓撲的狀態即可處理故障轉移情況; Redisson獨自完成了此任務。