Redis三種集群搭建配置(主從集群、哨兵集群、分片集群)
本章是基于CentOS7下的Redis集群教程,包括:
- 單機安裝Redis
- Redis主從
- Redis分片集群
1.單機安裝Redis
首先需要安裝Redis所需要的依賴:
yum install -y gcc tcl
然后將Redis安裝包上傳到虛擬機的任意目錄:

例如,我放到了/tmp目錄:

解壓縮:
tar -xzf redis-6.2.4.tar.gz
解壓后:

進入redis目錄:
cd redis-6.2.4
運行編譯命令:
make && make install
如果沒有出錯,應該就安裝成功了。
然后修改redis.conf文件中的一些配置:
# 綁定地址,默認是127.0.0.1,會導致只能在本地訪問。修改為0.0.0.0則可以在任意IP訪問 bind 0.0.0.0 # 保護模式,關閉保護模式 protected-mode no # 數(shù)據(jù)庫數(shù)量,設置為1 databases 1
啟動Redis:
redis-server redis.conf
停止redis服務:
redis-cli shutdown
2.Redis主從集群
2.1.集群結構
我們搭建的主從集群結構如圖:

共包含三個節(jié)點,一個主節(jié)點,兩個從節(jié)點。
這里我們會在同一臺虛擬機中開啟3個redis實例,模擬主從集群,信息如下:
| IP | PORT | 角色 |
|---|---|---|
| 192.168.150.101 | 7001 | master |
| 192.168.150.101 | 7002 | slave |
| 192.168.150.101 | 7003 | slave |
2.2.準備實例和配置
要在同一臺虛擬機開啟3個實例,必須準備三份不同的配置文件和目錄,配置文件所在目錄也就是工作目錄。
1)創(chuàng)建目錄
我們創(chuàng)建三個文件夾,名字分別叫7001、7002、7003:
# 進入/tmp目錄 cd /tmp # 創(chuàng)建目錄 mkdir 7001 7002 7003
如圖:

2)恢復原始配置
修改redis-6.2.4/redis.conf文件,將其中的持久化模式改為默認的RDB模式,AOF保持關閉狀態(tài)。
# 開啟RDB # save "" save 3600 1 save 300 100 save 60 10000 # 關閉AOF appendonly no
3)拷貝配置文件到每個實例目錄
然后將redis-6.2.4/redis.conf文件拷貝到三個目錄中(在/tmp目錄執(zhí)行下列命令):
# 方式一:逐個拷貝 cp redis-6.2.4/redis.conf 7001 cp redis-6.2.4/redis.conf 7002 cp redis-6.2.4/redis.conf 7003 # 方式二:管道組合命令,一鍵拷貝 echo 7001 7002 7003 | xargs -t -n 1 cp redis-6.2.4/redis.conf
4)修改每個實例的端口、工作目錄
修改每個文件夾內的配置文件,將端口分別修改為7001、7002、7003,將rdb文件保存位置都修改為自己所在目錄(在/tmp目錄執(zhí)行下列命令):
sed -i -e 's/6379/7001/g' -e 's/dir .\//dir \/tmp\/7001\//g' 7001/redis.conf sed -i -e 's/6379/7002/g' -e 's/dir .\//dir \/tmp\/7002\//g' 7002/redis.conf sed -i -e 's/6379/7003/g' -e 's/dir .\//dir \/tmp\/7003\//g' 7003/redis.conf
5)修改每個實例的聲明IP
虛擬機本身有多個IP,為了避免將來混亂,我們需要在redis.conf文件中指定每一個實例的綁定ip信息,格式如下:
# redis實例的聲明 IP replica-announce-ip 192.168.150.101
每個目錄都要改,我們一鍵完成修改(在/tmp目錄執(zhí)行下列命令):
# 逐一執(zhí)行
sed -i '1a replica-announce-ip 192.168.150.101' 7001/redis.conf
sed -i '1a replica-announce-ip 192.168.150.101' 7002/redis.conf
sed -i '1a replica-announce-ip 192.168.150.101' 7003/redis.conf
# 或者一鍵修改
printf '%s\n' 7001 7002 7003 | xargs -I{} -t sed -i '1a replica-announce-ip 192.168.150.101' {}/redis.conf
2.3.啟動
為了方便查看日志,我們打開3個ssh窗口,分別啟動3個redis實例,啟動命令:
# 第1個 redis-server 7001/redis.conf # 第2個 redis-server 7002/redis.conf # 第3個 redis-server 7003/redis.conf
啟動后:

