Redis部署手記之主從模式

一、Redis主從模式
1.1簡介
在實際生產環境下,Redis 基本上是不可能部署成單機模式的。一般都需要部署 Redis 集羣實現高可用,以保障業務的穩定運行。
要想學會部署 Redis 集羣,那就先從 Redis 集羣中最簡單的主從模式做起。
在一些簡單小型的應用中,我們可能會看到類似於下圖的 Redis 部署架構。其中 Master 是主機,Slave 是從機,而這種架構方式就是所謂的一主多從:

在這裏插入圖片描述

在這種架構模式下,主機和從機的數據完全一致,主機支持數據的寫入和讀取等各項操作,而從機則只支持與主機數據的同步和讀取。也就是說,客戶端可以將數據寫入到主機,由主機自動將數據的寫入操作同步到從機。
主從模式很好的解決了數據備份問題,並且由於主從服務數據幾乎是一致的,因而可以將寫入數據的命令發送給主機執行,而讀取數據的命令發送給不同的從機執行,從而達到讀寫分離的目的。

1.2部署
下面介紹如何部署一個一主三從的主從模式。
爲了區分單機模式的部署位置,這裏拷貝一下 Redis 的目錄:

cp -r /usr/local/redis-4.0.11 /usr/local/redis-ms

接下來會基於/usr/local/redis-ms目錄部署主從模式。

由於每個 Redis 實例都是一個單獨的進程,所以需要在每個 Redis 實例啓動時爲其分配一個
獨立的配置文件就能使它們區分開來(同時由於本次是部署在同一臺機器,需爲每個實例指定不
同的服務端口)。
爲了在同一臺機器上部署一主三從的 Redis,準備以下四份配置文件:

角色 配置文件 服務端口
主機 redis-6379.conf 6379
從機 redis-6380.conf 6380
從機 redis-6381.conf 6381
從機 redis-6382.conf 6382

注:這四份配置文件均拷貝自 /usr/local/redis-ms/redis.conf ,拷貝到 /usr/local/redis-ms/ 目錄再修改即可。

主機 redis-6379.conf 配置文件內容如下:

bind 127.0.0.1                                # 正式部署請設爲合適的 IP
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
dir /tmp/redis-ms             # Redis 的工作目錄(若不存在需手建否則無法啓動),logfile 與 dbfilename 受其影響
logfile "6379.log"            # Redis 日誌名稱(默認不配置,表示輸出到 stdout),正式部署請設置爲合適的名稱
dbfilename dump-6379.rdb      # Redis 數據持久化時的存儲位置,正式部署請設置爲合適的名稱

從機 redis-6380.conf 配置文件內容如下:

bind 127.0.0.1              # 正式部署請設爲合適的 IP
port 6380
daemonize yes
pidfile /var/run/redis_6380.pid
dir /tmp/redis-ms           # Redis 的工作目錄(若不存在需手建否則無法啓動),logfile 與 dbfilename 受其影響
logfile "6380.log"          # Redis 日誌名稱(默認不配置,表示輸出到 stdout),正式部署請設置爲合適的名稱
dbfilename dump-6380.rdb    # Redis 數據持久化時的存儲位置,正式部署請設置爲合適的名稱
slaveof 127.0.0.1 6379      # 標註所從屬的主機

從機 redis-6381.conf 配置文件內容如下:

bind 127.0.0.1              # 正式部署請設爲合適的 IP
port 6381
daemonize yes
pidfile /var/run/redis_6381.pid
dir /tmp/redis-ms           # Redis 的工作目錄(若不存在需手建否則無法啓動),logfile 與 dbfilename 受其影響
logfile "6381.log"          # Redis 日誌名稱(默認不配置,表示輸出到 stdout),正式部署請設置爲合適的名稱
dbfilename dump-6381.rdb    # Redis 數據持久化時的存儲位置,正式部署請設置爲合適的名稱
slaveof 127.0.0.1 6379      # 標註所從屬的主機

從機 redis-6382.conf 配置文件內容如下:

bind 127.0.0.1              # 正式部署請設爲合適的 IP
port 6382
daemonize yes
pidfile /var/run/redis_6382.pid
dir /tmp/redis-ms           # Redis 的工作目錄(若不存在需手建否則無法啓動),logfile 與 dbfilename 受其影響
logfile "6382.log"          # Redis 日誌名稱(默認不配置,表示輸出到 stdout),正式部署請設置爲合適的名稱
dbfilename dump-6382.rdb    # Redis 數據持久化時的存儲位置,正式部署請設置爲合適的名稱
slaveof 127.0.0.1 6379      # 標註所從屬的主機

建上面配置的 Redis 工作目錄:

#mkdir /tmp/redis-ms

然後使用 redis-server 命令啓動 Redis 主從實例:

#cd /usr/local/redis-ms/src/        # 切換到啓動腳本目錄
./redis-server ../redis-6379.conf   # 啓動 Redis 主機,必須先啓動
./redis-server ../redis-6380.conf   # 啓動 Redis 從機
./redis-server ../redis-6381.conf   # 啓動 Redis 從機
./redis-server ../redis-6382.conf   # 啓動 Redis 從機

在這裏插入圖片描述
1.3測試
現在測試 Redis 主從模式是否能正常工作
可先通過ps -ef|grep redis命令可查看四個主從進程是否正常啓動:

root       7049      1  0 21:21 ?        00:00:00 ./redis-server 127.0.0.1:6379
root       7057      1  0 21:21 ?        00:00:00 ./redis-server 127.0.0.1:6380
root       7065      1  0 21:21 ?        00:00:00 ./redis-server 127.0.0.1:6381
root       7081      1  0 21:21 ?        00:00:00 ./redis-server 127.0.0.1:6382

然後通過 Redis 測試客戶端命令redis-cli分別連接到四臺機器:

#cd /usr/local/redis-ms/src/         # 切換到啓動腳本目錄
./redis-cli -h 127.0.0.1 -p 6379     # 連接到 Redis 主機
./redis-cli -h 127.0.0.1 -p 6380     # 連接到 Redis 從機
./redis-cli -h 127.0.0.1 -p 6381     # 連接到 Redis 從機
./redis-cli -h 127.0.0.1 -p 6382     # 連接到 Redis 從機

分別在四個 Redis 測試客戶端執行get命令,獲取鍵名爲name的數據:

127.0.0.1:6379> get name
(nil)                               # 由於是新部署的Redis主從模式,該鍵值必定不存在
127.0.0.1:6380> get name
(nil)                               # 由於是新部署的Redis主從模式,該鍵值必定不存在
127.0.0.1:6381> get name     
(nil)                               # 由於是新部署的Redis主從模式,該鍵值必定不存在
 127.0.0.1:6382> get name     
(nil)                               # 由於是新部署的Redis主從模式,該鍵值必定不存在

現在在 Redis 主機 6379 的客戶端寫入數據(執行set 命令,爲鍵 name設置數據):

127.0.0.1:6379> set name jingjing
OK

再在三臺 Redis 從機 6380~6382 的客戶端讀取數據(執行 get 命令,獲取鍵名爲 site 的數據)。
由於經過主從數據同步,此時三臺從機都能取到值:

127.0.0.1:6380> get name
"jingjing"
127.0.0.1:6381> get name
"jingjing"
127.0.0.1:6382> get name
"jingjing"

在這裏插入圖片描述
至此 Redis 主從模式部署完成。
下次將介紹哨兵模式的部署,而哨兵模式是基於主從模式的,所以可以暫且不用停止 Redis 進程,下篇見!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章