溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Redis中主從復(fù)制、哨兵、集群的示例分析

發(fā)布時(shí)間:2022-01-13 09:53:50 來源:億速云 閱讀:131 作者:小新 欄目:關(guān)系型數(shù)據(jù)庫

這篇文章將為大家詳細(xì)講解有關(guān)Redis中主從復(fù)制、哨兵、集群的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

一、Redis 主從復(fù)制

1. 主從復(fù)制的概述

主從復(fù)制,是指將一臺(tái)服務(wù)器的數(shù)據(jù),復(fù)制到其他的Redis服務(wù)器。前者稱為主節(jié)點(diǎn)(Master),后者稱為從節(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),但一個(gè)從節(jié)點(diǎn)只能有一個(gè)主節(jié)點(diǎn)?!鞠嚓P(guān)推薦:Redis視頻教程】

2. 主從復(fù)制的作用

數(shù)據(jù)冗余:主從復(fù)制實(shí)現(xiàn)了數(shù)據(jù)的熱備份,是持久化之外的一種數(shù)據(jù)冗余方式。
故障恢復(fù):當(dāng)主節(jié)點(diǎn)出現(xiàn)問題時(shí),可以由從節(jié)點(diǎn)提供服務(wù),實(shí)現(xiàn)快速的故障恢復(fù);實(shí)際上是一種服務(wù)的冗余。
負(fù)載均衡:在主從復(fù)制的基礎(chǔ)上,配合讀寫分離,可以由主節(jié)點(diǎn)提供寫服務(wù),由從節(jié)點(diǎn)提供讀服務(wù)(即寫Redis數(shù)據(jù)時(shí)應(yīng)用連接主節(jié)點(diǎn),讀Redis數(shù)據(jù)時(shí)應(yīng)用連接從節(jié)點(diǎn)),分擔(dān)服務(wù)器負(fù)載;有其是在寫少讀多的場(chǎng)景下,通過多個(gè)從節(jié)點(diǎn)分擔(dān)讀負(fù)載,可以大大提高Redis服務(wù)器的并發(fā)量。
高可用基石:除了上述作用以外,主從復(fù)制還是哨兵和集群能夠?qū)嵤┑幕A(chǔ),因此說主從復(fù)制是Redis高可用的基礎(chǔ)。

3. 主從復(fù)制的流程

Redis中主從復(fù)制、哨兵、集群的示例分析

(1)若啟動(dòng)一個(gè)Slave機(jī)器進(jìn)程,則它會(huì)向Master機(jī)器發(fā)送一個(gè)“sync command”命令,請(qǐng)求同步連接。
(2)無論是第一次連接還是重新連接,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ù)文件保存到硬盤上,然后將其加載到內(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ī)器,如果Master同時(shí)收到多個(gè)Slave發(fā)來的同步請(qǐng)求,則Master會(huì)在后臺(tái)啟動(dòng)一個(gè)進(jìn)程以保存數(shù)據(jù)文件,然后將其發(fā)送給所有的Slave端機(jī)器,確保所有的Slave端機(jī)器都正常。

4. 搭建Redis主從復(fù)制

4.1 服務(wù)器IP配置

服務(wù)器主機(jī)名IP
Master節(jié)點(diǎn)master192.168.122.10
Slave1節(jié)點(diǎn)slave1192.168.122.11
Slave2節(jié)點(diǎn)slave2192.168.122.12

4.2 各服務(wù)器防火墻環(huán)境

systemctl stop firewalld && systemctl disable firewalld
setenforce 0

4.3 各服務(wù)器安裝Redis

redis 安裝詳見往期博客:
NoSQL 之 redis 詳解

