Java中的Redis 哨兵高可用性

讓咱們探索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。java

使用redis-sentinel可執行文件,能夠使用如下命令運行Redis Sentinel:程序員

1 redis-sentinel /path/to/sentinel.conf

 

其中「 /path/to/sentinel.conf」是Sentinel配置文件的路徑。redis

藉助redis-server可執行文件,能夠使用如下命令運行Redis Sentinel:數據庫

1 redis-server /path/to/sentinel.conf --sentinel

 

請注意,在兩種狀況下,都必須提供指向Sentinel配置文件的連接。 運行Redis Sentinel時須要使用配置文件,以便在系統從新啓動時保存系統的當前狀態。編程

Redis Sentinel配置文件示例以下所示:api

 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獨自完成了此任務。

相關文章
相關標籤/搜索