dotNetCore操作Redis(含CentOS7哨兵模式部署)
現在說到使用緩存中間件基本就是 Redis 了,通常開發環境或測試環境部署一個單機版就可以運行了,但要上生產環境還需要進行高可用的方式來部署,本文說說在 CentOS7 中 Redis 高可用的部署以及在 dotNetCore 中怎樣調用。
環境
CentOS:7.5
Redis:5.0.7
dotNetCore:3.0
CSRedisCore:3.3.0
Redis部署的幾種方式
單機版:用于開發或測試環境
主從模式:主從模式提供了一種備份的機制,主庫可以進行讀寫操作,從庫只能進行讀操作,當主庫掛了,需要手動將從庫設置為主庫,算不上真正的高可用
哨兵模式:哨兵模式基于主從模式,當主服務掛了后,哨兵服務可以從所有的從服務中選舉一個升級為主,可以繼續正常地對外提供服務
集群模式:主從(哨兵)模式的主庫和所有的從庫存儲的數據是一樣的,寫數據依然是只能從主庫寫。集群模式主要解決的是高并發的問題,可以橫向擴展,數據分攤在不同節點中。
CentOS 部署 Redis
單機部署
1、執行下面命令安裝 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?#編輯配置文件編輯內容如下
daemonize?yes?#修改配置文件中的daemonize為yes,為后臺啟動 redis-server?redis.conf?#根據修改后到配置文件啟動redis5、檢查并連接
ps?-ef?|?grep?redis?#檢查是否啟動成功 redis-cli?#連接到redis,默認會連接6379的默認端口6、設置密碼
vi?redis.conf?#編輯配置文件進行密碼設置修改文件內容,去掉requirepass前面的#號
requirepass?Aa123456 redis-server?redis.conf?#修改完配置文件,重啟redis配置主從(哨兵模式)
正式的生產環境會使用多臺服務器來配置主從,本文為了演示,在一臺服務器上通過多端口的方式來配置主從,端口分配規則如下:
master:6380
slave1:6382
slave2:6383
slave3:6383
sentinel1:26379
sentinel2:26380
1、在 /usr/local/ 目錄中創建 config 目錄,在該目錄中創建相應的目錄存放配置文件和數據
cd?/usr/local mkdir?config??#創建config目錄 cd?config mkdir?master-6380?#創建master-6380目錄 cd?master-6380 mkdir?data?#創建data目錄用來存放數據 cp?/usr/local/redis-5.0.7/redis.conf?.?#將配置文件復制到當前目錄 cd?..?#回退到config目錄 cp?-r?master-6380/?slave-6381? cp?-r?master-6380/?slave-6382 cp?-r?master-6380/?slave-6383mkdir?sentinel-26379??#創建哨兵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創建完成后目錄結構如下:
2、配置 master 的 redis.conf 文件
bind?172.16.0.13?#修改成自己的IP地址 port?6380?#主服務器的端口號 daemonize?yes?#設置后臺啟動 pidfile?/var/run/redis_6380.pid?#redis?后臺啟動的時候會在/var/run/默認生成一個pid文件 protected-mode?no?#保護模式關閉 dir?/usr/local/config/master-6380/data?#數據保存目錄3、配置 slave 的 redis.conf 文件
bind?172.16.0.13?#修改成自己的IP地址 port?6381?#從服務器的端口號 daemonize?yes?#設置后臺啟動 pidfile?/var/run/redis_6381.pid? protected-mode?no?#保護模式關閉 dir?/usr/local/config/slave-6381/data?#數據保存目錄 slaveof?172.16.0.13?6380?#主服務器的IP?主服務器端口號注意 :slaveof 默認在配置文件中是沒有的,需要新添加
4、將端口 6382、6383 對應的從服務器的配置文件對照第三步進行修改
5、配置哨兵1的配置文件
port?26379??#指定哨兵1端口號 daemonize?yes?#設置后臺啟動 protected-mode?no?#關閉保護模式 sentinel?monitor?mymaster?172.16.0.13?6380?2?#監聽主的端口,后面的數字2為哨兵的個數 logfile?"/usr/local/config/sentinel-26379/sentinel-26379.log" dir?"/usr/local/config/sentinel-26379/data"6、配置哨兵1的配置文件
port?26380??#指定哨兵2端口號 daemonize?yes?#設置后臺啟動 protected-mode?no?#關閉保護模式 sentinel?monitor?mymaster?172.16.0.13?6380?2?#監聽主的端口,后面的數字2為哨兵的個數 logfile?"/usr/local/config/sentinel-26380/sentinel-26380.log" dir?"/usr/local/config/sentinel-26380/data"注意 :mymaster為主的名稱,默認為mymaster,如果要修改,該配置文件中所有涉及的地方都需要調整。
7、啟動服務
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、查看主從狀態
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??#查看狀態,如下圖:可以看出 6381 的從庫已經升級為主庫,這時將 6380 啟動起來,查看服務器狀態,可以發現 6380 已經變成從庫,說明哨兵在正常工作。
dotNET Core 中連接 Redis
1、在 VS 中創建示例項目,引用 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 下載。
希望本文對您有所幫助。
總結
以上是生活随笔為你收集整理的dotNetCore操作Redis(含CentOS7哨兵模式部署)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【敏捷案例】老板太外行,朝令夕改!要不要
- 下一篇: 程序员过关斩将--自定义线程池来实现文档