dotNetCore操作Redis(含CentOS7哨兵模式部署)
現(xiàn)在說到使用緩存中間件基本就是 Redis 了,通常開發(fā)環(huán)境或測試環(huán)境部署一個單機版就可以運行了,但要上生產(chǎn)環(huán)境還需要進行高可用的方式來部署,本文說說在 CentOS7 中 Redis 高可用的部署以及在 dotNetCore 中怎樣調(diào)用。
環(huán)境
CentOS:7.5
Redis:5.0.7
dotNetCore:3.0
CSRedisCore:3.3.0
Redis部署的幾種方式
單機版:用于開發(fā)或測試環(huán)境
主從模式:主從模式提供了一種備份的機制,主庫可以進行讀寫操作,從庫只能進行讀操作,當(dāng)主庫掛了,需要手動將從庫設(shè)置為主庫,算不上真正的高可用
哨兵模式:哨兵模式基于主從模式,當(dāng)主服務(wù)掛了后,哨兵服務(wù)可以從所有的從服務(wù)中選舉一個升級為主,可以繼續(xù)正常地對外提供服務(wù)
集群模式:主從(哨兵)模式的主庫和所有的從庫存儲的數(shù)據(jù)是一樣的,寫數(shù)據(jù)依然是只能從主庫寫。集群模式主要解決的是高并發(fā)的問題,可以橫向擴展,數(shù)據(jù)分?jǐn)傇诓煌?jié)點中。
CentOS 部署 Redis
單機部署
1、執(zhí)行下面命令安裝 wget ,用于后面下載 Redis 安裝包
yum?-y?install?wget2、安裝 gcc ,編譯和安裝 Redis 時需要
yum?-y?install?gcc3、下載 Redis 并安裝
cd?/usr/local??#進入到usr/local目錄 tar?xzf?redis-5.0.7.tar.gz??#解壓Redis cd?redis-5.0.7?#進入到解壓到Redis目錄 make?MALLOC=libc?#編譯 make?install?#安裝4、修改 Redis 配置文件并啟動
cd?/usr/local/redis-5.0.7??#進入redis目錄 vi?redis.conf?#編輯配置文件編輯內(nèi)容如下
daemonize?yes?#修改配置文件中的daemonize為yes,為后臺啟動 redis-server?redis.conf?#根據(jù)修改后到配置文件啟動redis5、檢查并連接
ps?-ef?|?grep?redis?#檢查是否啟動成功 redis-cli?#連接到redis,默認(rèn)會連接6379的默認(rèn)端口6、設(shè)置密碼
vi?redis.conf?#編輯配置文件進行密碼設(shè)置修改文件內(nèi)容,去掉requirepass前面的#號
requirepass?Aa123456 redis-server?redis.conf?#修改完配置文件,重啟redis配置主從(哨兵模式)
正式的生產(chǎn)環(huán)境會使用多臺服務(wù)器來配置主從,本文為了演示,在一臺服務(wù)器上通過多端口的方式來配置主從,端口分配規(guī)則如下:
master:6380
slave1:6382
slave2:6383
slave3:6383
sentinel1:26379
sentinel2:26380
1、在 /usr/local/ 目錄中創(chuàng)建 config 目錄,在該目錄中創(chuàng)建相應(yīng)的目錄存放配置文件和數(shù)據(jù)
cd?/usr/local mkdir?config??#創(chuàng)建config目錄 cd?config mkdir?master-6380?#創(chuàng)建master-6380目錄 cd?master-6380 mkdir?data?#創(chuàng)建data目錄用來存放數(shù)據(jù) cp?/usr/local/redis-5.0.7/redis.conf?.?#將配置文件復(fù)制到當(dāng)前目錄 cd?..?#回退到config目錄 cp?-r?master-6380/?slave-6381? cp?-r?master-6380/?slave-6382 cp?-r?master-6380/?slave-6383mkdir?sentinel-26379??#創(chuàng)建哨兵1配置目錄 cp?/usr/local/redis-5.0.7/sentinel.conf?/usr/local/redis-5.0.7/config/sentinel-26379/? cp?-r?sentinel-26379/?sentinel-26380創(chuàng)建完成后目錄結(jié)構(gòu)如下:
2、配置 master 的 redis.conf 文件
bind?172.16.0.13?#修改成自己的IP地址 port?6380?#主服務(wù)器的端口號 daemonize?yes?#設(shè)置后臺啟動 pidfile?/var/run/redis_6380.pid?#redis?后臺啟動的時候會在/var/run/默認(rèn)生成一個pid文件 protected-mode?no?#保護模式關(guān)閉 dir?/usr/local/config/master-6380/data?#數(shù)據(jù)保存目錄3、配置 slave 的 redis.conf 文件
bind?172.16.0.13?#修改成自己的IP地址 port?6381?#從服務(wù)器的端口號 daemonize?yes?#設(shè)置后臺啟動 pidfile?/var/run/redis_6381.pid? protected-mode?no?#保護模式關(guān)閉 dir?/usr/local/config/slave-6381/data?#數(shù)據(jù)保存目錄 slaveof?172.16.0.13?6380?#主服務(wù)器的IP?主服務(wù)器端口號注意 :slaveof 默認(rèn)在配置文件中是沒有的,需要新添加
4、將端口 6382、6383 對應(yīng)的從服務(wù)器的配置文件對照第三步進行修改
5、配置哨兵1的配置文件
port?26379??#指定哨兵1端口號 daemonize?yes?#設(shè)置后臺啟動 protected-mode?no?#關(guān)閉保護模式 sentinel?monitor?mymaster?172.16.0.13?6380?2?#監(jiān)聽主的端口,后面的數(shù)字2為哨兵的個數(shù) logfile?"/usr/local/config/sentinel-26379/sentinel-26379.log" dir?"/usr/local/config/sentinel-26379/data"6、配置哨兵1的配置文件
port?26380??#指定哨兵2端口號 daemonize?yes?#設(shè)置后臺啟動 protected-mode?no?#關(guān)閉保護模式 sentinel?monitor?mymaster?172.16.0.13?6380?2?#監(jiān)聽主的端口,后面的數(shù)字2為哨兵的個數(shù) logfile?"/usr/local/config/sentinel-26380/sentinel-26380.log" dir?"/usr/local/config/sentinel-26380/data"注意 :mymaster為主的名稱,默認(rèn)為mymaster,如果要修改,該配置文件中所有涉及的地方都需要調(diào)整。
7、啟動服務(wù)
cd?/usr/local/config?#進入到config目錄 redis-server?./master-6380/redis.conf? redis-server?./slave-6381/redis.conf? redis-server?./slave-6382/redis.conf? redis-server?./slave-6383/redis.conf? redis-sentinel?./sentinel-26379/sentinel.conf? redis-sentinel?./sentinel-26380/sentinel.conf?8、查看主從狀態(tài)
redis-cli?-h?172.16.0.13?-p?6380?#連接到主庫 >info??#使用info命令查看信息,如下圖9、測試哨兵是否正常工作
redis-cli?-h?172.16.0.13?-p?6380?#連接到主庫 >shutdown??#停掉主庫 >quit??#退出redis-cli?-h?172.16.0.13?-p?6381?#連接到其中一個從庫 >info??#查看狀態(tài),如下圖:可以看出 6381 的從庫已經(jīng)升級為主庫,這時將 6380 啟動起來,查看服務(wù)器狀態(tài),可以發(fā)現(xiàn) 6380 已經(jīng)變成從庫,說明哨兵在正常工作。
dotNET Core 中連接 Redis
1、在 VS 中創(chuàng)建示例項目,引用 CSRedisCore 的 NuGet 包,如下圖:
2、具體代碼如下:
static?void?Main(string[]?args) {string?redisServerIP?=?"172.16.0.13";string?redisServerPort?=?"6380";string?redisPassword?=?"";bool?isSentinelMode?=?false;string?connectionString?=?GetRedisConnectionString(redisServerIP,?redisServerPort,?redisPassword,0,?"",?isSentinelMode);//哨兵模式if?(isSentinelMode){redisServerIP?=?"172.16.0.13,172.16.0.13";?//哨兵IP列表redisServerPort?=?"26379,26380";List<string>?connectionList?=?GetRedisConnectionList(redisServerIP,?redisServerPort);CSRedisClient?csredis?=?new?CSRedisClient(connectionString,?connectionList.ToArray());RedisHelper.Initialization(csredis);//初始化}else{//普通模式,連接主庫CSRedisClient?csredis?=?new?CSRedisClient(connectionString);RedisHelper.Initialization(csredis);//初始化}Console.WriteLine("Hello?World!"); }完整示例代碼請訪問 https://github.com/oec2003/StudySamples/tree/master/DotNetCoreRedisDemo/DotNetCoreRedisDemo 下載。
希望本文對您有所幫助。
總結(jié)
以上是生活随笔為你收集整理的dotNetCore操作Redis(含CentOS7哨兵模式部署)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【敏捷案例】老板太外行,朝令夕改!要不要
- 下一篇: 大量SQL的解决方案——sdmap