傳入安裝包到/opt目錄
yum install -y gcc gcc-c++ make
tar zxvf redis-5.0.7.tar.gz -C /opt/
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 []
#輸入/uar/local/redis/bin/redis-server
ln -s /usr/local/redis/bin/* /usr/local/bin/

4.4 修改Redis配置文件(Master節(jié)點(diǎn)操作)

Master:192.168.122.10

[root@master ~]# vim /etc/redis/6379.conf
 
##70行,修改監(jiān)聽地址為0.0.0.0,表示監(jiān)聽任何地址
bind 0.0.0.0
##137行,開啟守護(hù)進(jìn)程
daemonize yes
##172行,指定日志文件目錄
logfile /var/log/redis_6379.log
##264行,指定工作日志
dir /var/lib/redis/6379
##700行,開啟AOF持久化功能
appendonly yes

4.5 修改Redis配置文件(Slave節(jié)點(diǎn)操作)

Slave1:192.168.122.11

[root@slave1 utils]# vim /etc/redis/6379.conf 
 
##70行,修改監(jiān)聽地址為0.0.0.0,表示監(jiān)聽任何地址
bind 0.0.0.0
##137行,開啟守護(hù)進(jìn)程
daemonize yes
##172行,指定日志文件目錄
logfile /var/log/redis_6379.log
##264行,指定工作日志
dir /var/lib/redis/6379
##288行,添加要同步的Master節(jié)點(diǎn)IP和端口
replicaof 192.168.122.10 6379
##700行,開啟AOF持久化功能
appendonly yes
 
[root@slave1 utils]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...

Slave2:192.168.122.12

[root@slave2 utils]# vim /etc/redis/6379.conf 
 
##70行,修改監(jiān)聽地址為0.0.0.0,表示監(jiān)聽任何地址
bind 0.0.0.0
##137行,開啟守護(hù)進(jìn)程
daemonize yes
##172行,指定日志文件目錄
logfile /var/log/redis_6379.log
##264行,指定工作日志
dir /var/lib/redis/6379
##288行,添加要同步的Master節(jié)點(diǎn)IP和端口
replicaof 192.168.122.10 6379
##700行,開啟AOF持久化功能
appendonly yes
 
[root@slave2 utils]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...

4.6 驗(yàn)證主從效果

4.6.1 在Master節(jié)點(diǎn)上看日志

[root@master ~]# tail -f /var/log/redis_6379.log 
1002:M 23 Sep 2021 16:46:33.569 * Background saving terminated with success
1002:M 23 Sep 2021 16:46:33.569 * Synchronization with replica 192.168.122.11:6379 succeeded
1002:M 23 Sep 2021 16:46:34.519 * Replica 192.168.122.12:6379 asks for synchronization
1002:M 23 Sep 2021 16:46:34.519 * Full resync requested by replica 192.168.122.12:6379
1002:M 23 Sep 2021 16:46:34.519 * Starting BGSAVE for SYNC with target: disk
1002:M 23 Sep 2021 16:46:34.519 * Background saving started by pid 7941
7941:C 23 Sep 2021 16:46:34.521 * DB saved on disk
7941:C 23 Sep 2021 16:46:34.521 * RDB: 0 MB of memory used by copy-on-write
1002:M 23 Sep 2021 16:46:34.591 * Background saving terminated with success
1002:M 23 Sep 2021 16:46:34.591 * Synchronization with replica 192.168.122.12:6379 succeeded

4.6.2 在Master節(jié)點(diǎn)驗(yàn)證從節(jié)點(diǎn)

[root@master ~]# redis-cli info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.122.11,port=6379,state=online,offset=910,lag=0
slave1:ip=192.168.122.12,port=6379,state=online,offset=910,lag=0
master_replid:9d7fa17fc64cd573f5b81457183831d97dfad7dc
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:910
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:910

二、Redis 哨兵模式

1. 哨兵模式的核心功能

在主從復(fù)制的基礎(chǔ)上,哨兵引入了主節(jié)點(diǎn)的自動(dòng)故障轉(zhuǎn)移。

2. 哨兵模式的原理

哨兵(sentinel)是一個(gè)分布式系統(tǒng),用于對(duì)主從結(jié)構(gòu)中每臺(tái)服務(wù)器進(jìn)行監(jiān)控,當(dāng)出現(xiàn)故障時(shí)通過投票機(jī)制選擇新的Master并將所有Slave連接到新的Master。所以整個(gè)運(yùn)行哨兵的集群的數(shù)量不得少于3個(gè)節(jié)點(diǎn)。

3. 哨兵模式的作用

監(jiān)控:哨兵會(huì)不斷地檢查主節(jié)點(diǎn)和從節(jié)點(diǎn)是否運(yùn)作正常。
自動(dòng)故障轉(zhuǎn)移:當(dāng)主節(jié)點(diǎn)不能正常工作時(shí),哨兵會(huì)開始自動(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ā)送給客戶端。

4. 哨兵模式的結(jié)構(gòu)

哨兵結(jié)構(gòu)由兩部分組成,哨兵節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn):
● 哨兵節(jié)點(diǎn):哨兵系統(tǒng)由一個(gè)或多個(gè)節(jié)點(diǎn)組成,哨兵節(jié)點(diǎn)是特殊的redis節(jié)點(diǎn),不存儲(chǔ)數(shù)據(jù)。
● 數(shù)據(jù)節(jié)點(diǎn):主節(jié)點(diǎn)和從節(jié)點(diǎn)都是數(shù)據(jù)節(jié)點(diǎn)。

5. 哨兵模式的工作形式

Redis中主從復(fù)制、哨兵、集群的示例分析
哨兵的啟動(dòng)依賴于主從模式,所以須把主從模式安裝好的情況下再去做哨兵模式,所有節(jié)點(diǎn)上都需要部署哨兵模式,哨兵模式會(huì)監(jiān)控所有的Redis工作節(jié)點(diǎn)是否正常,當(dāng)Master出現(xiàn)問題的時(shí)候,因?yàn)槠渌?jié)點(diǎn)與主節(jié)點(diǎn)失去聯(lián)系,因此會(huì)投票,投票過半就會(huì)認(rèn)為這個(gè)Master的確出現(xiàn)問題,然后會(huì)通知哨兵間,然后從Slaves中選取一個(gè)作為新的Master。

6. 故障轉(zhuǎn)移機(jī)制

  • 由哨兵節(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)主觀下線了(單方面的)。當(dāng)超過半數(shù)哨兵節(jié)點(diǎn)認(rèn)為該主節(jié)點(diǎn)主觀下線了,這樣就客觀下線了。

  • 當(dāng)主節(jié)點(diǎn)出現(xiàn)故障,此時(shí)哨兵節(jié)點(diǎn)會(huì)通過Raft算法(選舉算法)實(shí)現(xiàn)選舉機(jī)制共同選舉出一個(gè)哨兵節(jié)點(diǎn)為leader,來負(fù)責(zé)處理主節(jié)點(diǎn)的故障轉(zhuǎn)移和通知。所以哨兵集群的主機(jī)數(shù)量不得少于三個(gè)節(jié)點(diǎn)。

  • 由leader哨兵節(jié)點(diǎn)執(zhí)行故障轉(zhuǎn)移,過程如下:
    ● 將某一個(gè)從節(jié)點(diǎn)升級(jí)為新的主節(jié)點(diǎn),讓其他從節(jié)點(diǎn)指向新的主節(jié)點(diǎn);
    ● 若原主節(jié)點(diǎn)恢復(fù)也變成從節(jié)點(diǎn),并指向新的主節(jié)點(diǎn);
    ● 通知客戶端主節(jié)點(diǎn)已經(jīng)更換。
    需要特別注意的是,客觀下線是主節(jié)點(diǎn)才有的概念;如果從節(jié)點(diǎn)和哨兵節(jié)點(diǎn)發(fā)生故障,被哨兵主觀下線后,不會(huì)再有后續(xù)的客觀下線和故障轉(zhuǎn)移操作。

7. 主節(jié)點(diǎn)的選舉

  • 過濾掉不健康的(已下線的),沒有回復(fù)哨兵ping響應(yīng)的從節(jié)點(diǎn)。

  • 選擇配置文件中從節(jié)點(diǎn)優(yōu)先級(jí)配置最高的(replica-priority,默認(rèn)值為100)。

  • 選擇復(fù)制偏移量最大,也就是復(fù)制最完整的從節(jié)點(diǎn)。

8. 搭建Redis哨兵模式

8.1 服務(wù)器IP配置

服務(wù)器主機(jī)名IP
Master節(jié)點(diǎn)master192.168.122.10
Slave1節(jié)點(diǎn)slave1192.168.122.11
Slave2節(jié)點(diǎn)slave2192.168.122.12

8.2 各服務(wù)器防火墻環(huán)境

systemctl stop firewalld && systemctl disable firewalld
setenforce 0

8.3 修改Redis哨兵模式的配置文件(所有節(jié)點(diǎn)操作)

vim /opt/redis-5.0.7/sentinel.conf
 
##17行,取消注釋,關(guān)閉保護(hù)模式
protected-mode no
##21行,Redis哨兵默認(rèn)的監(jiān)聽端口
port 26379
##26行,指定sentienel為后臺(tái)啟動(dòng)
daemonize yes
##36行,指定日志存放路徑
logfile "/var/log/sentinel.log"
##65行,指定數(shù)據(jù)庫存放路徑
dir "/var/lib/redis/6379"
##84行,修改,指定該哨兵節(jié)點(diǎn)監(jiān)控192.168.122.10 6379這個(gè)主節(jié)點(diǎn),該主節(jié)點(diǎn)的名稱是mymaster
##最后的2的含義與主節(jié)點(diǎn)的故障判定有關(guān);至少需要2個(gè)哨兵節(jié)點(diǎn)同意,才能判定故障并進(jìn)行故障轉(zhuǎn)移
sentinel monitor mymaster 192.168.122.10 6379 2
##113行,判定服務(wù)器down掉的時(shí)間周期,默認(rèn)30000毫秒(30秒)
sentinel down-after-milliseconds mymaster 30000
##146行,故障節(jié)點(diǎn)的最大超時(shí)時(shí)間為180000毫秒(180秒)
sentinel failover-timeout mymaster 180000

8.4 啟動(dòng)哨兵模式

注意:需先啟動(dòng)master,再啟動(dòng)slave

cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &

8.5 查看哨兵信息

Master:192.168.122.10

[root@master redis-5.0.7]# 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.122.10:6379,slaves=2,sentinels=3

三、Redis 群集模式

1. Redis集群的概述

集群,即Redis Cluster,是Redis 3.0開始引入的分布式存儲(chǔ)方案。

2. Redis集群

集群由多個(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é)讀寫請(qǐng)求和集群信息的維護(hù);從節(jié)點(diǎn)只進(jìn)行主節(jié)點(diǎn)數(shù)據(jù)和狀態(tài)信息的復(fù)制。

3. Redis集群的作用

集群的作用,可以歸納為兩點(diǎn):

3.1 數(shù)據(jù)分區(qū)

數(shù)據(jù)分區(qū)(或稱數(shù)據(jù)分片)是集群最核心的功能。
集群將數(shù)據(jù)分散到多個(gè)節(jié)點(diǎn),一方面突破了Redis單機(jī)內(nèi)存大小的限制,存儲(chǔ)容量大大增加;另一方面每個(gè)主節(jié)點(diǎn)度可以對(duì)外提供讀服務(wù)和寫服務(wù),大大提高了集群的響應(yīng)能力。
Redis單機(jī)內(nèi)存大小受限問題,在介紹持久化和主從復(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ù),全量復(fù)制階段主節(jié)點(diǎn)的復(fù)制緩沖區(qū)可能溢出。

3.2 高可用

集群支持主從復(fù)制和主節(jié)點(diǎn)的自動(dòng)故障轉(zhuǎn)換(與哨兵類似);當(dāng)任一節(jié)點(diǎn)發(fā)生故障時(shí),集群仍然可以對(duì)外提供服務(wù)。

4. Redis集群的數(shù)據(jù)分片

● Redis集群引入了哈希槽的概念
● Redis集群有16384個(gè)哈希槽(編號(hào)0-16383)
● 集群的每個(gè)節(jié)點(diǎn)負(fù)責(zé)一部分哈希槽
● 每個(gè)key通過CRC16校驗(yàn)后對(duì)16384取余來決定放置哪個(gè)哈希槽,通過這個(gè)值,去找到所對(duì)應(yīng)的節(jié)點(diǎn),然后直接跳轉(zhuǎn)到這個(gè)對(duì)應(yīng)的節(jié)點(diǎn)上進(jìn)行存取操作。

5. 哈希槽

5.1 哈希槽的分配

Redis中主從復(fù)制、哨兵、集群的示例分析

  • 哈希槽可按照集群主機(jī)數(shù)平均分配(默認(rè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)哈希槽

  • 也可以根據(jù)主機(jī)的性能以及功能自定義分配
    以3個(gè)節(jié)點(diǎn)組成的集群為例:
    節(jié)點(diǎn)A性能最差,包含0-2000號(hào)哈希值
    節(jié)點(diǎn)B性能中等,包含2001-7000號(hào)哈希值
    節(jié)點(diǎn)C性能最強(qiáng),包含7001-16383號(hào)哈希值

5.2 哈希槽的使用

集群搭建的時(shí)候,需要給集群的節(jié)點(diǎn)分配插槽,0~16383
在node1執(zhí)行set a a

  • 使用crc16算法對(duì)key進(jìn)行計(jì)算,得到一個(gè)數(shù)字,然后對(duì)這個(gè)數(shù)字進(jìn)行求余16384(crc16 : a = 26384l;26384 % 16384 = 10000)

  • 查找包含10000的插槽的節(jié)點(diǎn),找到了node2,自動(dòng)跳轉(zhuǎn)到node2

  • 在node2上執(zhí)行set a a命令

node3上執(zhí)行g(shù)et a

  • a --> 10000

  • 跳轉(zhuǎn)到node2

  • 在node2執(zhí)行g(shù)et a

6. Redis集群的主從復(fù)制模型

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都失敗后,集群將不可用。

7. 搭建Redis群集模式

7.1 服務(wù)器IP配置

redis的集群一般需要6個(gè)節(jié)點(diǎn),3主3從。方便起見,這里在同一臺(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。

服務(wù)器主機(jī)名IP主端口從端口
Node1節(jié)點(diǎn)node192.168.122.1060016004
Node2節(jié)點(diǎn)node192.168.122.1060026005
Node3節(jié)點(diǎn)node192.168.122.1060036006

7.2 服務(wù)器防火墻環(huán)境

systemctl stop firewalld && systemctl disable firewalld
setenforce 0

7.3 創(chuàng)建集群配置目錄及文件

[root@node ~]# cd /etc/redis
[root@node redis]# mkdir -p redis-cluster/redis600{1..6}
[root@node redis]# 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
[root@node redis]# ls -R redis-cluster/
redis-cluster/:
redis6001  redis6002  redis6003  redis6004  redis6005  redis6006
 
redis-cluster/redis6001:
redis-cli  redis.conf  redis-server
 
redis-cluster/redis6002:
redis-cli  redis.conf  redis-server
 
redis-cluster/redis6003:
redis-cli  redis.conf  redis-server
 
redis-cluster/redis6004:
redis-cli  redis.conf  redis-server
 
redis-cluster/redis6005:
redis-cli  redis.conf  redis-server
 
redis-cluster/redis6006:
redis-cli  redis.conf  redis-server

7.4 開啟群集功能

僅以redis6001為例,其他5個(gè)文件夾的配置文件以此類推修改,特別注意端口號(hào)的修改。

[root@node redis]# cd redis-cluster/redis6001
[root@node redis6001]# vim redis.conf 
 
##69行,注釋掉bind項(xiàng),默認(rèn)監(jiān)聽所有網(wǎng)卡
#bind 127.0.0.1
##88行,修改,關(guān)閉保護(hù)模式
protected-mode no
##92行,修改,redis監(jiān)聽端口
port 6001
##136行,開啟守護(hù)進(jìn)程,以獨(dú)立進(jìn)程啟動(dòng)
daemonize yes
##832行,取消注釋,開啟群集功能
cluster-enabled yes
##840行,注銷注釋,群集名稱文件設(shè)置
cluster-config-file nodes-6001.conf
##846行,注銷注釋,群集超時(shí)時(shí)間設(shè)置
cluster-node-timeout 15000
##700行,修改,開啟AOF持久化
appendonly yes

7.5 啟動(dòng)redis節(jié)點(diǎn)

分別進(jìn)入那六個(gè)文件夾,執(zhí)行命令:“redis-server redis.conf”,來啟動(dòng)redis節(jié)點(diǎn)

[root@node redis6001]# for d in {1..6}
> do
> cd /etc/redis/redis-cluster/redis600$i
> ^C
[root@node redis6001]# for d in {1..6}
> do
> cd /etc/redis/redis-cluster/redis600$d
> redis-server redis.conf
> done
[root@node1 redis6006]# ps -ef | grep redis
root        992      1  0 13:45 ?        00:00:07 /usr/local/redis/bin/redis-server 0.0.0.0:6379
root       2289      1  0 14:41 ?        00:00:00 redis-server *:6001 [cluster]
root       2294      1  0 14:41 ?        00:00:00 redis-server *:6002 [cluster]
root       2299      1  0 14:41 ?        00:00:00 redis-server *:6003 [cluster]
root       2304      1  0 14:41 ?        00:00:00 redis-server *:6004 [cluster]
root       2309      1  0 14:41 ?        00:00:00 redis-server *:6005 [cluster]
root       2314      1  0 14:41 ?        00:00:00 redis-server *:6006 [cluster]
root       2450   2337  0 14:50 pts/0    00:00:00 grep --color=auto redis

7.6 啟動(dòng)集群

[root@node redis6006]# 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)。

7.7 測(cè)試集群

[root@node1 redis6006]# 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) 0
#哈希槽起始編號(hào)
   2) (integer) 5460
#哈希槽終止編號(hào)
   3) 1) "127.0.0.1"
      2) (integer) 6001
#node節(jié)點(diǎn)主
      3) "18e59f493579facea29abf90ca4050f566d66339"
   4) 1) "127.0.0.1"
      2) (integer) 6004
#node節(jié)點(diǎn)從
      3) "2635bf6a0c286ef910ec5da03dbdc7cde308c588"
2) 1) (integer) 10923
   2) (integer) 16383
   3) 1) "127.0.0.1"
      2) (integer) 6003
      3) "51460d417eb56537e5bd7e8c9581c66fdd817b3c"
   4) 1) "127.0.0.1"
      2) (integer) 6006
      3) "51a75667dcf21b530e69a3242a3e9f81f577168d"
3) 1) (integer) 5461
   2) (integer) 10922
   3) 1) "127.0.0.1"
      2) (integer) 6002
      3) "6381d68c06ddb7ac43c8f7d7b8da0644845dcd59"
   4) 1) "127.0.0.1"
      2) (integer) 6005
      3) "375ad927116d3aa845e95ad5f0586306e7ff3a96"
127.0.0.1:6001> set num 1
OK
127.0.0.1:6001> get num
"1"
127.0.0.1:6001> keys *
1) "num"
127.0.0.1:6001> quit
[root@node1 redis6006]# redis-cli -p 6002 -c
127.0.0.1:6002> keys *
#6002端口無鍵值對(duì)
(empty list or set)
127.0.0.1:6002> get num
-> Redirected to slot [2765] located at 127.0.0.1:6001
"1"
#6002端口獲取到num鍵位于6001端口,切換到6001端口并顯示鍵值
127.0.0.1:6001> set key1 11111
-> Redirected to slot [9189] located at 127.0.0.1:6002
OK
#6001端口創(chuàng)建鍵值對(duì),將其存至6002端口,并切換至6002端口
127.0.0.1:6002>

關(guān)于“Redis中主從復(fù)制、哨兵、集群的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI