1. 程式人生 > >Redis叢集~StackExchange.redis連線Sentinel伺服器並訂閱相關事件

Redis叢集~StackExchange.redis連線Sentinel伺服器並訂閱相關事件

對於redis-sentinel我在之前的文章中Redis叢集~StackExchange.redis連線Twemproxy代理伺服器 已經說過,它是一個仲裁者,當主master掛了後,它將在所有slave伺服器中進行選舉,選舉的原則當然可以看它的官方文章,這與我們使用者沒有什麼關係,而對於sentinel來說,它在進行主從切換時,會觸發相關事件,這是和我們開發人員有關係的,如當+switch-master事件被觸發時,說明當前Sentinal已經完成了一次主從的切換,並所有服務已經正常運轉了。

下面是我這幾天作的測試,對於Twemproxy代理和Sentinal哨兵都已經成功使用stackExchange.redis進行了連線,並正常訪問了,當然Sentinel只公開了幾個redis命令,這個大家要清夢,不明白的可以看我的這篇文章《Redis叢集~windows下搭建Sentinel環境及它對主從模式的實際意義

》。

連線普通的redis伺服器

  ConnectionMultiplexer conn = ConnectionMultiplexer.Connect("127.0.0.1:6379");
  ConfigurationOptions option = new ConfigurationOptions();
  option.EndPoints.Add("127.0.0.1", 6379);
  ConnectionMultiplexer conn = ConnectionMultiplexer.Connect(option);

連線TW代理伺服器

    ConfigurationOptions twOption = new
ConfigurationOptions();    twOption.EndPoints.Add("127.0.0.1", 22122);    twOption.EndPoints.Add("127.0.0.1", 22123);    twOption.Proxy = Proxy.Twemproxy;//代理的型別 ConnectionMultiplexer conn = ConnectionMultiplexer.Connect(twOption);

連線Sentinal仲裁哨兵伺服器

           //連線sentinel伺服器
            ConfigurationOptions sentinelConfig = new
ConfigurationOptions();            sentinelConfig.ServiceName = "master1";            sentinelConfig.EndPoints.Add("192.168.2.3", 26379);            sentinelConfig.EndPoints.Add("192.168.2.3", 26380);            sentinelConfig.TieBreaker = "";//這行在sentinel模式必須加上 sentinelConfig.CommandMap = CommandMap.Sentinel;            // Need Version 3.0 for the INFO command? sentinelConfig.DefaultVersion = new Version(3, 0);            ConnectionMultiplexer conn = ConnectionMultiplexer.Connect(sentinelConfig);

有了上面的程式碼後,我們可以成功的連線一個sentinel伺服器,對這個連線的實際意義在於:當一個主從進行切換後,如果它外層有Twemproxy代理,我們可以在這個時機(+switch-master事件)通知你的Twemproxy代理伺服器,並更新它的配置檔案裡的master伺服器的地址,然後從起你的Twemproxy服務,這樣你的主從切換才算真正完成。

對於Twemproxy-sentinal-master/slave主從切換實現圖

我們可以使用.netcore開發一個跨平臺的程式,將它放在linux的tw代理伺服器上,使用dotnet run去執行它,然後當收到由sentinel發來的+switch-master事件時,將更新tw配置檔案並從起它的服務。

640?wx_fmt=png

希望大家對技術多一點深度的研究,找不到答案就看看它的原始碼,可能會有意外的收穫!

相關文章:

原文地址:http://www.cnblogs.com/lori/p/5829250.html

.NET社群新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

640?wx_fmt=jpeg