csredis-in-asp.net core理论实战-主从配置、哨兵模式
csredis
GitHub?https://github.com/2881099/csredis
看了github上的開源項(xiàng)目,上面真的只是單純的使用文檔,可能對于我這種人(菜鳥)就不太友好,
我知道他對標(biāo)的是ServiceStack.Redis, 一開始csredis只支持. net 版本,但原作者沒有繼續(xù)維護(hù),作者使用 . net core重寫后,逐漸演化的一個. net core 版本的redis 驅(qū)動,
使用這個類庫可以方便的地在 c#中訪問redis數(shù)據(jù)庫,官方介紹
低門檻、高性能,和分區(qū)高級玩法的redis-cli SDK;
我呢,就照著官方文檔寫一些示例,大佬就別看了,只是集成方案與學(xué)習(xí)筆記。
https://github.com/luoyunchong/dotnetcore-examples/blob/master/dotnet-core-redis/
在學(xué)習(xí)之前,看到README.md上的內(nèi)容不免陷入沉思,好多關(guān)鍵字我都不懂是什么意思,所以還是從理論入手,搜索資料,整合出入門資料,往后再講在asp .net core中集成與使用的示例。
哨兵模式
Redis哨兵(Sentinel)模式?https://www.jianshu.com/p/06ab9daf921d
上文介紹了Redis的哨兵是什么:為了服務(wù)的高可用性,當(dāng)一臺服務(wù)器宕機(jī)時,可以自動地切換到另一個服務(wù)器,不需要手動干預(yù),Redis的哨兵用于監(jiān)控Redis服務(wù)器的狀態(tài),當(dāng)master宕機(jī),會自動將其中的一個slave切換為master,然后再通過?發(fā)布訂閱模式通知其他的從服務(wù)器,自動修改配置文件,自切換主機(jī)。
先在本地搭建好主從redis服務(wù),我本地win10,已安裝好一個redis,部署在6379端口上、先把這些文檔看看。
下載
windows安裝綠色版Redis
https://blog.csdn.net/ml863606/article/details/87456239
主從配置(Windows版)
本地Redis主從配置(Windows版),從github上下載zip壓縮包,解壓后,復(fù)制二份文件夾至某一目錄,配置二個從Redis服務(wù)器,可參考如下
https://www.cnblogs.com/cang12138/p/9132288.html#_label0
簡單教程
D:\services\Redis-x64-3.2.100目錄 其實(shí)有 “Windows Service Documentation.docx ”,上面說的很清楚,這里只說最簡單的配置多個服務(wù)的方式,使用文本編輯器打開redis.windows-service.conf文件,可修改啟用端口。
Copyport 6380cmd 到D:\services\Redis-x64-3.2.100-1,一定要管理員運(yùn)行
Copy#安裝服務(wù) redis-server --service-install redis.windows-service.conf --service-name redis6380 #開啟服務(wù) net start redis6380如果無法開啟服務(wù)redis6380,就刪除此服務(wù),再次執(zhí)行,見下方參考命令 刪除服務(wù)。
本地安裝成了三個reids,他們運(yùn)行在不同的端口,三個哨兵。
| master Redis服務(wù) | localhost | 6379 |
| slave Redis服務(wù)器 | localhost | 6380 |
| slave Redis服務(wù)器 | localhost | 6381 |
| sentinel | localhost | 26381 |
| sentinel | localhost | 26379 |
| sentinel | localhost | 26380 |
6379那個redis是使用msi安裝包安裝的,所以redis-cli是可以在任意文件夾位置執(zhí)行的,如未配置,請?jiān)贒:\service\Redis-x64-3.2.100-1目錄下執(zhí)行這些命令。
CopyC:\Users\Computer>redis-cli -p 6380 127.0.0.1:6381> slaveof 127.0.0.1 6379 OK ctrl+c退出命令行狀態(tài)。 C:\Users\Computer>redis-cli -p 6381 127.0.0.1:6381> slaveof 127.0.0.1 6379 OK另開一個終端
CopyC:\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",已經(jīng)被同步過來了。
Copy127.0.0.1:6381> get a "1233"參考命令
右擊電腦 ->管理->服務(wù)和應(yīng)用程序 ->服務(wù)->可選擇服務(wù)名進(jìn)行管理。
Copy#開啟服務(wù) net start redis6380 #關(guān)閉服務(wù) net stop redis6380 #刪除服務(wù):當(dāng)服務(wù)不正常時可根據(jù)名稱刪除 sc delete redis6380以管理員權(quán)限cmd到目錄D:\services\Redis-x64-3.2.100中,可使用如下命令。
Installing the Service:--service-install
Uninstalling the Service:--service-uninstall
Starting the Service:--service-start
Stopping the Service:--service-stop
Naming the Service: --service-name name
set port :--port 10001
查看redis 版本、redis-cli版本
CopyPS 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提供的一個命令,獨(dú)立進(jìn)程,獨(dú)立運(yùn)行,哨兵的作用是為了實(shí)現(xiàn)對redis服務(wù)器狀態(tài)的監(jiān)控,保證服務(wù)的可用性,實(shí)現(xiàn)故障切換,無須人為干預(yù)。
1.配置項(xiàng)
這個是通過 .msi文件安裝的redis,與.zip解壓后啟動的服務(wù)無區(qū)別。打開E:\Program Files\Redis\sentinel.conf,沒有就創(chuàng)建此文件,另外二個redis,只用改port對應(yīng)的值,改成26739、26740,配置內(nèi)容如下:
Copy#當(dāng)前Sentinel服務(wù)運(yùn)行的端口 port 26381 # 3s內(nèi)mymaster無響應(yīng),則認(rèn)為mymaster宕機(jī)了 sentinel monitor mymaster 127.0.0.1 6379 2 #如果10秒后,mysater仍沒啟動過來,則啟動failover sentinel down-after-milliseconds mymaster 3000 # 執(zhí)行故障轉(zhuǎn)移時, 最多有1個從服務(wù)器同時對新的主服務(wù)器進(jìn)行同步 sentinel failover-timeout mymaster 10000配置監(jiān)聽的主服務(wù)器,這里sentinel monitor代表監(jiān)控,mymaster代表服務(wù)器的名稱,可以自定義,127.0.0.1代表監(jiān)控的主服務(wù)器,6379代表端口,2代表只有兩個或兩個以上的哨兵認(rèn)為主服務(wù)器不可用的時候,才會進(jìn)行failover操作。
啟動哨兵
前提redis服務(wù)已啟動。
CopyPS 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因?yàn)閣indows下不支持守護(hù)進(jìn)程(一種可在后臺運(yùn)行的程序),這樣命令行一關(guān)閉,哨兵也停止了(Windows does not support daemonize. Start Redis as service),在windows下叫服務(wù)(service),是可以后臺一直運(yùn)行的。
在windows下以服務(wù)的形式啟動哨兵
管理員運(yùn)行
CopyE:\Program Files\Redis>redis-server --service-install --service-name sentinel sentinel.conf --sentinelD:\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,哨兵運(yùn)行在26379端口 ,生成哨兵ID(Sentinel ID)
Copysentinel myid a2e75eedaf161357fe03df490a14b4158ad3ba88也生成了如下內(nèi)容,能監(jiān)控到從slave服務(wù)6380的redis、slave6381的redis,也能監(jiān)控到其他的哨兵,分別運(yùn)行在26380、26381端口
Copy# 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當(dāng)前信息
CopyPS 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信息
CopyPS 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.主服務(wù)器Master 掛掉
停止 6379服務(wù)
CopyC:\WINDOWS\system32>redis-cli -p 6379 127.0.0.1:6379> shutdown not connected> 或 C:\WINDOWS\system32>net stop redis6379中sentinel_log.log,可見,當(dāng)6379redis服務(wù)掛 了后,此日志表明,redis在failover后錯誤重試,switch-master切換為6380
Copy[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 63806380redis 服務(wù) 日志,當(dāng)6379服務(wù)掛了后,6380成為主節(jié)點(diǎn),其他節(jié)點(diǎn)(6379、6381)成為從節(jié)點(diǎn),此時打開D:\service\Redis-x64-3.2.100-1\redis.windows-service.conf,之前配置的slaveof 127.0.0.1 6379已經(jīng)沒有了。
Copy[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端口,
Copyredis-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服務(wù)再次啟動
當(dāng)6379的服務(wù)啟動后,6379的服務(wù)將成為6380的從服務(wù)器slave,再次通過 redis-cli -p 端口, 輸入 info replication查看對應(yīng)服務(wù)的節(jié)點(diǎn)信息
CopyPS E:\Program Files\Redis> redis-server --service-start 或 C:\WINDOWS\system32>net start redisPS 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關(guān)閉
此時查看6380的info,可見此時只有一個從節(jié)點(diǎn)6379
CopyC:\WINDOWS\system32>net stop redis6381 role:master connected_slaves:1PS 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 ...相關(guān)鏈接
Redis哨兵(Sentinel)模式?https://www.jianshu.com/p/06ab9daf921d
windows安裝綠色版Redis -?https://blog.csdn.net/ml863606/article/details/87456239
主從配置(Windows版) https://www.cnblogs.com/cang12138/p/9132288.html#_label0
csredis?https://github.com/2881099/csredis
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)搭建配置教程【W(wǎng)indows環(huán)境】?https://aflyun.blog.csdn.net/article/details/79430105
linux版Redis主從搭建
建議大家看這個文章,我一開始參考了其他的,寫完windows版,才看到這個鏈接,關(guān)于深入剖析Redis系列
https://juejin.im/post/5b76e732f265da4376203849
總結(jié)
以上是生活随笔為你收集整理的csredis-in-asp.net core理论实战-主从配置、哨兵模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的 .NET Core 博客性能优化经
- 下一篇: .NET Core 在 K8S 上的开发