Redis中群集三種模式的實(shí)現(xiàn)
1. Redis三種模式概述
? Redis群集有三種模式,分別是主從同步/復(fù)制、哨兵模式、Cluster,下面會(huì)講解一下三種模式的工作方式,以及如何搭建cluster群集
- 主從復(fù)制:主從復(fù)制是高可用Redis的基礎(chǔ),哨兵和集群都是在主從復(fù)制基礎(chǔ)上實(shí)現(xiàn)高可用的。主從復(fù)制主要實(shí)現(xiàn)了數(shù)據(jù)的多機(jī)備份,以及對(duì)于讀操作的負(fù)載均衡和簡(jiǎn)單的故障恢復(fù)。
缺陷:故障恢復(fù)無(wú)法自動(dòng)化;寫(xiě)操作無(wú)法負(fù)載均衡;存儲(chǔ)能力受到單機(jī)的限制。 - 哨兵:在主從復(fù)制的基礎(chǔ)上,哨兵實(shí)現(xiàn)了自動(dòng)化的故障恢復(fù)。
缺陷:寫(xiě)操作無(wú)法負(fù)載均衡;存儲(chǔ)能力受到單機(jī)的限制;哨兵無(wú)法對(duì)從節(jié)點(diǎn)進(jìn)行自動(dòng)故障轉(zhuǎn)移,在讀寫(xiě)分離場(chǎng)景下,從節(jié)點(diǎn)故障會(huì)導(dǎo)致讀服務(wù)不可用,需要對(duì)從節(jié)點(diǎn)做額外的監(jiān)控、切換操作。 - 集群:通過(guò)集群,Redis解決了寫(xiě)操作無(wú)法負(fù)載均衡,以及存儲(chǔ)能力受到單機(jī)限制的問(wèn)題,實(shí)現(xiàn)了較為完善的高可用方案。
2、Redis 主從復(fù)制
? 主從復(fù)制,是指將一臺(tái)Redis服務(wù)器的數(shù)據(jù),復(fù)制到其他的Redis服務(wù)器。前者稱(chēng)為主節(jié)點(diǎn)(Master),后者稱(chēng)為從節(jié)點(diǎn)(Slave);數(shù)據(jù)的復(fù)制是單向的,只能由主節(jié)點(diǎn)到從節(jié)點(diǎn)。
默認(rèn)情況下,每臺(tái)Redis服務(wù)器都是主節(jié)點(diǎn);且一個(gè)主節(jié)點(diǎn)可以有多個(gè)從節(jié)點(diǎn)(或沒(méi)有從節(jié)點(diǎn)),但一個(gè)從節(jié)點(diǎn)只能有一個(gè)主節(jié)點(diǎn)。
2.1 主從復(fù)制的作用
- 數(shù)據(jù)冗余:主從復(fù)制實(shí)現(xiàn)了數(shù)據(jù)的熱備份,是持久化之外的一種數(shù)據(jù)冗余方式。
- 故障恢復(fù):當(dāng)主節(jié)點(diǎn)出現(xiàn)問(wèn)題時(shí),可以由從節(jié)點(diǎn)提供服務(wù),實(shí)現(xiàn)快速的故障恢復(fù);實(shí)際上是一種服務(wù)的冗余。
- 負(fù)載均衡:在主從復(fù)制的基礎(chǔ)上,配合讀寫(xiě)分離,可以由主節(jié)點(diǎn)提供寫(xiě)服務(wù),由從節(jié)點(diǎn)提供讀服務(wù)(即寫(xiě)Redis數(shù)據(jù)時(shí)應(yīng)用連接主節(jié)點(diǎn),讀Redis數(shù)據(jù)時(shí)應(yīng)用連接從節(jié)點(diǎn)),分擔(dān)服務(wù)器負(fù)載;尤其是在寫(xiě)少讀多的場(chǎng)景下,通過(guò)多個(gè)從節(jié)點(diǎn)分擔(dān)讀負(fù)載,可以大大提高Redis服務(wù)器的并發(fā)量。
- 高可用基石:除了上述作用以外,主從復(fù)制還是哨兵和集群能夠?qū)嵤┑幕A(chǔ),因此說(shuō)主從復(fù)制是Redis高可用的基礎(chǔ)。
2.2 主從復(fù)制流程

