看了github上的開源項目,上面真的只是單純的使用文檔,可能對於我這種人(菜鳥)就不太友好,html
我知道他對標的是ServiceStack.Redis, 一開始csredis只支持. net 版本,但原做者沒有繼續維護,做者使用 . net core重寫後,逐漸演化的一個. net core 版本的redis 驅動,linux
使用這個類庫能夠方便的地在 c#中訪問redis數據庫,官方介紹git
我呢,就照着官方文檔寫一些示例,大佬就別看了,只是集成方案與學習筆記。github
在學習以前,看到README.md上的內容難免陷入沉思,好多關鍵字我都不懂是什麼意思,因此仍是從理論入手,搜索資料,整合出入門資料,日後再講在asp .net core中集成與使用的示例。redis
上文介紹了Redis的哨兵是什麼:爲了服務的高可用性,當一臺服務器宕機時,能夠自動地切換到另外一個服務器,不須要手動干預,Redis的哨兵用於監控Redis服務器的狀態,當master宕機,會自動將其中的一個slave切換爲master,而後再經過 發佈訂閱模式通知其餘的從服務器,自動修改配置文件,自切換主機。數據庫
先在本地搭建好主從redis服務,我本地win10,已安裝好一個redis,部署在6379端口上、先把這些文檔看看。c#
windows安裝綠色版Rediswindows
本地Redis主從配置(Windows版),從github上下載zip壓縮包,解壓後,複製二份文件夾至某一目錄,配置二個從Redis服務器,可參考以下服務器
D:\services\Redis-x64-3.2.100目錄 其實有 「Windows Service Documentation.docx 」,上面說的很清楚,這裏只說最簡單的配置多個服務的方式,使用文本編輯器打開redis.windows-service.conf文件,可修改啓用端口。編輯器
port 6380
cmd 到D:\services\Redis-x64-3.2.100-1,必定要管理員運行
#安裝服務 redis-server --service-install redis.windows-service.conf --service-name redis6380 #開啓服務 net start redis6380
若是沒法開啓服務redis6380,就刪除此服務,再次執行,見下方參考命令 刪除服務。
本地安裝成了三個reids,他們運行在不一樣的端口,三個哨兵。
服務類型 | IP | port |
---|---|---|
master Redis服務 | localhost | 6379 |
slave Redis服務器 | localhost | 6380 |
slave Redis服務器 | localhost | 6381 |
sentinel | localhost | 26381 |
sentinel | localhost | 26379 |
sentinel | localhost | 26380 |
slaveof $host $port 做用是設置主從庫,在redis-cli命令中執行,便可將此redis設置爲host下port端口的從庫,$開頭的爲參數 slaveof no one #取消同步 也可在windows-server.conf文件中配置
6379那個redis是使用msi安裝包安裝的,因此redis-cli是能夠在任意文件夾位置執行的,如未配置,請在D:\service\Redis-x64-3.2.100-1目錄下執行這些命令。
C:\Users\Computer>redis-cli -p 6380 127.0.0.1:6381> slaveof 127.0.0.1 6379 OK ctrl+c退出命令行狀態。 C:\Users\Computer>redis-cli -p 6381 127.0.0.1:6381> slaveof 127.0.0.1 6379 OK
另開一個終端
C:\Users\Computer>redis-cli -p 6379 127.0.0.1:6379> set a 1233 OK 127.0.0.1:6379> get a "1233"
本來的終端獲得a的值是"1233",已經被同步過來了。
127.0.0.1:6381> get a "1233"
右擊電腦 ->管理->服務和應用程序 ->服務->可選擇服務名進行管理。
#開啓服務 net start redis6380 #關閉服務 net stop redis6380 #刪除服務:當服務不正常時可根據名稱刪除 sc delete redis6380
以管理員權限cmd到目錄D:\services\Redis-x64-3.2.100中,可以使用以下命令。
redis-server --service-install redis.windows-service.conf --loglevel verbose redis-server --service-install redis.windows.conf --service-name redis6380
redis-server --service-uninstall
redis-server --service-start
redis-server --service-stop
redis-server --service-install --service-name redisService1 --port 10001
查看redis 版本、redis-cli版本
PS D:\service\Redis-x64-3.2.100-1> redis-server -v Redis server v=3.2.100 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=dd26f1f93c5130ee PS D:\service\Redis-x64-3.2.100-1> redis-cli -v redis-cli 3.2.100
哨兵模式是Redis提供的一個命令,獨立進程,獨立運行,哨兵的做用是爲了實現對redis服務器狀態的監控,保證服務的可用性,實現故障切換,無須人爲干預。
1.配置項
這個是經過 .msi文件安裝的redis,與.zip解壓後啓動的服務無區別。打開E:\Program Files\Redis\sentinel.conf,沒有就建立此文件,另外二個redis,只用改port對應的值,改爲2673九、26740,配置內容以下:
#當前Sentinel服務運行的端口 port 26381 # 3s內mymaster無響應,則認爲mymaster宕機了 sentinel monitor mymaster 127.0.0.1 6379 2 #若是10秒後,mysater仍沒啓動過來,則啓動failover sentinel down-after-milliseconds mymaster 3000 # 執行故障轉移時, 最多有1個從服務器同時對新的主服務器進行同步 sentinel failover-timeout mymaster 10000
配置監聽的主服務器,這裏sentinel monitor表明監控,mymaster表明服務器的名稱,能夠自定義,127.0.0.1表明監控的主服務器,6379表明端口,2表明只有兩個或兩個以上的哨兵認爲主服務器不可用的時候,纔會進行failover操做。
前提redis服務已啓動。
PS E:\Program Files\Redis> .\redis-server.exe .\sentinel.conf --sentinel _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 3.2.100 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in sentinel mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 26381 | `-._ `._ / _.-' | PID: 22452 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' [22452] 07 Jul 11:47:00.111 # Sentinel ID is fc076362c0a5cc71d3c72f71c00a15b2726b2bf8 [22452] 07 Jul 11:47:00.111 # +monitor master mymaster 127.0.0.1 6379 quorum 2 [22452] 07 Jul 11:47:00.114 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379
由於windows下不支持守護進程(一種可在後臺運行的程序),這樣命令行一關閉,哨兵也中止了(Windows does not support daemonize. Start Redis as service),在windows下叫服務(service),是能夠後臺一直運行的。
管理員運行
E:\Program Files\Redis>redis-server --service-install --service-name sentinel sentinel.conf --sentinel D:\service\Redis-x64-3.2.100-1>redis-server --service-install --service-name sentinel-1 sentinel.conf --sentinel [20700] 07 Jul 12:01:21.297 # Granting read/write access to 'NT AUTHORITY\NetworkService' on: "D:\service\Redis-x64-3.2.100-1" "D:\service\Redis-x64-3.2.100-1\" [20700] 07 Jul 12:01:21.300 # Redis successfully installed as a service. D:\service\Redis-x64-3.2.100-2>redis-server --service-install --service-name sentinel-2 sentinel.conf --sentinel [15772] 07 Jul 12:01:33.942 # Granting read/write access to 'NT AUTHORITY\NetworkService' on: "D:\service\Redis-x64-3.2.100-2" "D:\service\Redis-x64-3.2.100-2\" [15772] 07 Jul 12:01:33.944 # Redis successfully installed as a service.
此時D:\service\Redis-x64-3.2.100-1\sentinel.conf,哨兵運行在26379端口 ,生成哨兵ID(Sentinel ID)
sentinel myid a2e75eedaf161357fe03df490a14b4158ad3ba88
也生成了以下內容,能監控到從slave服務6380的redis、slave6381的redis,也能監控到其餘的哨兵,分別運行在26380、26381端口
# Generated by CONFIG REWRITE dir "D:\\service\\Redis-x64-3.2.100-1" sentinel config-epoch mymaster 0 sentinel leader-epoch mymaster 0 sentinel known-slave mymaster 127.0.0.1 6380 sentinel known-slave mymaster 127.0.0.1 6381 sentinel known-sentinel mymaster 127.0.0.1 26380 a2e75eedaf161357fe03df490a14b4158ad3ba88 sentinel known-sentinel mymaster 127.0.0.1 26381 fc076362c0a5cc71d3c72f71c00a15b2726b2bf8 sentinel current-epoch 0
在主master redis中查看redis當前信息
PS E:\Program Files\Redis> redis-cli -p 6379 127.0.0.1:6379> info replication # Replication role:master connected_slaves:2 slave0:ip=127.0.0.1,port=6381,state=online,offset=141627,lag=1 slave1:ip=127.0.0.1,port=6380,state=online,offset=141627,lag=0 ...
ctrl+c退出,查看redis6380信息
PS E:\Program Files\Redis> redis-cli -p 6380 127.0.0.1:6380> info replication # Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:161451 slave_priority:100 slave_read_only:1 connected_slaves:0 ...
中止 6379服務
C:\WINDOWS\system32>redis-cli -p 6379 127.0.0.1:6379> shutdown not connected> 或 C:\WINDOWS\system32>net stop redis
6379中sentinel_log.log,可見,當6379redis服務掛 了後,此日誌代表,redis在failover後錯誤重試,switch-master切換爲6380
[240] 07 Jul 12:16:15.015 # +sdown master mymaster 127.0.0.1 6379 [240] 07 Jul 12:16:15.086 # +odown master mymaster 127.0.0.1 6379 #quorum 2/2 [240] 07 Jul 12:16:15.086 # +new-epoch 1 [240] 07 Jul 12:16:15.086 # +try-failover master mymaster 127.0.0.1 6379 [240] 07 Jul 12:16:15.088 # +vote-for-leader 207bd9abfe9283e32b6e0de3635e126bfdbba3b4 1 [240] 07 Jul 12:16:15.090 # a2e75eedaf161357fe03df490a14b4158ad3ba88 voted for 207bd9abfe9283e32b6e0de3635e126bfdbba3b4 1 [240] 07 Jul 12:16:15.091 # 14c6428bae2afc1d92b5159b0788dbba753ee85b voted for 207bd9abfe9283e32b6e0de3635e126bfdbba3b4 1 [240] 07 Jul 12:16:15.188 # +elected-leader master mymaster 127.0.0.1 6379 [240] 07 Jul 12:16:15.188 # +failover-state-select-slave master mymaster 127.0.0.1 6379 [240] 07 Jul 12:16:15.255 # +selected-slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379 [240] 07 Jul 12:16:15.255 * +failover-state-send-slaveof-noone slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379 [240] 07 Jul 12:16:15.338 * +failover-state-wait-promotion slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379 [240] 07 Jul 12:16:15.718 # +promoted-slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379 [240] 07 Jul 12:16:15.718 # +failover-state-reconf-slaves master mymaster 127.0.0.1 6379 [240] 07 Jul 12:16:15.800 * +slave-reconf-sent slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379 [240] 07 Jul 12:16:16.217 # -odown master mymaster 127.0.0.1 6379 [240] 07 Jul 12:16:16.757 * +slave-reconf-inprog slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379 [240] 07 Jul 12:16:16.758 * +slave-reconf-done slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379 [240] 07 Jul 12:16:16.834 # +failover-end master mymaster 127.0.0.1 6379 [240] 07 Jul 12:16:16.834 # +switch-master mymaster 127.0.0.1 6379 127.0.0.1 6380 [240] 07 Jul 12:16:16.835 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6380 [240] 07 Jul 12:16:16.835 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380 [240] 07 Jul 12:16:19.853 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380
6380redis 服務 日誌,當6379服務掛了後,6380成爲主節點,其餘節點(637九、6381)成爲從節點,此時打開D:\service\Redis-x64-3.2.100-1\redis.windows-service.conf,以前配置的slaveof 127.0.0.1 6379已經沒有了。
[9404] 07 Jul 12:16:15.037 # +sdown master mymaster 127.0.0.1 6379 [9404] 07 Jul 12:16:15.089 # +new-epoch 1 [9404] 07 Jul 12:16:15.090 # +vote-for-leader 207bd9abfe9283e32b6e0de3635e126bfdbba3b4 1 [9404] 07 Jul 12:16:15.104 # +odown master mymaster 127.0.0.1 6379 #quorum 3/2 [9404] 07 Jul 12:16:15.104 # Next failover delay: I will not start a failover before Sun Jul 07 12:16:35 2019 [9404] 07 Jul 12:16:15.801 # +config-update-from sentinel 207bd9abfe9283e32b6e0de3635e126bfdbba3b4 127.0.0.1 26381 @ mymaster 127.0.0.1 6379 [9404] 07 Jul 12:16:15.801 # +switch-master mymaster 127.0.0.1 6379 127.0.0.1 6380 [9404] 07 Jul 12:16:15.802 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6380 [9404] 07 Jul 12:16:15.802 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380 [9404] 07 Jul 12:16:18.812 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380
此時查看 6380的信息,能夠看到此時只有一個slave在線,其配置爲127.0.0.1的6381端口,
redis-cli -p 6380 127.0.0.1:6380> info replication role:master connected_slaves:1 slave0:ip=127.0.0.1,port=6381,state=online,offset=119281,lag=1 master_repl_offset:119547 ...
當6379的服務啓動後,6379的服務將成爲6380的從服務器slave,再次經過 redis-cli -p 端口, 輸入 info replication查看對應服務的節點信息
PS E:\Program Files\Redis> redis-server --service-start 或 C:\WINDOWS\system32>net start redis PS E:\Program Files\Redis> redis-cli -p 6380 127.0.0.1:6380> info replication # Replication role:master connected_slaves:2 slave0:ip=127.0.0.1,port=6379,state=online,offset=339593,lag=1 slave1:ip=127.0.0.1,port=6381,state=online,offset=339593,lag=1 ...
此時查看6380的info,可見此時只有一個從節點6379
C:\WINDOWS\system32>net stop redis6381 role:master connected_slaves:1 PS E:\Program Files\Redis> redis-cli -p 6380 127.0.0.1:6380> info replication role:master connected_slaves:1 slave0:ip=127.0.0.1,port=6379,state=online,offset=329392,lag=1 master_repl_offset:329525 ...
建議你們看這個文章,我一開始參考了其餘的,寫完windows版,纔看到這個連接,關於深刻剖析Redis系列
原文出處:https://www.cnblogs.com/igeekfan/p/12115033.html