Java中的Redis 哨兵高可用性

在優銳課的java架構學習分享中,讓我們探索Redis Sentinel,看看如何在Java上運行它

什麼是Redis哨兵?

可用性是任何企業數據庫中最重要的質量之一。用戶必須保證他們可以訪問所需的信息和見解,從而在工作中表現出色。

但是,確保數據庫在需要時可用是一件容易的事,而做起來卻容易。術語“高可用性”是指可以連續運行而不會出現故障的系統,該系統的時間長度比平均時間長。

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:

redis-sentinel /path/to/sentinel.conf

其中“ /path/to/sentinel.conf”是Sentinel配置文件的路徑。

藉助redis-server可執行文件,你可以使用以下命令運行Redis Sentinel:
redis-server /path/to/sentinel.conf --sentinel

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

Redis Sentinel配置文件示例如下所示:

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5

在此示例中,行``Sentinel Monitor <主組名稱> <端口> <仲裁>’'在給定的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一起使用的可行性。

package redis.demo;
import org.redisson.Redisson;
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
/**
 * Redis Sentinel Java example
 *
 */
public class Application 
{
    public static void main( String[] args )
    {
        Config config = new Config();
        config.useSentinelServers()
              .addSentinelAddress("redis://127.0.0.1:6379")
              .setMasterName("myMaster");
        RedissonClient redisson = Redisson.create(config);
        // perform operations
        // implements java.util.concurrent.ConcurrentMap
        RMap<String, String> map = redisson.getMap("simpleMap");
        map.put("mapKey", "This is a map value");
        String mapValue = map.get("mapKey");
        System.out.println("stored map value: " + mapValue);
        // implements java.util.concurrent.locks.Lock
        RLock lock = redisson.getLock("simpleLock");
        lock.lock();
        try {
           // do some actions
        } finally {
           lock.unlock();
        }
        redisson.shutdown();
    }
}

請務必注意,Redisson用戶必須指定至少一臺Redis Sentinel服務器和至少一臺Redis主節點。 啓動後,Redisson繼續監視Redis Sentinel中可用的主節點和從節點以及Sentinel節點的列表。 這意味着用戶無需監視Redis拓撲的狀態即可處理故障轉移情況; Redisson獨自完成了此任務。

喜歡這篇文章的可以點個贊,歡迎大家留言評論,記得關注我,每天持續更新技術乾貨、職場趣事、海量面試資料等等
如果你對java技術很感興趣也可以加入我的java學習羣 V–(ddmsiqi)來交流學習,裏面都是同行,驗證【CSDN2】有資源共享。
不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章