(1)若啟動(dòng)一個(gè)Slave機(jī)器進(jìn)程,則它會(huì)向Master機(jī)器發(fā)送一個(gè)“sync command”命令,請(qǐng)求同步連接。
(2)無(wú)論是第一次連接還是重新連接,Master機(jī)器都會(huì)啟動(dòng)一個(gè)后臺(tái)進(jìn)程,將數(shù)據(jù)快照保存到數(shù)據(jù)文件中(執(zhí)行rdb操作),同時(shí)Master還會(huì)記錄修改數(shù)據(jù)的所有命令并緩存在數(shù)據(jù)文件中。
(3)后臺(tái)進(jìn)程完成緩存操作之后,Master機(jī)器就會(huì)向Slave機(jī)器發(fā)送數(shù)據(jù)文件,Slave端機(jī)器將數(shù)據(jù)文件保存到硬盤(pán)上,然后將其加載到內(nèi)存中,接著Master機(jī)器就會(huì)將修改數(shù)據(jù)的所有操作一并發(fā)送給Slave端機(jī)器。若Slave出現(xiàn)故障導(dǎo)致宕機(jī),則恢復(fù)正常后會(huì)自動(dòng)重新連接。
(4)Master機(jī)器收到Slave端機(jī)器的連接后,將其完整的數(shù)據(jù)文件發(fā)送給Slave端機(jī)器,如果Mater同時(shí)收到多個(gè)Slave發(fā)來(lái)的同步請(qǐng)求,則Master會(huì)在后臺(tái)啟動(dòng)一個(gè)進(jìn)程以保存數(shù)據(jù)文件,然后將其發(fā)送給所有的Slave端機(jī)器,確保所有的Slave端機(jī)器都正常。
2.3 搭建Redis 主從復(fù)制
1、搭建Redis 主從復(fù)制 ---------------------------------------- Master節(jié)點(diǎn): 192.168.10.23 Slave1節(jié)點(diǎn): 192.168.10.14 Slave2節(jié)點(diǎn): 192.168.10.15 systemctl stop firewalld setenforce 0 2、安裝 Redis ---------------------------- yum install -y gcc gcc-c++ make tar zxvf redis-5.0.7.tar.gz -C /opt/ wget -p /opt http://download.redis.io/releases/redis-5.0.7.tar.gz cd /opt/redis-5.0.7/ make make PREFIX=/usr/local/redis install cd /opt/redis-5.0.7/utils ./install_server.sh ...... Please select the redis executable path [/usr/local/bin/redis-server] /usr/local/redis/bin/redis-server ln -s /usr/local/redis/bin/* /usr/local/bin/ 3、修改 Redis 配置文件(Master節(jié)點(diǎn)操作) ----------------------------------------------- vim /etc/redis/6379.conf bind 0.0.0.0 #70行,修改監(jiān)聽(tīng)地址為0.0.0.0 daemonize yes #137行,開(kāi)啟守護(hù)進(jìn)程 logfile /var/log/redis_6379.log #172行,指定日志文件目錄 dir /var/lib/redis/6379 #264行,指定工作目錄 appendonly yes #700行,開(kāi)啟AOF持久化功能 /etc/init.d/redis_6379 restart 4、修改 Redis 配置文件(Slave節(jié)點(diǎn)操作) ----------------------------------------------------- vim /etc/redis/6379.conf bind 0.0.0.0 #70行,修改監(jiān)聽(tīng)地址為0.0.0.0 daemonize yes #137行,開(kāi)啟守護(hù)進(jìn)程 logfile /var/log/redis_6379.log #172行,指定日志文件目錄 dir /var/lib/redis/6379 #264行,指定工作目錄 #288行,指定要同步的Master節(jié)點(diǎn)IP和端口 replicaof 192.168.10.23 6379 appendonly yes #700行,開(kāi)啟AOF持久化功能 /etc/init.d/redis_6379 restart 5、驗(yàn)證主從效果 -------------------------------- 在Master節(jié)點(diǎn)上看日志: tail -f /var/log/redis_6379.log Replica 192.168.10.14:6379 asks for synchronization Replica 192.168.10.15:6379 asks for synchronization 在Master節(jié)點(diǎn)上驗(yàn)證從節(jié)點(diǎn): redis-cli info replication # Replication role:master connected_slaves:2 slave0:ip=192.168.10.18,port=6379,state=online,offset=1246,lag=0 slave1:ip=192.168.10.19,port=6379,state=online,offset=1246,lag=1 驗(yàn)證:在主上添加一個(gè)數(shù)據(jù),看從上有沒(méi)有。