如果要一鍵停止,可以運行下面命令:
printf '%s\n' 7001 7002 7003 | xargs -I{} -t redis-cli -p {} shutdown
2.4.開啟主從關系
現(xiàn)在三個實例還沒有任何關系,要配置主從可以使用replicaof 或者slaveof(5.0以前)命令。
有臨時和永久兩種模式:
修改配置文件(永久生效)
- 在
redis.conf中添加一行配置:slaveof <masterip> <masterport>
- 在
使用
redis-cli客戶端連接到redis服務,執(zhí)行slaveof命令(重啟后失效):slaveof <masterip> <masterport>
注意:在5.0以后新增命令replicaof,與salveof效果一致。
這里我們?yōu)榱搜菔痉奖?,使用方式二?/p>
通過redis-cli命令連接7002,執(zhí)行下面命令:
# 連接 7002 redis-cli -p 7002 # 執(zhí)行slaveof slaveof 192.168.150.101 7001
通過redis-cli命令連接7003,執(zhí)行下面命令:
# 連接 7003 redis-cli -p 7003 # 執(zhí)行slaveof slaveof 192.168.150.101 7001
然后連接 7001節(jié)點,查看集群狀態(tài):
# 連接 7001 redis-cli -p 7001 # 查看狀態(tài) info replication
結果:

2.5.測試
執(zhí)行下列操作以測試:
利用redis-cli連接7001,執(zhí)行
set num 123利用redis-cli連接7002,執(zhí)行
get num,再執(zhí)行set num 666利用redis-cli連接7003,執(zhí)行
get num,再執(zhí)行set num 888
可以發(fā)現(xiàn),只有在7001這個master節(jié)點上可以執(zhí)行寫操作,7002和7003這兩個slave節(jié)點只能執(zhí)行讀操作。
3.搭建哨兵集群
3.1.集群結構
這里我們搭建一個三節(jié)點形成的Sentinel集群,來監(jiān)管之前的Redis主從集群。如圖:

三個sentinel實例信息如下:
| 節(jié)點 | IP | PORT |
|---|---|---|
| s1 | 192.168.150.101 | 27001 |
| s2 | 192.168.150.101 | 27002 |
| s3 | 192.168.150.101 | 27003 |
3.2.準備實例和配置
要在同一臺虛擬機開啟3個實例,必須準備三份不同的配置文件和目錄,配置文件所在目錄也就是工作目錄。
我們創(chuàng)建三個文件夾,名字分別叫s1、s2、s3:
# 進入/tmp目錄 cd /tmp # 創(chuàng)建目錄 mkdir s1 s2 s3
如圖:

然后我們在s1目錄創(chuàng)建一個sentinel.conf文件,添加下面的內容:
port 27001 sentinel announce-ip 192.168.150.101 sentinel monitor mymaster 192.168.150.101 7001 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000 dir "/tmp/s1"
解讀:
port 27001:是當前sentinel實例的端口sentinel monitor mymaster 192.168.150.101 7001 2:指定主節(jié)點信息mymaster:主節(jié)點名稱,自定義,任意寫192.168.150.101 7001:主節(jié)點的ip和端口2:選舉master時的quorum值
然后將s1/sentinel.conf文件拷貝到s2、s3兩個目錄中(在/tmp目錄執(zhí)行下列命令):
# 方式一:逐個拷貝 cp s1/sentinel.conf s2 cp s1/sentinel.conf s3 # 方式二:管道組合命令,一鍵拷貝 echo s2 s3 | xargs -t -n 1 cp s1/sentinel.conf
修改s2、s3兩個文件夾內的配置文件,將端口分別修改為27002、27003:
sed -i -e 's/27001/27002/g' -e 's/s1/s2/g' s2/sentinel.conf sed -i -e 's/27001/27003/g' -e 's/s1/s3/g' s3/sentinel.conf
3.3.啟動
為了方便查看日志,我們打開3個ssh窗口,分別啟動3個redis實例,啟動命令:
# 第1個 redis-sentinel s1/sentinel.conf # 第2個 redis-sentinel s2/sentinel.conf # 第3個 redis-sentinel s3/sentinel.conf
啟動后:

3.4.測試
嘗試讓master節(jié)點7001宕機,查看sentinel日志:

查看7003的日志:

查看7002的日志:

4.搭建分片集群
4.1.集群結構
分片集群需要的節(jié)點數(shù)量較多,這里我們搭建一個最小的分片集群,包含3個master節(jié)點,每個master包含一個slave節(jié)點,結構如下:

