項目中考慮到容災、性能以及容量,一般會使用集群方式搭建redis。而當redis主伺服器存在故障,為了redis仍能正常運行,可以搭建redis哨兵,通過選舉方式重新建立主從關係。本文簡單講述主從建立和哨兵的配置。本機測試redis為Redis-x64-3.2.100(Windows下載地址:htt ...
項目中考慮到容災、性能以及容量,一般會使用集群方式搭建redis。而當redis主伺服器存在故障,為了redis仍能正常運行,可以搭建redis哨兵,通過選舉方式重新建立主從關係。本文簡單講述主從建立和哨兵的配置。本機測試redis為Redis-x64-3.2.100(Windows下載地址:https://github.com/MicrosoftArchive/redis/releases),使用一臺機器運行測試。
1.1 下載解壓
下載完成後進行解壓,然後複製兩份作為從成員,構成一主二從。
1.2 主從配置
主redis配置:編輯文件夾下redis.windows.conf文件,設置bind和port,因為我是本機測試,預設設置bind 127.0.0.1,port 6379
從redis配置:同樣編輯文件夾下redis.windows.conf文件,設置bind和port。由於我是一臺機器設置兩個從redis,所以bind都是127.0.0.1,port分別是6380和6381。做完以上操作,如何標誌這兩redis是從關係呢?所以,還需要在配置文件中加上一行配置。註意:兩個從redis都是相同的配置語句,因為都從屬於同一個主redis。
slaveof 127.0.0.1 6379
1.3 主從redis啟動
在文件加中使用cmd進入命令視窗,輸入redis-server redis.windows.conf即可啟動(redis-server.exe和redis.windows.conf文件在相同文件夾下),依次啟動主和從redis。
redis-server redis.windows.conf
2.1 哨兵配置
在三個redis文件加中創建redis.windows.sentinel.conf文件,設置綁定的port為26379、26380和26381,設置哨兵監視的主伺服器(註意:3個哨兵都只配置監視的主redis的IP和埠,也就是127.0.0.1:6379這一個,不是分別寫其所在redis的IP和埠)
哨兵1配置
#哨兵1埠 port 26379 #mymaster 即命名的主redis,後續客戶端連接哨兵的時候將會使用, #主伺服器IP:127.0.0.1 埠 6379 ##2表示在sentinel集群中最少需要有兩個節點檢測到redis主節點出故障就進行主從切換 sentinel monitor mymaster 127.0.0.1 6379 2
哨兵2配置
#哨兵2埠 port 26380 #mymaster 即命名的主redis,後續客戶端連接哨兵的時候將會使用, #主伺服器IP:127.0.0.1 埠 6379 ##2表示在sentinel集群中最少需要有兩個節點檢測到redis主節點出故障就進行主從切換 sentinel monitor mymaster 127.0.0.1 6379 2
哨兵3配置
#哨兵3埠 port 26381 #mymaster 即命名的主redis,後續客戶端連接哨兵的時候將會使用, #主伺服器IP:127.0.0.1 埠 6379 ##2表示在sentinel集群中最少需要有兩個節點檢測到redis主節點出故障就進行主從切換 sentinel monitor mymaster 127.0.0.1 6379 2
2.2 啟動哨兵
在文件加中使用cmd進入命令視窗,輸入redis-server redis.windows.sentinel.conf --sentinel即可啟動(redis-server.exe和redis.windows.sentinel.conf文件在相同文件夾下),依次啟動3個哨兵。
redis-server redis.windows.sentinel.conf --sentine
啟動後會顯示從成員和主成員
3 測試功能
將主redis關閉,可發現哨兵會重新選舉主伺服器,然後繼續保持主從關係,重新啟動關閉的redis,該redis將變成從成員。
4 代碼連接redis
在.net core環境下,使用進行連接測試,採用哨兵的連接方式。
class Program { static void Main(string[] args) { var csredis = new CSRedis.CSRedisClient("mymaster", new string[] { "127.0.0.1:26379", "127.0.0.1:26380", "127.0.0.1:26381" }); RedisHelper.Initialization(csredis); while (true) { try { RedisHelper.Set("time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//設置值。預設永不過期 Console.WriteLine(RedisHelper.Get<String>("time")); System.Threading.Thread.Sleep(1000); } catch(Exception e) { Console.WriteLine(e.Message); } } } }