csredis-in-asp.net core理論實戰-主從配置、哨兵模式
csredis
看了github上的開源專案,上面真的只是單純的使用文件,可能對於我這種人(菜鳥)就不太友好,
我知道他對標的是ServiceStack.Redis, 一開始csredis只支援. net 版本,但原作者沒有繼續維護,作者使用 . net core重寫後,逐漸演化的一個. net core 版本的redis 驅動,
使用這個類庫可以方便的地在 c#中訪問redis資料庫,官方介紹
低門檻、高效能,和分割槽高階玩法的redis-cli SDK;
我呢,就照著官方文件寫一些示例,大佬就別看了,只是整合方案與學習筆記。
在學習之前,看到README.md上的內容不免陷入沉思,好多關鍵字我都不懂是什麼意思,所以還是從理論入手,搜尋資料,整合出入門資料,往後再講在asp .net core中整合與使用的示例。
哨兵模式
- Redis哨兵(Sentinel)模式 https://www.jianshu.com/p/06ab9daf921d
先在本地搭建好主從redis服務,我本地win10,已安裝好一個redis,部署在6379埠上、先把這些文件看看。
下載
windows安裝綠色版Redis
主從配置(Windows版)
本地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中,可使用如下命令。
- Installing the Service:–service-install
redis-server --service-install redis.windows-service.conf --loglevel verbose
redis-server --service-install redis.windows.conf --service-name redis6380
- Uninstalling the Service:–service-uninstall
redis-server --service-uninstall
- Starting the Service:–service-start
redis-server --service-start
- Stopping the Service:–service-stop
redis-server --service-stop
- Naming the Service: --service-name name
redis-server --service-install --service-name redisService1 --port 10001
- set port :–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對應的值,改成26739、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),是可以後臺一直執行的。
- 在windows下以服務的形式啟動哨兵
管理員執行
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
...
高可用測試
1.主伺服器Master 掛掉
停止 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成為主節點,其他節點(6379、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
...
2.6379服務再次啟動
當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
...
3.slave 6381關閉
此時檢視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
...
相關連結
- Cross-platform GUI management tool for Redis https://github.com/uglide/RedisDesktopManager
- Redis in Windows的3.x版本 https://github.com/MicrosoftArchive/redis
- Redis in Windows的4.x版本 https://github.com/tporadowski/redis
- Redis in linux https://github.com/antirez/redis
- Redis高可用叢集-哨兵模式(Redis-Sentinel)搭建配置教程【Windows環境】 https://aflyun.blog.csdn.net/article/details/79430105
linux版Redis主從搭建
建議大家看這個文章,我一開始參考了其他的,寫完windows版,才看到這個連結,關於深入剖析Redis系列
相關文章
- csredis-in-asp.net core理論實戰-使用示例RedisASP.NET
- Docker配置redis主從哨兵DockerRedis
- Redis 哨兵模式實現主從故障互切換Redis模式
- 詳解Redis主從及哨兵模式Redis模式
- Redis docker 主從模式與哨兵sentinelRedisDocker模式
- .net core使用CSRedisCore訪問Redis主從+哨兵Redis
- RocketMQ實戰系列從理論到實戰MQ
- 淺談:redis的主從複製 + 哨兵模式Redis模式
- Redis三種高可用模式:主從、哨兵、叢集Redis模式
- .Net Core 使用 CSRedisCore 訪問 Redis 的哨兵和主從複製Redis
- docker Redis單機主從哨兵模式切換失敗DockerRedis模式
- linux系統——Redis叢集搭建(主從+哨兵模式)LinuxRedis模式
- Redis哨兵模式(Sentinel、1主2從3哨兵6臺伺服器配置實戰、客戶端呼叫、日誌解析、主觀下線、客觀下線、仲裁、腦裂問題、哨兵長與從節點投票選舉過程與原理)Redis模式伺服器客戶端
- 實踐 - 搭建Redis一主兩從三哨兵Redis
- Docker最全教程——從理論到實戰(二)Docker
- Docker最全教程——從理論到實戰(一)Docker
- Docker最全教程——從理論到實戰(五)Docker
- Docker最全教程——從理論到實戰(四)Docker
- Docker最全教程——從理論到實戰(三)Docker
- Docker最全教程——從理論到實戰(六)Docker
- Docker最全教程——從理論到實戰(八)Docker
- Docker最全教程——從理論到實戰(七)Docker
- 用 docker 學習 redis 主從複製3.2 redis-sentinel「哨兵模式」核心配置-命令-原理DockerRedis模式
- Redis哨兵模式配置測試Redis模式
- Redis 主從複製與哨兵Redis
- 深度解析BERT:從理論到Pytorch實戰PyTorch
- CentOS7.8 環境搭建 Redis 主從複製和哨兵模式CentOSRedis模式
- Redis Sentinel哨兵模式原理及配置Redis模式
- Docker 快速搭建主從 + 哨兵監控Docker
- Redis高可用-主從,哨兵,叢集Redis
- helm 安裝redis的主從、哨兵Redis
- web3從入門到實戰-理論篇Web
- 用 docker 學習 redis 主從複製3 redis-sentinel(哨兵模式)DockerRedis模式
- Mysql 主從同步實戰MySql主從同步
- Redis搭建主從複製、哨兵叢集Redis
- 一文掌握Redis主從複製、哨兵、Cluster三種叢集模式Redis模式
- 輕鬆掌握元件啟動之Redis單機、主從、哨兵、叢集配置元件Redis
- Redis哨兵叢集:哨兵掛了,主從庫還能切換嗎?Redis