Redis三種集群搭建配置(主從集群、哨兵集群、分片集群)
本章是基于CentOS7
下的Redis集群教程,包括:
- 單機(jī)安裝Redis
- Redis主從
- Redis分片集群
1.單機(jī)安裝Redis
首先需要安裝Redis所需要的依賴:
yum install -y gcc tcl
然后將Redis安裝包上傳到虛擬機(jī)的任意目錄:
例如,我放到了/tmp目錄:
解壓縮:
tar -xzf redis-6.2.4.tar.gz
解壓后:
進(jìn)入redis目錄:
cd redis-6.2.4
運(yùn)行編譯命令:
make && make install
如果沒(méi)有出錯(cuò),應(yīng)該就安裝成功了。
然后修改redis.conf
文件中的一些配置:
# 綁定地址,默認(rèn)是127.0.0.1,會(huì)導(dǎo)致只能在本地訪問(wèn)。修改為0.0.0.0則可以在任意IP訪問(wèn) bind 0.0.0.0 # 保護(hù)模式,關(guān)閉保護(hù)模式 protected-mode no # 數(shù)據(jù)庫(kù)數(shù)量,設(shè)置為1 databases 1
啟動(dòng)Redis:
redis-server redis.conf
停止redis服務(wù):
redis-cli shutdown
2.Redis主從集群
2.1.集群結(jié)構(gòu)
我們搭建的主從集群結(jié)構(gòu)如圖:
共包含三個(gè)節(jié)點(diǎn),一個(gè)主節(jié)點(diǎn),兩個(gè)從節(jié)點(diǎn)。
這里我們會(huì)在同一臺(tái)虛擬機(jī)中開(kāi)啟3個(gè)redis實(shí)例,模擬主從集群,信息如下:
IP | PORT | 角色 |
---|---|---|
192.168.150.101 | 7001 | master |
192.168.150.101 | 7002 | slave |
192.168.150.101 | 7003 | slave |
2.2.準(zhǔn)備實(shí)例和配置
要在同一臺(tái)虛擬機(jī)開(kāi)啟3個(gè)實(shí)例,必須準(zhǔn)備三份不同的配置文件和目錄,配置文件所在目錄也就是工作目錄。
1)創(chuàng)建目錄
我們創(chuàng)建三個(gè)文件夾,名字分別叫7001
、7002
、7003
:
# 進(jìn)入/tmp目錄 cd /tmp # 創(chuàng)建目錄 mkdir 7001 7002 7003
如圖:
2)恢復(fù)原始配置
修改redis-6.2.4/redis.conf
文件,將其中的持久化模式改為默認(rèn)的RDB模式,AOF保持關(guān)閉狀態(tài)。
# 開(kāi)啟RDB # save "" save 3600 1 save 300 100 save 60 10000 # 關(guān)閉AOF appendonly no
3)拷貝配置文件到每個(gè)實(shí)例目錄
然后將redis-6.2.4/redis.conf
文件拷貝到三個(gè)目錄中(在/tmp
目錄執(zhí)行下列命令):
# 方式一:逐個(gè)拷貝 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)修改每個(gè)實(shí)例的端口、工作目錄
修改每個(gè)文件夾內(nèi)的配置文件,將端口分別修改為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)修改每個(gè)實(shí)例的聲明IP
虛擬機(jī)本身有多個(gè)IP,為了避免將來(lái)混亂,我們需要在redis.conf
文件中指定每一個(gè)實(shí)例的綁定ip信息,格式如下:
# redis實(shí)例的聲明 IP replica-announce-ip 192.168.150.101
每個(gè)目錄都要改,我們一鍵完成修改(在/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.啟動(dòng)
為了方便查看日志,我們打開(kāi)3個(gè)ssh
窗口,分別啟動(dòng)3個(gè)redis
實(shí)例,啟動(dòng)命令:
# 第1個(gè) redis-server 7001/redis.conf # 第2個(gè) redis-server 7002/redis.conf # 第3個(gè) redis-server 7003/redis.conf
啟動(dòng)后:
如果要一鍵停止,可以運(yùn)行下面命令:
printf '%s\n' 7001 7002 7003 | xargs -I{} -t redis-cli -p {} shutdown
2.4.開(kāi)啟主從關(guān)系
現(xiàn)在三個(gè)實(shí)例還沒(méi)有任何關(guān)系,要配置主從可以使用replicaof
或者slaveof
(5.0以前)命令。
有臨時(shí)和永久兩種模式:
修改配置文件(永久生效)
- 在
redis.conf
中添加一行配置:slaveof <masterip> <masterport>
- 在
使用
redis-cli
客戶端連接到redis服務(wù),執(zhí)行slaveof
命令(重啟后失效):slaveof <masterip> <masterport>
注意:在5.0以后新增命令replicaof,與salveof效果一致。
這里我們?yōu)榱搜菔痉奖?,使用方式二?/p>
通過(guò)redis-cli
命令連接7002
,執(zhí)行下面命令:
# 連接 7002 redis-cli -p 7002 # 執(zhí)行slaveof slaveof 192.168.150.101 7001
通過(guò)redis-cli
命令連接7003
,執(zhí)行下面命令:
# 連接 7003 redis-cli -p 7003 # 執(zhí)行slaveof slaveof 192.168.150.101 7001
然后連接 7001
節(jié)點(diǎn),查看集群狀態(tài):
# 連接 7001 redis-cli -p 7001 # 查看狀態(tài) info replication
結(jié)果:
2.5.測(cè)試
執(zhí)行下列操作以測(cè)試:
利用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這個(gè)master節(jié)點(diǎn)上可以執(zhí)行寫(xiě)操作,7002和7003這兩個(gè)slave節(jié)點(diǎn)只能執(zhí)行讀操作。
3.搭建哨兵集群
3.1.集群結(jié)構(gòu)
這里我們搭建一個(gè)三節(jié)點(diǎn)形成的Sentinel集群,來(lái)監(jiān)管之前的Redis主從集群。如圖:
三個(gè)sentinel
實(shí)例信息如下:
節(jié)點(diǎn) | IP | PORT |
---|---|---|
s1 | 192.168.150.101 | 27001 |
s2 | 192.168.150.101 | 27002 |
s3 | 192.168.150.101 | 27003 |
3.2.準(zhǔn)備實(shí)例和配置
要在同一臺(tái)虛擬機(jī)開(kāi)啟3個(gè)實(shí)例,必須準(zhǔn)備三份不同的配置文件和目錄,配置文件所在目錄也就是工作目錄。
我們創(chuàng)建三個(gè)文件夾,名字分別叫s1、s2、s3
:
# 進(jìn)入/tmp目錄 cd /tmp # 創(chuàng)建目錄 mkdir s1 s2 s3
如圖:
然后我們?cè)趕1目錄創(chuàng)建一個(gè)sentinel.conf
文件,添加下面的內(nèi)容:
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
:是當(dāng)前sentinel實(shí)例的端口sentinel monitor mymaster 192.168.150.101 7001 2
:指定主節(jié)點(diǎn)信息mymaster
:主節(jié)點(diǎn)名稱,自定義,任意寫(xiě)192.168.150.101 7001
:主節(jié)點(diǎn)的ip和端口2
:選舉master時(shí)的quorum值
然后將s1/sentinel.conf
文件拷貝到s2、s3
兩個(gè)目錄中(在/tmp目錄執(zhí)行下列命令):
# 方式一:逐個(gè)拷貝 cp s1/sentinel.conf s2 cp s1/sentinel.conf s3 # 方式二:管道組合命令,一鍵拷貝 echo s2 s3 | xargs -t -n 1 cp s1/sentinel.conf
修改s2、s3
兩個(gè)文件夾內(nèi)的配置文件,將端口分別修改為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.啟動(dòng)
為了方便查看日志,我們打開(kāi)3個(gè)ssh
窗口,分別啟動(dòng)3個(gè)redis實(shí)例,啟動(dòng)命令:
# 第1個(gè) redis-sentinel s1/sentinel.conf # 第2個(gè) redis-sentinel s2/sentinel.conf # 第3個(gè) redis-sentinel s3/sentinel.conf
啟動(dòng)后:
3.4.測(cè)試
嘗試讓master
節(jié)點(diǎn)7001
宕機(jī),查看sentinel
日志:
查看7003
的日志:
查看7002
的日志:
4.搭建分片集群
4.1.集群結(jié)構(gòu)
分片集群需要的節(jié)點(diǎn)數(shù)量較多,這里我們搭建一個(gè)最小的分片集群,包含3個(gè)master
節(jié)點(diǎn),每個(gè)master
包含一個(gè)slave
節(jié)點(diǎn),結(jié)構(gòu)如下:
這里我們會(huì)在同一臺(tái)虛擬機(jī)中開(kāi)啟6個(gè)redis實(shí)例,模擬分片集群,信息如下:
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.準(zhǔn)備實(shí)例和配置
刪除之前的7001、7002、7003
這幾個(gè)目錄,重新創(chuàng)建出7001、7002、7003、8001、8002、8003
目錄:
# 進(jìn)入/tmp目錄 cd /tmp # 刪除舊的,避免配置干擾 rm -rf 7001 7002 7003 # 創(chuàng)建目錄 mkdir 7001 7002 7003 8001 8002 8003
在/tmp
下準(zhǔn)備一個(gè)新的redis.conf
文件,內(nèi)容如下:
port 6379 # 開(kāi)啟集群功能 cluster-enabled yes # 集群的配置文件名稱,不需要我們創(chuàng)建,由redis自己維護(hù) cluster-config-file /tmp/6379/nodes.conf # 節(jié)點(diǎn)心跳失敗的超時(shí)時(shí)間 cluster-node-timeout 5000 # 持久化文件存放目錄 dir /tmp/6379 # 綁定地址 bind 0.0.0.0 # 讓redis后臺(tái)運(yùn)行 daemonize yes # 注冊(cè)的實(shí)例ip replica-announce-ip 192.168.150.101 # 保護(hù)模式 protected-mode no # 數(shù)據(jù)庫(kù)數(shù)量 databases 1 # 日志 logfile /tmp/6379/run.log
將這個(gè)文件拷貝到每個(gè)目錄下:
# 進(jìn)入/tmp目錄 cd /tmp # 執(zhí)行拷貝 echo 7001 7002 7003 8001 8002 8003 | xargs -t -n 1 cp redis.conf
修改每個(gè)目錄下的redis.conf
,將其中的6379
修改為與所在目錄一致:
# 進(jìn)入/tmp目錄 cd /tmp # 修改配置文件 printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t sed -i 's/6379/{}/g' {}/redis.conf
4.3.啟動(dòng)
因?yàn)橐呀?jīng)配置了后臺(tái)啟動(dòng)模式,所以可以直接啟動(dòng)服務(wù):
# 進(jìn)入/tmp目錄 cd /tmp # 一鍵啟動(dòng)所有服務(wù) printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t redis-server {}/redis.conf
通過(guò)ps
查看狀態(tài):
ps -ef | grep redis
發(fā)現(xiàn)服務(wù)都已經(jīng)正常啟動(dòng):
如果要關(guān)閉所有進(jìn)程,可以執(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)建集群
雖然服務(wù)啟動(dòng)了,但是目前每個(gè)服務(wù)之間都是獨(dú)立的,沒(méi)有任何關(guān)聯(lián)。
我們需要執(zhí)行命令來(lái)創(chuàng)建集群,在Redis5.0
之前創(chuàng)建集群比較麻煩,5.0
之后集群管理命令都集成到了redis-cli
中。
1)Redis5.0之前
Redis5.0之前集群命令都是用redis安裝包下的src/redis-trib.rb來(lái)實(shí)現(xiàn)的。因?yàn)?code>redis-trib.rb是有ruby
語(yǔ)言編寫(xiě)的所以需要安裝ruby環(huán)境。
# 安裝依賴 yum -y install zlib ruby rubygems gem install redis
然后通過(guò)命令來(lái)管理集群:
# 進(jìn)入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
命令說(shuō)明:
redis-cli --cluster
或者./redis-trib.rb
:代表集群操作命令create
:代表是創(chuàng)建集群--replicas 1
或者--cluster-replicas 1
:指定集群中每個(gè)master的副本個(gè)數(shù)為1,此時(shí)節(jié)點(diǎn)總數(shù) ÷ (replicas + 1)
得到的就是master的數(shù)量。因此節(jié)點(diǎn)列表中的前n個(gè)就是master,其它節(jié)點(diǎn)都是slave節(jié)點(diǎn),隨機(jī)分配到不同master
運(yùn)行后的樣子:
這里輸入yes
,則集群開(kāi)始創(chuàng)建:
通過(guò)命令可以查看集群狀態(tài):
redis-cli -p 7001 cluster nodes
4.5.測(cè)試
嘗試連接7001
節(jié)點(diǎn),存儲(chǔ)一個(gè)數(shù)據(jù):
# 連接 redis-cli -p 7001 # 存儲(chǔ)數(shù)據(jù) set num 123 # 讀取數(shù)據(jù) get num # 再次存儲(chǔ) set a 1
結(jié)果悲劇了:
集群操作時(shí),需要給redis-cli
加上-c
參數(shù)才可以:
redis-cli -c -p 7001
這次可以了:
到此這篇關(guān)于Redis三種集群搭建配置(主從集群、哨兵集群、分片集群)的文章就介紹到這了,更多相關(guān)Redis 集群搭建配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis使用布隆過(guò)濾器解決緩存雪崩的問(wèn)題
布隆過(guò)濾器可以幫助我們解決Redis緩存雪崩的問(wèn)題,那什么是布隆過(guò)濾器、布隆過(guò)濾器又是如何使用如何解決緩存雪崩的問(wèn)題的,讓我們帶著這一系列的問(wèn)題去詳細(xì)了解布隆過(guò)濾器,感興趣的小伙伴跟著小編一起來(lái)看看吧2024-02-02redis解決高并發(fā)看門(mén)狗策略的實(shí)現(xiàn)
本文主要介紹了redis解決高并發(fā)看門(mén)狗策略的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02Redis Sentinel實(shí)現(xiàn)哨兵模式搭建小結(jié)
這篇文章主要介紹了Redis Sentinel實(shí)現(xiàn)哨兵模式搭建小結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12Redis的Python客戶端redis-py安裝使用說(shuō)明文檔
這篇文章主要介紹了Redis的Python客戶端redis-py安裝使用說(shuō)明文檔,本文講解了安裝方法、入門(mén)使用實(shí)例、API參考和詳細(xì)說(shuō)明,需要的朋友可以參考下2015-06-06Windows系統(tǒng)一鍵啟動(dòng)Redis腳本
本文介紹了在Windows系統(tǒng)中創(chuàng)建一鍵啟動(dòng)Redis的腳本,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12Redis客戶端連接遠(yuǎn)程Redis服務(wù)器方式
這篇文章主要介紹了Redis客戶端連接遠(yuǎn)程Redis服務(wù)器方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06