3. Redis 哨兵模式
3.1 Redis 哨兵概述
? 主從切換技術(shù)的方法是:當(dāng)服務(wù)器宕機(jī)后,需要手動(dòng)一臺(tái)從機(jī)切換為主機(jī),這需要人工干預(yù),不僅費(fèi)時(shí)費(fèi)力而且還會(huì)造成一段時(shí)間內(nèi)服務(wù)不可用。為了解決主從復(fù)制的缺點(diǎn),就有了哨兵機(jī)制。
哨兵的核心功能:在主從復(fù)制的基礎(chǔ)上,哨兵引入了主節(jié)點(diǎn)的自動(dòng)故障轉(zhuǎn)移。
3.2 哨兵模式原理
哨兵(sentinel):是一個(gè)分布式系統(tǒng),用于對(duì)主從結(jié)構(gòu)中的每臺(tái)服務(wù)器進(jìn)行監(jiān)控,當(dāng)出現(xiàn)故障時(shí)通過(guò)投票機(jī)制選擇新的 Master并將所有slave連接到新的 Master。所以整個(gè)運(yùn)行哨兵的集群的數(shù)量不得少于3個(gè)節(jié)點(diǎn)。
3.3 哨兵模式的作用
- 監(jiān)控:哨兵會(huì)不斷地檢查主節(jié)點(diǎn)和從節(jié)點(diǎn)是否運(yùn)作正常。
- 自動(dòng)故障轉(zhuǎn)移:當(dāng)主節(jié)點(diǎn)不能正常工作時(shí),哨兵會(huì)開(kāi)始自動(dòng)故障轉(zhuǎn)移操作,它會(huì)將失效主節(jié)點(diǎn)的其中一個(gè)從節(jié)點(diǎn)升級(jí)為新的主節(jié)點(diǎn),并讓其它從節(jié)點(diǎn)改為復(fù)制新的主節(jié)點(diǎn)。
- 通知(提醒):哨兵可以將故障轉(zhuǎn)移的結(jié)果發(fā)送給客戶(hù)端。
哨兵結(jié)構(gòu)由兩部分組成,哨兵節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn):節(jié)點(diǎn),不存儲(chǔ)數(shù)據(jù)。
- 哨兵節(jié)點(diǎn):哨兵系統(tǒng)由一個(gè)或多個(gè)哨兵節(jié)點(diǎn)組成,哨兵節(jié)點(diǎn)是特殊的redis
- 數(shù)據(jù)節(jié)點(diǎn):主節(jié)點(diǎn)和從節(jié)點(diǎn)都是數(shù)據(jù)節(jié)點(diǎn)。