這里我們會在同一臺虛擬機中開啟6個redis實例,模擬分片集群,信息如下:
| IP | PORT | 角色 |
|---|---|---|
| 192.168.150.101 | 7001 | master |
| 192.168.150.101 | 7002 | master |
| 192.168.150.101 | 7003 | master |
| 192.168.150.101 | 8001 | slave |
| 192.168.150.101 | 8002 | slave |
| 192.168.150.101 | 8003 | slave |
4.2.準備實例和配置
刪除之前的7001、7002、7003這幾個目錄,重新創(chuàng)建出7001、7002、7003、8001、8002、8003目錄:
# 進入/tmp目錄 cd /tmp # 刪除舊的,避免配置干擾 rm -rf 7001 7002 7003 # 創(chuàng)建目錄 mkdir 7001 7002 7003 8001 8002 8003
在/tmp下準備一個新的redis.conf文件,內容如下:
port 6379 # 開啟集群功能 cluster-enabled yes # 集群的配置文件名稱,不需要我們創(chuàng)建,由redis自己維護 cluster-config-file /tmp/6379/nodes.conf # 節(jié)點心跳失敗的超時時間 cluster-node-timeout 5000 # 持久化文件存放目錄 dir /tmp/6379 # 綁定地址 bind 0.0.0.0 # 讓redis后臺運行 daemonize yes # 注冊的實例ip replica-announce-ip 192.168.150.101 # 保護模式 protected-mode no # 數(shù)據(jù)庫數(shù)量 databases 1 # 日志 logfile /tmp/6379/run.log
將這個文件拷貝到每個目錄下:
# 進入/tmp目錄 cd /tmp # 執(zhí)行拷貝 echo 7001 7002 7003 8001 8002 8003 | xargs -t -n 1 cp redis.conf
修改每個目錄下的redis.conf,將其中的6379修改為與所在目錄一致:
# 進入/tmp目錄
cd /tmp
# 修改配置文件
printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t sed -i 's/6379/{}/g' {}/redis.conf
4.3.啟動
因為已經(jīng)配置了后臺啟動模式,所以可以直接啟動服務:
# 進入/tmp目錄
cd /tmp
# 一鍵啟動所有服務
printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t redis-server {}/redis.conf
通過ps查看狀態(tài):
ps -ef | grep redis
發(fā)現(xiàn)服務都已經(jīng)正常啟動:

如果要關閉所有進程,可以執(zhí)行命令:
ps -ef | grep redis | awk '{print $2}' | xargs kill
或者(推薦這種方式):
printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t redis-cli -p {} shutdown
4.4.創(chuàng)建集群
雖然服務啟動了,但是目前每個服務之間都是獨立的,沒有任何關聯(lián)。
我們需要執(zhí)行命令來創(chuàng)建集群,在Redis5.0之前創(chuàng)建集群比較麻煩,5.0之后集群管理命令都集成到了redis-cli中。
1)Redis5.0之前
Redis5.0之前集群命令都是用redis安裝包下的src/redis-trib.rb來實現(xiàn)的。因為redis-trib.rb是有ruby語言編寫的所以需要安裝ruby環(huán)境。
# 安裝依賴 yum -y install zlib ruby rubygems gem install redis
然后通過命令來管理集群:
# 進入redis的src目錄 cd /tmp/redis-6.2.4/src # 創(chuàng)建集群 ./redis-trib.rb create --replicas 1 192.168.150.101:7001 192.168.150.101:7002 192.168.150.101:7003 192.168.150.101:8001 192.168.150.101:8002 192.168.150.101:8003
2)Redis5.0以后
我們使用的是Redis6.2.4版本,集群管理以及集成到了redis-cli中,格式如下:
redis-cli --cluster create --cluster-replicas 1 192.168.150.101:7001 192.168.150.101:7002 192.168.150.101:7003 192.168.150.101:8001 192.168.150.101:8002 192.168.150.101:8003
命令說明:
redis-cli --cluster或者./redis-trib.rb:代表集群操作命令create:代表是創(chuàng)建集群--replicas 1或者--cluster-replicas 1:指定集群中每個master的副本個數(shù)為1,此時節(jié)點總數(shù) ÷ (replicas + 1)得到的就是master的數(shù)量。因此節(jié)點列表中的前n個就是master,其它節(jié)點都是slave節(jié)點,隨機分配到不同master
運行后的樣子:

這里輸入yes,則集群開始創(chuàng)建:

通過命令可以查看集群狀態(tài):
redis-cli -p 7001 cluster nodes

4.5.測試
嘗試連接7001節(jié)點,存儲一個數(shù)據(jù):
# 連接 redis-cli -p 7001 # 存儲數(shù)據(jù) set num 123 # 讀取數(shù)據(jù) get num # 再次存儲 set a 1
結果悲劇了:

集群操作時,需要給redis-cli加上-c參數(shù)才可以:
redis-cli -c -p 7001
這次可以了:

到此這篇關于Redis三種集群搭建配置(主從集群、哨兵集群、分片集群)的文章就介紹到這了,更多相關Redis 集群搭建配置內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Linux服務器使用Redis作為數(shù)據(jù)緩存并用log4j2進行日志記錄的過程分享
這篇文章主要介紹了Linux服務器使用Redis作為數(shù)據(jù)緩存并用log4j2日志記錄,關于SpringBoot項目配置Redis與log4j2是查詢官方文檔,本文中的Redis配置類、Redis工具類以及l(fā)og4j2.xml配置文件來自網(wǎng)絡,查證源自何處比較麻煩,所以在此感謝所有人的分享2023-09-09
Redis?Cluster?實現(xiàn)多key事務操作的示例
本文主要介紹了Redis?Cluster?實現(xiàn)多key事務操作,包括HashTag+Lua腳本、應用層分步操作+補償機制、異步隊列+冪等消費等方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2026-02-02
Redis bitmap 實現(xiàn)簽到案例(最新推薦)
這篇文章主要介紹了Redis bitmap 實現(xiàn)簽到案例,通過設計簽到功能對應的數(shù)據(jù)庫表,結合sql語句給大家講解的非常詳細,具體示例代碼跟隨小編一起看看吧2024-07-07

