天天看點

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 wget
           

2、安裝 gcc ,編譯和安裝 Redis 時需要

yum -y install gcc
           

3、下載下傳 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 #根據修改後到配置檔案啟動redis
           

5、檢查并連接配接

ps -ef | grep redis #檢查是否啟動成功
           
dotNetCore操作Redis(含CentOS7哨兵模式部署)
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-6383

mkdir 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
           

建立完成後目錄結構如下:

dotNetCore操作Redis(含CentOS7哨兵模式部署)

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指令檢視資訊,如下圖
           
dotNetCore操作Redis(含CentOS7哨兵模式部署)

9、測試哨兵是否正常工作

redis-cli -h 172.16.0.13 -p 6380 #連接配接到主庫
>shutdown  #停掉主庫
>quit  #退出

redis-cli -h 172.16.0.13 -p 6381 #連接配接到其中一個從庫
>info  #檢視狀态,如下圖:
           
dotNetCore操作Redis(含CentOS7哨兵模式部署)

可以看出 6381 的從庫已經更新為主庫,這時将 6380 啟動起來,檢視伺服器狀态,可以發現 6380 已經變成從庫,說明哨兵在正常工作。

dotNetCore操作Redis(含CentOS7哨兵模式部署)

dotNET Core 中連接配接 Redis

1、在 VS 中建立示例項目,引用 CSRedisCore 的 NuGet 包,如下圖:

dotNetCore操作Redis(含CentOS7哨兵模式部署)

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哨兵模式部署)

微信公衆号:不止dotNET

作者: oec2003

出處: http://oec2003.cnblogs.com/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連結,否則 保留追究法律責任的權利。

繼續閱讀