3.4 故障轉(zhuǎn)移機(jī)制
1.由哨兵節(jié)點(diǎn)定期監(jiān)控發(fā)現(xiàn)主節(jié)點(diǎn)是否出現(xiàn)了故障
每個(gè)哨兵節(jié)點(diǎn)每隔1秒會(huì)向主節(jié)點(diǎn)、從節(jié)點(diǎn)及其它哨兵節(jié)點(diǎn)發(fā)送一次ping命令做一次心跳檢測(cè)。如果主節(jié)點(diǎn)在一定時(shí)間范圍內(nèi)不回復(fù)或者是回復(fù)一個(gè)錯(cuò)誤消息,那么這個(gè)哨兵就會(huì)認(rèn)為這個(gè)主節(jié)點(diǎn)主觀下線(xiàn)了(單方面的)。當(dāng)超過(guò)半數(shù)哨兵節(jié)點(diǎn)認(rèn)為該主節(jié)點(diǎn)主觀下線(xiàn)了,這樣就客觀下線(xiàn)了。
2.當(dāng)主節(jié)點(diǎn)出現(xiàn)故障,此時(shí)哨兵節(jié)點(diǎn)會(huì)通過(guò)Raft算法(選舉算法)實(shí)現(xiàn)選舉機(jī)制共同選舉出一個(gè)哨兵節(jié)點(diǎn)為leader,來(lái)負(fù)責(zé)處理主節(jié)點(diǎn)的故障轉(zhuǎn)移和通知。所以整個(gè)運(yùn)行哨兵的集群的數(shù)量不得少于3個(gè)節(jié)點(diǎn)。
3.由leader哨兵節(jié)點(diǎn)執(zhí)行故障轉(zhuǎn)移,過(guò)程如下:
- 將某一個(gè)從節(jié)點(diǎn)升級(jí)為新的主節(jié)點(diǎn),讓其它從節(jié)點(diǎn)指向新的主節(jié)點(diǎn);
- 若原主節(jié)點(diǎn)恢復(fù)也變成從節(jié)點(diǎn),并指向新的主節(jié)點(diǎn);
- 通知客戶(hù)端主節(jié)點(diǎn)已經(jīng)更換。
需要特別注意的是,客觀下線(xiàn)是主節(jié)點(diǎn)才有的概念;如果從節(jié)點(diǎn)和哨兵節(jié)點(diǎn)發(fā)生故障,被哨兵主觀下線(xiàn)后,不會(huì)再有后續(xù)的客觀下線(xiàn)和故障轉(zhuǎn)移操作。
3.5 主節(jié)點(diǎn)的選舉
- 過(guò)濾掉不健康的(已下線(xiàn)的),沒(méi)有回復(fù)哨兵 ping 響應(yīng)的從節(jié)點(diǎn)。
- 選擇配置文件中從節(jié)點(diǎn)優(yōu)先級(jí)配置最高的。(replica-priority,默認(rèn)值為100)
- 選擇復(fù)制偏移量最大,也就是復(fù)制最完整的從節(jié)點(diǎn)。
哨兵的啟動(dòng)依賴(lài)于主從模式,所以須把主從模式安裝好的情況下再去做哨兵模式
3.6 搭建Redis 哨兵模式
1、搭建Redis 哨兵模式 Master節(jié)點(diǎn):192.168.10.23 Slave1節(jié)點(diǎn):192.168.10.14 Slave2節(jié)點(diǎn):192.168.10.15 systemctl stop firewalld setenforce 0 ---------------------------------------- 2、修改 Redis 哨兵模式的配置文件(所有節(jié)點(diǎn)操作) vim /opt/redis-5.0.7/sentinel.conf protected-mode no #17行,關(guān)閉保護(hù)模式 port 26379 #21行,Redis哨兵默認(rèn)的監(jiān)聽(tīng)端口 daemonize yes #26行,指定sentinel為后臺(tái)啟動(dòng) logfile "/var/log/sentinel.log" #36行,指定日志存放路徑 dir "/var/lib/redis/6379" #65行,指定數(shù)據(jù)庫(kù)存放路徑 sentinel monitor mymaster 192.168.10.23 6379 2 #84行,修改 指定該哨兵節(jié)點(diǎn)監(jiān)控192.168.10.23:6379這個(gè)主節(jié)點(diǎn),該主節(jié)點(diǎn)的名稱(chēng)是mymaster,最后的2的含義與主節(jié)點(diǎn)的故障判定有關(guān):至少需要2個(gè)哨兵節(jié)點(diǎn)同意,才能判定主節(jié)點(diǎn)故障并進(jìn)行故障轉(zhuǎn)移 sentinel down-after-milliseconds mymaster 30000 #113行,判定服務(wù)器down掉的時(shí)間周期,默認(rèn)30000毫秒(30秒) sentinel failover-timeout mymaster 180000 #146行,故障節(jié)點(diǎn)的最大超時(shí)時(shí)間為180000(180秒) -------------------------------------------------------------------------------------------- 3、啟動(dòng)哨兵模式 先啟master,再啟slave cd /opt/redis-5.0.7/ redis-sentinel sentinel.conf & -------------------------------------------------------------------------------------------- 3、查看哨兵信息 redis-cli -p 26379 info Sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=192.168.20.23:6379,slaves=2,sentinels=3 -------------------------------------------------------------------------------------------- 4、故障模擬 #查看redis-server進(jìn)程號(hào): ps -ef | grep redis root 57031 1 0 15:20 ? 00:00:07 /usr/local/bin/redis-server 0.0.0.0:6379 root 57742 1 1 16:05 ? 00:00:07 redis-sentinel *:26379 [sentinel] root 57883 57462 0 16:17 pts/1 00:00:00 grep --color=auto redis #殺死 Master 節(jié)點(diǎn)上redis-server的進(jìn)程號(hào) kill -9 57031 #Master節(jié)點(diǎn)上redis-server的進(jìn)程號(hào) #驗(yàn)證結(jié)果 tail -f /var/log/sentinel.log 23062:X 18 Sep 2025 22:36:04.175 # +monitor master mymaster 192.168.10.23 6379 quorum 2 23062:X 18 Sep 2025 22:36:04.176 * +slave slave 192.168.10.14:6379 192.168.10.14 6379 @ mymaster 192.168.10.23 6379 23062:X 18 Sep 2025 22:36:04.178 * +slave slave 192.168.10.15:6379 192.168.10.15 6379 @ mymaster 192.168.10.23 6379 23062:X 18 Sep 2025 22:36:11.142 * +sentinel sentinel 2d97f3ac6e2ca4a7ecdf456264324b519edae80e 192.168.10.14 26379 @ mymaster 192.168.10.23 6379 23062:X 18 Sep 2025 22:36:13.326 * +sentinel sentinel 0fef2cc38d8db8ccefad0466290bcd1057e16aa9 192.168.10.15 26379 @ mymaster 192.168.10.23 6379 23066:X 18 Sep 2025 22:36:19.027 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 23066:X 18 Sep 2025 22:36:19.027 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=23066, just started 23066:X 18 Sep 2025 22:36:19.027 # Configuration loaded 23067:X 18 Sep 2025 22:36:19.028 * Increased maximum number of open files to 10032 (it was originally set to 1024). 23067:X 18 Sep 2025 22:36:19.028 # Could not create server TCP listening socket *:26379: bind: Address already in use 23062:X 18 Sep 2025 22:37:50.104 # +sdown master mymaster 192.168.10.23 6379 23062:X 18 Sep 2025 22:37:50.178 # +new-epoch 1 23062:X 18 Sep 2025 22:37:50.179 # +vote-for-leader 0fef2cc38d8db8ccefad0466290bcd1057e16aa9 1 23062:X 18 Sep 2025 22:37:50.560 # +config-update-from sentinel 0fef2cc38d8db8ccefad0466290bcd1057e16aa9 192.168.10.15 26379 @ mymaster 192.168.10.23 6379 23062:X 18 Sep 2025 22:37:50.560 # +switch-master mymaster 192.168.10.23 6379 192.168.10.15 6379 23062:X 18 Sep 2025 22:37:50.561 * +slave slave 192.168.10.14:6379 192.168.10.14 6379 @ mymaster 192.168.10.15 6379 23062:X 18 Sep 2025 22:37:50.561 * +slave slave 192.168.10.23:6379 192.168.10.23 6379 @ mymaster 192.168.10.15 6379 23062:X 18 Sep 2025 22:38:20.584 # +sdown slave 192.168.10.23:6379 192.168.10.23 6379 @ mymaster 192.168.10.15 6379 ^C -------------------------------------------------------------------------------------------- ##查看master是否被切換 redis-cli -p 26379 INFO Sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=192.168.10.14:6379,slaves=2,sentinels=3






4. Redis 群集模式
4.1 Redis 群集概述
? 集群,即Redis Cluster,是Redis 3.0開(kāi)始引入的分布式存儲(chǔ)方案。
? 集群由多個(gè)節(jié)點(diǎn)(Node)組成,Redis的數(shù)據(jù)分布在這些節(jié)點(diǎn)中。集群中的節(jié)點(diǎn)分為主節(jié)點(diǎn)和從節(jié)點(diǎn):只有主節(jié)點(diǎn)負(fù)責(zé)讀寫(xiě)請(qǐng)求和集群信息的維護(hù);從節(jié)點(diǎn)只進(jìn)行主節(jié)點(diǎn)數(shù)據(jù)和狀態(tài)信息的復(fù)制。
4.2 集群的作用
集群的作用,可以歸納為兩點(diǎn):
(1)數(shù)據(jù)分區(qū):數(shù)據(jù)分區(qū)(或稱(chēng)數(shù)據(jù)分片)是集群最核心的功能。
集群將數(shù)據(jù)分散到多個(gè)節(jié)點(diǎn),一方面突破了Redis單機(jī)內(nèi)存大小的限制,存儲(chǔ)容量大大增加;另一方面每個(gè)主節(jié)點(diǎn)都可以對(duì)外提供讀服務(wù)和寫(xiě)服務(wù),大大提高了集群的響應(yīng)能力。
Redis單機(jī)內(nèi)存大小受限問(wèn)題,在介紹持久化和主從復(fù)制時(shí)都有提及;例如,如果單機(jī)內(nèi)存太大,bgsave和bgrewriteaof的fork操作可能導(dǎo)致主進(jìn)程阻塞,主從環(huán)境下主機(jī)切換時(shí)可能導(dǎo)致從節(jié)點(diǎn)長(zhǎng)時(shí)間無(wú)法提供服務(wù),全量復(fù)制階段主節(jié)點(diǎn)的復(fù)制緩沖區(qū)可能溢出。
(2)高可用:集群支持主從復(fù)制和主節(jié)點(diǎn)的自動(dòng)故障轉(zhuǎn)移(與哨兵類(lèi)似);當(dāng)任一節(jié)點(diǎn)發(fā)生故障時(shí),集群仍然可以對(duì)外提供服務(wù)。

4.3 Redis集群的數(shù)據(jù)分片(重點(diǎn))
Redis集群引入了哈希槽的概念
Redis集群有16384個(gè)哈希槽(編號(hào)0-16383)
集群的每個(gè)節(jié)點(diǎn)負(fù)責(zé)一部分哈希槽
每個(gè)Key通過(guò)CRC16校驗(yàn)后對(duì)16384取余來(lái)決定放置哪個(gè)哈希槽,通過(guò)這個(gè)值,去找到對(duì)應(yīng)的插槽所對(duì)應(yīng)的節(jié)點(diǎn),然后直接自動(dòng)跳轉(zhuǎn)到這個(gè)對(duì)應(yīng)的節(jié)點(diǎn)上進(jìn)行存取操作
#以3個(gè)節(jié)點(diǎn)組成的集群為例:
- 節(jié)點(diǎn)A包含0到5460號(hào)哈希槽
- 節(jié)點(diǎn)B包含5461到10922號(hào)哈希槽
- 節(jié)點(diǎn)C包含10923到16383號(hào)哈希槽
#Redis集群的主從復(fù)制模型
集群中具有A、B、C三個(gè)節(jié)點(diǎn),如果節(jié)點(diǎn)B失敗了,整個(gè)集群就會(huì)因缺少5461-10922這個(gè)范圍的槽而不可以用。
為每個(gè)節(jié)點(diǎn)添加一個(gè)從節(jié)點(diǎn)A1、B1、C1整個(gè)集群便有三個(gè)Master節(jié)點(diǎn)和三個(gè)slave節(jié)點(diǎn)組成,在節(jié)點(diǎn)B失敗后,集群選舉B1位為的主節(jié)點(diǎn)繼續(xù)服務(wù)。當(dāng)B和B1都失敗后,集群將不可用。
4.2 搭建Redis 群集
1、搭建Redis 群集模式 ----------------------------------------
redis的集群一般需要6個(gè)節(jié)點(diǎn),3主3從。方便起見(jiàn),這里所有節(jié)點(diǎn)在同一臺(tái)服務(wù)器上模擬:
以端口號(hào)進(jìn)行區(qū)分:3個(gè)主節(jié)點(diǎn)端口號(hào):6001/6002/6003,對(duì)應(yīng)的從節(jié)點(diǎn)端口號(hào):6004/6005/6006。
cd /etc/redis/
mkdir -p redis-cluster/redis600{1..6}
for i in {1..6}
do
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$i
done
2、#開(kāi)啟群集功能:
#其他5個(gè)文件夾的配置文件以此類(lèi)推修改,注意6個(gè)端口都要不一樣。
cd /etc/redis/redis-cluster/redis6001
vim redis.conf
#bind 127.0.0.1 #69行,注釋掉bind 項(xiàng),默認(rèn)監(jiān)聽(tīng)所有網(wǎng)卡
protected-mode no #88行,修改,關(guān)閉保護(hù)模式
port 6001 #92行,修改,redis監(jiān)聽(tīng)端口,
daemonize yes #136行,開(kāi)啟守護(hù)進(jìn)程,以獨(dú)立進(jìn)程啟動(dòng)
cluster-enabled yes #832行,取消注釋?zhuān)_(kāi)啟群集功能
cluster-config-file nodes-6001.conf #840行,取消注釋?zhuān)杭Q(chēng)文件設(shè)置
cluster-node-timeout 15000 #846行,取消注釋群集超時(shí)時(shí)間設(shè)置
appendonly yes #700行,修改,開(kāi)啟AOF持久化
3、#啟動(dòng)redis節(jié)點(diǎn)
分別進(jìn)入那六個(gè)文件夾,執(zhí)行命令:redis-server redis.conf ,來(lái)啟動(dòng)redis節(jié)點(diǎn)
cd /etc/redis/redis-cluster/redis6001
redis-server redis.conf
for d in {1..6}
do
cd /etc/redis/redis-cluster/redis600$d
redis-server redis.conf
done
ps -ef | grep redis
4、#啟動(dòng)集群
redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1
#六個(gè)實(shí)例分為三組,每組一主一從,前面的做主節(jié)點(diǎn),后面的做從節(jié)點(diǎn)。下面交互的時(shí)候 需要輸入 yes 才可以創(chuàng)建。
--replicas 1 表示每個(gè)主節(jié)點(diǎn)有1個(gè)從節(jié)點(diǎn)。
5、#測(cè)試群集
redis-cli -p 6001 -c #加-c參數(shù),節(jié)點(diǎn)之間就可以互相跳轉(zhuǎn)
127.0.0.1:6001> cluster slots #查看節(jié)點(diǎn)的哈希槽編號(hào)范圍
1) 1) (integer) 5461
2) (integer) 10922 #哈希槽編號(hào)范圍
3) 1) "127.0.0.1"
2) (integer) 6003 #主節(jié)點(diǎn)IP和端口號(hào)
3) "fdca661922216dd69a63a7c9d3c4540cd6baef44"
4) 1) "127.0.0.1"
2) (integer) 6004 #從節(jié)點(diǎn)IP和端口號(hào)
3) "a2c0c32aff0f38980accd2b63d6d952812e44740"
2) 1) (integer) 0
2) (integer) 5460
3) 1) "127.0.0.1"
2) (integer) 6001
3) "0e5873747a2e26bdc935bc76c2bafb19d0a54b11"
4) 1) "127.0.0.1"
2) (integer) 6006
3) "8842ef5584a85005e135fd0ee59e5a0d67b0cf8e"
3) 1) (integer) 10923
2) (integer) 16383
3) 1) "127.0.0.1"
2) (integer) 6002
3) "816ddaa3d1469540b2ffbcaaf9aa867646846b30"
4) 1) "127.0.0.1"
2) (integer) 6005
3) "f847077bfe6722466e96178ae8cbb09dc8b4d5eb"
#設(shè)置數(shù)據(jù)
127.0.0.1:6001> set name zhangsan
-> Redirected to slot [5798] located at 127.0.0.1:6003
OK
127.0.0.1:6001> cluster keyslot name #查看name鍵的槽編號(hào)
redis-cli -p 6006 -c
127.0.0.1:6004> keys * #對(duì)應(yīng)的slave節(jié)點(diǎn)也有這條數(shù)據(jù),但是別的節(jié)點(diǎn)沒(méi)有
1) "name"












總結(jié)
1、reids 主從復(fù)制是一種數(shù)據(jù)同步一個(gè)機(jī)制,主服務(wù)器數(shù)據(jù)的修改會(huì)實(shí)時(shí)同步到從服務(wù)器上,實(shí)現(xiàn)數(shù)據(jù)備份和讀寫(xiě)分離
2、redis哨兵是一個(gè)用于管理多個(gè)redis服務(wù)器的系統(tǒng),它提供了監(jiān)控、通知、自動(dòng)故障遷移和配置提供的功能點(diǎn),以實(shí)現(xiàn)reids高可用性
3、redis集群是一個(gè)提供高性能 、 高可用 、數(shù)據(jù)分片和故障轉(zhuǎn)移特性的一個(gè)分布式數(shù)據(jù)庫(kù)解決方案,但不支持多鍵操作和鍵的重命名
到此這篇關(guān)于Redis中群集三種模式的文章就介紹到這了,更多相關(guān)Redis 群集模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用Redis統(tǒng)計(jì)網(wǎng)站在線(xiàn)活躍用戶(hù)的方法
Redis支持對(duì)String類(lèi)型的value進(jìn)行基于二進(jìn)制位的置位操作。通過(guò)將一個(gè)用戶(hù)的id對(duì)應(yīng)value上的一位,通過(guò)對(duì)活躍用戶(hù)對(duì)應(yīng)的位進(jìn)行置位,就能夠用一個(gè)value記錄所有活躍用戶(hù)的信息。下面這篇文章主要介紹了利用Redis統(tǒng)計(jì)網(wǎng)站在線(xiàn)活躍用戶(hù)的方法,需要的朋友可以參考。2017-01-01
在CentOS 7環(huán)境下安裝Redis數(shù)據(jù)庫(kù)詳解
Redis是一個(gè)開(kāi)源的、基于BSD許可證的,基于內(nèi)存的、鍵值存儲(chǔ)NoSQL數(shù)據(jù)本篇文章主要介紹了在CentOS 7環(huán)境下安裝Redis數(shù)據(jù)庫(kù)詳解,有興趣的可以了解一下。2016-11-11
Redis主從復(fù)制實(shí)現(xiàn)原理分析
Redis主從復(fù)制通過(guò)Sync和CommandPropagate階段實(shí)現(xiàn)數(shù)據(jù)同步,2.8版本后引入Psync指令,根據(jù)復(fù)制偏移量進(jìn)行全量或部分同步,優(yōu)化了數(shù)據(jù)傳輸效率2025-01-01
Redis分布式鎖方案設(shè)計(jì)之防止訂單重復(fù)提交或支付
這篇文章主要為大家介紹了Redis分布式鎖之防止訂單重復(fù)提交或支付方案設(shè)計(jì)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
python腳本實(shí)現(xiàn)Redis未授權(quán)批量提權(quán)
這篇文章主要給大家介紹了關(guān)于利用python腳本實(shí)現(xiàn)redis未授權(quán)批量提權(quán)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09
Redis不同數(shù)據(jù)類(lèi)型的命令語(yǔ)句詳解
這篇文章主要介紹了Redis不同數(shù)據(jù)類(lèi)型的命令語(yǔ)句,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10
解決Redis運(yùn)行時(shí)突然不能讀取數(shù)據(jù)了的問(wèn)題處理
Redis因configured錯(cuò)誤配置導(dǎo)致無(wú)法持久化數(shù)據(jù),因此在寫(xiě)數(shù)據(jù)時(shí)被禁止,將stopPersist-ononError設(shè)置為no允許寫(xiě)入但不停持久化,實(shí)際問(wèn)題在于rdb文件保存路徑權(quán)限不足,檢查并rdb.file文件所在目錄權(quán)限并確保redis能具有寫(xiě)寫(xiě)入該權(quán),此問(wèn)題通過(guò)修改目錄權(quán)限解決2026-05-05
基于Redis實(shí)現(xiàn)登錄功能思路詳解(手機(jī)號(hào)+驗(yàn)證碼)
本文介紹了使用手機(jī)號(hào)和驗(yàn)證碼登錄的方式,驗(yàn)證碼通過(guò)控制臺(tái)輸出,重點(diǎn)解釋了UserServiceImpl實(shí)現(xiàn)類(lèi)的結(jié)構(gòu),包括sendCode、login和createUserWithPhone方法,還介紹了攔截器框架,包括preHandle和攔截器鏈的配置,感興趣的朋友跟隨小編一起看看吧2026-01-01

