Redis 高可用
什么是高可用
在web服務(wù)器中,高可用是指服務(wù)器可以正常訪問的時間,衡量的標準是在多長時間內(nèi)可以提供正常服務(wù)(99.9%、99.99%、99.999%等等)。
但是在Redis語境中,高可用的含義似乎要寬泛一些,除了保證提供正常服務(wù)(如主從分離、快速容災技術(shù)),還需要考慮數(shù)據(jù)容量的擴展、數(shù)據(jù)安全不會丟失等
Redis的高可用技術(shù)
在Redis中,實現(xiàn)高可用的技術(shù)主要包括持久化、主從復制、哨兵和cluster集群,下面分別說明它們的作用,以及解決了什么樣的問題
-
持久化: 持久化是最簡單的高可用方法(有時甚至不被歸為高可用的手段),主要作用是數(shù)據(jù)備份,即將數(shù)據(jù)存儲在硬盤,保證數(shù)據(jù)不會因進程退出而丟失。
-
主從復制: 主從復制是高可用Redis的基礎(chǔ),哨兵和集群都是在主從復制基礎(chǔ)上實現(xiàn)高可用的。主從復制主要實現(xiàn)了數(shù)據(jù)的多機備份(和同步),以及對于讀操作的負載均衡和簡單的故障恢復。
- 缺陷:故障恢復無法自動化;寫操作無法負載均衡;存儲能力受到單機的限制。
-
哨兵: 在主從復制的基礎(chǔ)上,哨兵實現(xiàn)了自動化的故障恢復。(主掛了,找一個從成為新的主,哨兵節(jié)點進行監(jiān)控)
- 缺陷:寫操作無法負載均衡;存儲能力受到單機的限制。
-
Cluster集群: 通過集群,Redis解決了寫操作無法負載均衡,以及存儲能力受到單機限制的問題,實現(xiàn)了較為完善的高可用方案。(6臺起步,成雙成對,3主3從)
Redis主從復制
主從復制,是指將一臺Redis服務(wù)器的數(shù)據(jù),復制到其他的Redis服務(wù)器。前者稱為主節(jié)點(Master),后者稱為從節(jié)點(slave);數(shù)據(jù)的復制是單向的,只能由主節(jié)點到從節(jié)點。
默認情況下,每臺Redis服務(wù)器都是主節(jié)點;且一個主節(jié)點可以有多個從節(jié)點(或沒有從節(jié)點),但一個從節(jié)點只能有一個主節(jié)點
主從復制的作用
- 數(shù)據(jù)冗余: 主從復制實現(xiàn)了數(shù)據(jù)的熱備份,是持久化之外的一種數(shù)據(jù)冗余方式。
- 故障恢復: 當主節(jié)點出現(xiàn)問題時,可以由從節(jié)點提供服務(wù),實現(xiàn)快速的故障恢復;實際上是一種服務(wù)的冗余。
- 負載均衡: 在主從復制的基礎(chǔ)上,配合讀寫分離,可以由主節(jié)點提供寫服務(wù),由從節(jié)點提供讀服務(wù)(即寫Redis數(shù)據(jù)時應用連接主節(jié)點,讀Redis數(shù)據(jù)時應用連接從節(jié)點),分擔服務(wù)器負載;尤其是在寫少讀多的場景下,通過多個從節(jié)點分擔讀負載,可以大大提高Redis服務(wù)器的并發(fā)量。
- 高可用基石: 除了上述作用以外,主從復制還是哨兵和集群能夠?qū)嵤┑幕A(chǔ),因此說主從復制是Redis高可用的基礎(chǔ)。
?主從復制流程
(1)若啟動一個slave機器進程,則它會向Master機器發(fā)送一個sync command命令,請求同步連接。
(2)無論是第一次連接還是重新連接,Master機器都會啟動一個后臺進程,將數(shù)據(jù)快照保存到數(shù)據(jù)文件中(執(zhí)行rdb操作),同時Master還會記錄修改數(shù)據(jù)的所有命令并緩存在數(shù)據(jù)文件中.
(3)后臺進程完成緩存操作之后,Master機器就會向slave機器發(fā)送數(shù)據(jù)文件,slave端機器將數(shù)據(jù)文件保存到硬盤上,然后將其加載到內(nèi)存中,接著Master機器就會將修改數(shù)據(jù)的所有操作一并發(fā)送給slave端機器。若slave出現(xiàn)故障導致宕機,則恢復正常后會自動重新連接。
(4)Master機器收到slave端機器的連接后,將其完整的數(shù)據(jù)文件發(fā)送給slave端機器,如果Mater同時收到多個slave發(fā)來的同步請求,則Master會在后臺啟動一個進程以保存數(shù)據(jù)文件,然后將其發(fā)送給所有的slave端機器,確保所有的slave端機器都正常
搭建Redis主從復制
實驗環(huán)境:
主從 | 虛機 | IP地址 |
---|---|---|
master | centos7-1 | 192.168.137.10 |
slave1 | centos7-2 | 192.168.137.20 |
實驗步驟
所有節(jié)點安裝Redis
#關(guān)閉防火墻
systemctl stop firewalld
setenforce 0
#安裝環(huán)境依賴包,下載編譯工具
yum install -y gcc gcc-c++ make
?
#上傳軟件包并解壓
cd /opt/
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/
#開2核編譯安裝,指定安裝路徑為/usr/local/redis
make -j2 && make PREFIX=/usr/local/redis install
#由于Redis源碼包中直接提供了Makefile 文件,所以在解壓完軟件包后,不用先執(zhí)行./configure 進行配置,可直接執(zhí)行make與make install命令進行安裝。
?
#執(zhí)行軟件包提供的install_server.sh 腳本文件,設(shè)置Redis服務(wù)所需要的相關(guān)配置文件
cd /opt/redis-5.0.7/utils
./install_server.sh
.......#一直回車
Please select the redis executable path [] /usr/local/redis/bin/redis-server
#這里默認為/usr/local/bin/redis-server,需要手動修改為/usr/local/redis/bin/redis-server,注意要一次性正確輸入
?
?---------------------- 虛線內(nèi)是注釋 ----------------------------------------------------
?Selected config:
?Port: 6379 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#默認偵聽端口為6379
?Config file: /etc/redis/6379.conf ? ? ? ? ? ? ? #配置文件路徑
?Log file: /var/log/redis_6379.log ? ? ? ? ? ? ? #日志文件路徑
?Data dir : /var/lib/redis/6379 ? ? ? ? ? ? ? ? ?#數(shù)據(jù)文件路徑
?Executable: /usr/local/redis/bin/redis-server ? #可執(zhí)行文件路徑
?Cli Executable : /usr/local/bin/redis-cli ? ? ? #客戶端命令工具
?-----------------------------------------------------------------------------------
?
#當install_server.sh 腳本運行完畢,Redis 服務(wù)就已經(jīng)啟動,默認監(jiān)聽端口為6379
netstat -natp | grep redis
?
#把redis的可執(zhí)行程序文件放入路徑環(huán)境變量的目錄中,便于系統(tǒng)識別
ln -s /usr/local/redis/bin/* /usr/local/bin/
?
#Redis服務(wù)控制
/etc/init.d/redis_6379 stop ? ? #停止
/etc/init.d/redis_6379 start ? ?#啟動
/etc/init.d/redis_6379 restart ?#重啟
/etc/init.d/redis_6379 status ? #查看狀態(tài)
?修改master節(jié)點的配置文件
vim /etc/redis/6379.conf
bind 0.0.0.0 ? ? ? ? ? ? ? ? ? ? ?#70行,修改監(jiān)聽地址為0.0.0.0(生產(chǎn)環(huán)境中需要填寫物理網(wǎng)卡的IP)
daemonize yes ? ? ? ? ? ? ? ? ? ? #137行,開啟守護進程,后臺啟動
logfile /var/log/redis_6379.log ? #172行,指定日志文件存放目錄
dir /var/lib/redis/6379 ? ? ? ? ? #264行,指定工作目錄
appendonly yes ? ? ? ? ? ? ? ? ? ?#700行,開啟AOF持久化功能
?
/etc/init.d/redis_6379 restart ? ? #重啟redis服務(wù)
?修改slave節(jié)點的配置文件
#修改slave1的配置文件
vim /etc/redis/6379.conf
bind 0.0.0.0 ? ? ? ? ? ? ? ? ? ? ? ?#70行,修改監(jiān)聽地址為0.0.0.0(生產(chǎn)環(huán)境中需要填寫物理網(wǎng)卡的IP)
daemonize yes ? ? ? ? ? ? ? ? ? ? ? #137行,開啟守護進程,后臺啟動
logfile /var/log/redis_6379.log ? ? #172行,指定日志文件目錄
dir /var/lib/redis/6379 ? ? ? ? ? ? #264行,指定工作目錄
replicaof 192.168.137.10 6379 ? ? ? #288行,指定要同步的Master節(jié)點的IP和端口
appendonly yes ? ? ? ? ? ? ? ? ? ? ?#700行,修改為yes,開啟AOF持久化功能
?
/etc/init.d/redis_6379 restart ?#重啟redis
netstat -natp | grep redis ? ? ?#查看主從服務(wù)器是否已建立連接
??驗證主從效果
主節(jié)點查看日志,并插入一條數(shù)據(jù)
[root@192 utils]# tail /var/log/redis_6379.log
8339:M 28 May 2023 16:50:13.198 * Reading RDB base file on AOF loading...
8339:M 28 May 2023 16:50:13.198 * Loading RDB produced by version 7.0.9
8339:M 28 May 2023 16:50:13.198 * RDB age 32 seconds
8339:M 28 May 2023 16:50:13.198 * RDB memory usage when created 0.82 Mb
8339:M 28 May 2023 16:50:13.198 * RDB is base AOF
8339:M 28 May 2023 16:50:13.198 * Done loading RDB, keys loaded: 0, keys expired: 0.
8339:M 28 May 2023 16:50:13.198 * DB loaded from base file appendonly.aof.1.base.rdb: 0.000 seconds
8339:M 28 May 2023 16:50:13.198 * DB loaded from append only file: 0.000 seconds
8339:M 28 May 2023 16:50:13.198 * Opening AOF incr file appendonly.aof.1.incr.aof on server start
8339:M 28 May 2023 16:50:13.198 * Ready to accept connections
[root@192 utils]# redis-cli
127.0.0.1:6379> set name cxk
OK
127.0.0.1:6379> kes *
(error) ERR unknown command 'kes', with args beginning with: '*'
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"cxk"
?從節(jié)點查看
?Redis哨兵模式
主從切換技術(shù)的方法是:當服務(wù)器宕機后,需要手動一臺從機切換為主機,這需要人工干預,不僅費時費力而且還會造成一段時間內(nèi)服務(wù)不可用。為了解決主從復制的缺點,就有了哨兵機制。
哨兵的核心功能:在主從復制的基礎(chǔ)上,哨兵引入了主節(jié)點的自動故障轉(zhuǎn)移
哨兵模式的作用
-
監(jiān)控: 哨兵會不斷地檢查主節(jié)點和從節(jié)點是否運作正常。
-
自動故障轉(zhuǎn)移: 當主節(jié)點不能正常工作時,哨兵會開始自動故障轉(zhuǎn)移操,它會將失效主節(jié)點的其中一個從節(jié)點升級為新的主節(jié)點,并讓其它從節(jié)點改為復制新的主節(jié)點。
-
通知(提醒): 哨兵可以將故障轉(zhuǎn)移的結(jié)果發(fā)送給客戶端
?哨兵結(jié)構(gòu)
哨兵節(jié)點:??哨兵系統(tǒng)由一個或多個哨兵節(jié)點組成,哨兵節(jié)點是特殊的redis節(jié)點,不存儲數(shù)據(jù)。
數(shù)據(jù)節(jié)點:??主節(jié)點和從節(jié)點都是數(shù)據(jù)節(jié)點
故障轉(zhuǎn)移機制1、由哨兵節(jié)點定期監(jiān)控發(fā)現(xiàn)主節(jié)點是否出現(xiàn)了故障
每個哨兵節(jié)點每隔1秒會問主節(jié)點、從節(jié)點及其它哨兵節(jié)點發(fā)送一次ping命令做一次心檢測。如果主節(jié)點在一定時間范圍內(nèi)不回復或者是回復一個錯誤消息,那么這個哨兵就會認為這個主節(jié)點主觀下線了(單方面的)。當超過半數(shù)哨兵節(jié)點認為該主節(jié)點主觀下線了,這樣就客觀下線了。
2、當主節(jié)點出現(xiàn)故障,此時哨兵節(jié)點會通過Raft算法(選舉算法)實現(xiàn)選舉機制共同選舉出一個哨兵節(jié)點為leader,來負責處理主節(jié)點的故障轉(zhuǎn)移和通知。所以整個運行哨兵的集群的數(shù)量不得少于3個節(jié)點。
3、由leader哨兵節(jié)點執(zhí)行故障轉(zhuǎn)移,過程如下:
- 將某一個從節(jié)點升級為新的主節(jié)點,讓其它從節(jié)點指向新的主節(jié)點;
- 若原主節(jié)點恢復也變成從節(jié)點,并指向新的主節(jié)點;
- 通知客戶端主節(jié)點已經(jīng)更換。
需要特別注意的是,客觀下線是主節(jié)點才有的概念;如果從節(jié)點和哨兵節(jié)點發(fā)生故障,被哨兵主觀下線后,不會再有后續(xù)的客觀下線和故障轉(zhuǎn)移操作
主節(jié)點的選舉
1.過濾掉不健康的(己下線的),沒有回復哨兵ping響應的從節(jié)點。
2.選擇配置文件中從節(jié)點優(yōu)先級配置最高的。(replica-priority,默認值為100)
3.選擇復制偏移量最大,也就是復制最完整的從節(jié)點。
哨兵的啟動依賴于主從模式,所以須把主從模式安裝好的情況下再去做哨兵模式
搭建Redis哨兵模式
實驗環(huán)境:
節(jié)點 | 虛機 | IP地址 |
---|---|---|
master | centos7-1 | 192.168.137.10 |
slave1 | centos7-2 | 192.168.137.15 |
slave2 | centos7-3 | 192.168.137.20 |
Sentinel-1 | centos7-4 | 192.168.137.30 |
Sentinel-2 | centos7-5 | 192.168.137.40 |
Sentinel-3 | centos7-6 | 192.168.137.50 |
生產(chǎn)環(huán)境中使用對應數(shù)量節(jié)點的服務(wù)器作為哨兵節(jié)點,實驗環(huán)境中如果電腦性能不夠可以把哨兵搭建在原虛機上
實驗步驟
所有節(jié)點安裝Redis
master和slave部署Redis主從復制
修改Sentinel-1的配置文件,之后scp傳給另外2個哨兵節(jié)點
vim /opt/redis-5.0.7/sentinel.conf
......
protected-mode no ? ? ? ? ? ? ? ?#17行,取消注釋,關(guān)閉保護模式
port 26379 ? ? ? ? ? ? ? ? ? ? ? #21行,Redis哨兵默認的監(jiān)聽端口
daemonize yes ? ? ? ? ? ? ? ? ? ?#26行,指定sentinel為后臺啟動
logfile "/var/log/sentinel.log" ?#36行,指定日志文件存放路徑
dir "/var/lib/redis/6379" ? ? ? ?#65行,指定數(shù)據(jù)庫存放路徑
sentinel monitor mymaster 192.168.137.10 6379 2 ?#84行,修改
#指定該哨兵節(jié)點監(jiān)控192.168.121.10:6379這個主節(jié)點,該主節(jié)點的名稱是mymaster。
#最后的2的含義與主節(jié)點的故障判定有關(guān):至少需要2個哨兵節(jié)點同意,才能判定主節(jié)點故障并進行故障轉(zhuǎn)移
?
sentinel down-after-milliseconds mymaster 3000 ?#113行,判定服務(wù)器down掉的時間周期,默認30000毫秒(30秒)
sentinel failover-timeout mymaster 180000 ?#146行,同一個sentinel對同一個master兩次failover之間的間隔時間(180秒)
?
#傳給兩外2個哨兵節(jié)點
scp /opt/redis-5.0.7/sentinel.conf ?192.168.137.40:/opt/redis-5.0.7/
scp /opt/redis-5.0.7/sentinel.conf ?192.168.137.50:/opt/redis-5.0.7/
啟動哨兵模式(所有哨兵節(jié)點操作)
#啟動三臺哨兵
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &
查看哨兵信息
#在哨兵節(jié)點查看
[root@localhost ~]# redis-cli -p 26379 info Sentinel
# Sentinel
sentinel_masters:1 ? ? #一臺主節(jié)點
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.137.10:6379,slaves=2,sentinels=3
#可以看到主節(jié)點地址,2臺從節(jié)點,3臺哨兵
模擬故障
#在Master 上查看redis-server進程號:
[root@localhost ~]# ps -ef | grep redis
root ? ? ?71245 ? ? ?1 ?0 6月19 ? ? ? ? 00:00:05 /usr/local/redis/bin/redis-server 0.0.0.0:6379
root ? ? ?71983 ?66681 ?0 00:59 pts/1 ? ?00:00:00 grep --color=auto redis
?
#殺死 Master 節(jié)點上redis-server的進程號
[root@localhost ~]# kill -9 71245 ? ? ? #Master節(jié)點上redis-server的進程號
[root@localhost ~]# netstat -natp | grep redis
?
#在哨兵上查看日志,驗證master是否切換至從服務(wù)器
[root@localhost redis-5.0.7]# tail -f /var/log/sentinel.log
7084:X 20 Jun 2022 00:46:58.869 * +sentinel sentinel ce975c271f86d8f6e0b80162529752b754ecfc69 192.168.137.40 26379 @ mymaster 192.168.137.10 6379
7084:X 20 Jun 2022 00:47:56.595 * +sentinel sentinel d59ba9daf957b704715feeee3c53bd1bf8b3a5d8 192.168.137.50 26379 @ mymaster 192.168.137.10 6379
7084:X 20 Jun 2022 01:01:33.484 # +sdown master mymaster 192.168.137.10 6379
7084:X 20 Jun 2022 01:01:33.561 # +new-epoch 1
7084:X 20 Jun 2022 01:01:33.561 # +vote-for-leader ce975c271f86d8f6e0b80162529752b754ecfc69 1
7084:X 20 Jun 2022 01:01:34.476 # +config-update-from sentinel ce975c271f86d8f6e0b80162529752b754ecfc69 192.168.137.40 26379 @ mymaster 192.168.137.10 6379
7084:X 20 Jun 2022 01:01:34.476 # +switch-master mymaster 192.168.137.10 6379 192.168.121.30 6379
7084:X 20 Jun 2022 01:01:34.477 * +slave slave 192.168.137.15:6379 192.168.137.15 6379 @ mymaster 192.168.121.30 6379
7084:X 20 Jun 2022 01:01:34.477 * +slave slave 192.168.137.10:6379 192.168.137.10 6379 @ mymaster 192.168.121.30 6379
7084:X 20 Jun 2022 01:02:04.493 # +sdown slave 192.168.137.10:6379 192.168.137.10 6379 @ mymaster 192.168.137.20 6379
?
?
#在哨兵上查看主節(jié)點是否切換成功
[root@localhost ~]# 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.137.20:6379,slaves=2,sentinels=3
Redis 集群模式
集群,即Redis Cluster,是Redis3.0開始引入的分布式存儲方案。
集群由多個節(jié)點(Node)組成,Redis的數(shù)據(jù)分布在這些節(jié)點中。集群中的節(jié)點分為主節(jié)點和從節(jié)點:只有主節(jié)點負責讀寫請求和集群信息的維護;從節(jié)點只進行主節(jié)點數(shù)據(jù)和狀態(tài)信息的復制
?集群的作用
(1)數(shù)據(jù)分區(qū): 數(shù)據(jù)分區(qū)(或稱數(shù)據(jù)分片)是集群最核心的功能。
- 集群將數(shù)據(jù)分散到多個節(jié)點,一方面突破了Redis單機內(nèi)存大小的限制,存儲容量大大增加;另一方面每個主節(jié)點都可以對外提供讀服務(wù)和寫服務(wù),大大提高了集群的響應能力。
- Redis單機內(nèi)存大小受限問題,在介紹持久化和主從復制時都有提及;例如,如果單機內(nèi)存太大,bgsave和bgrewriteaof的fork操作可能導致主進程阻塞,主從環(huán)境下主機切換時可能導致從節(jié)點長時間無法提供服務(wù),全量復制階段主節(jié)點的復制緩沖區(qū)可能溢出。
(2)高可用: 集群支持主從復制和主節(jié)點的自動故障轉(zhuǎn)移(與哨兵類似);當任一節(jié)點發(fā)生故障時,集群仍然可以對外提供服務(wù)。
通過集群,Redis解決了寫操作無法負載均衡,以及存儲能力受到單機限制的問題,實現(xiàn)了較為完善的高可用方案。
Redis集群的數(shù)據(jù)分片
Redis集群引入了哈希槽的概念。
Redis集群有16384個哈希槽(編號0-16383)。
集群的每個節(jié)點負責一部分哈希槽。
每個Key通過CRC16校驗后對16384取余來決定放置哪個哈希槽,通過這個值,去找到對應的插槽所對應的節(jié)點,然后直接自動跳轉(zhuǎn)到這個對應的節(jié)點上進行存取操作文章來源:http://www.zghlxwxcb.cn/news/detail-462501.html
集群模式的主從復制模型
- 集群中具有A、B、C三個節(jié)點,如果節(jié)點B失敗了,整個集群就會因缺少5461-10922這個范圍的槽而不可以用。
- 為每個節(jié)點添加一個從節(jié)點A1、B1、C1整個集群便有三個Master節(jié)點和三個slave節(jié)點組成,在節(jié)點B失敗后,集群選舉B1位為主節(jié)點繼續(xù)服務(wù)。當B和B1都失敗后,集群將不可用
搭建 Redis 集群
實驗步驟:
所有節(jié)點安裝Redis
開啟集群功能
cd /opt/redis-5.0.7/
vim redis.conf
......
bind 192.168.137.10 ? ? ? ? ? ? ? ? ? ? ? #69行,修改為監(jiān)聽自己的物理網(wǎng)卡IP
protected-mode no ? ? ? ? ? ? ? ? ? ? ? ? #88行,修改為no,關(guān)閉保護模式
port 6379 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #92行,redis默認監(jiān)聽端口
daemonize yes ? ? ? ? ? ? ? ? ? ? ? ? ? ? #136行,開啟守護進程,以獨立進程啟動
appendonly yes ? ? ? ? ? ? ? ? ? ? ? ? ? ?#700行,修改為yes,開啟AOF持久化
cluster-enabled yes ? ? ? ? ? ? ? ? ? ? ? #832行,取消注釋,開啟群集功能
cluster-config-file nodes-6379.conf ? ? ? #840行,取消注釋,群集名稱文件設(shè)置
cluster-node-timeout 15000 ? ? ? ? ? ? ? ?#846行,取消注釋,群集超時時間設(shè)置
?
?
#將文件傳給另外5個節(jié)點,之后每個節(jié)點要修改監(jiān)聽地址為自己的IP
[root@localhost redis-5.0.7]# scp redis.conf 192.168.137.15:`pwd`
[root@localhost redis-5.0.7]# scp redis.conf 192.168.137.20:`pwd`
[root@localhost redis-5.0.7]# scp redis.conf 192.168.137.30:`pwd`
[root@localhost redis-5.0.7]# scp redis.conf 192.168.137.40:`pwd`
[root@localhost redis-5.0.7]# scp redis.conf 192.168.137.50:`pwd`
所有節(jié)點啟動redis服務(wù)
cd /opt/redis-5.0.7/
redis-server redis.conf ? #啟動redis節(jié)點
?啟動集群
在任意一個節(jié)點啟動集群即可。文章來源地址http://www.zghlxwxcb.cn/news/detail-462501.html
redis-cli --cluster create 192.168.137.10:6379 192.168.137.15:6379 192.168.137.20:6379 192.168.137.30:6379 192.168.137.40:6379 192.168.137.50:6379 --cluster-replicas 1
#六個主機分為三組,三主三從,前面的做主節(jié)點后面的做從節(jié)點下免交互的時候需要輸入yes才可以創(chuàng)建 "-replicas 1"表示每個主節(jié)點有一個從節(jié)點
#前三臺為Master,后三臺為Slave
測試集群
#加-c參數(shù),節(jié)點之間就可以互相跳轉(zhuǎn)
redis-cli -h 192.168.137.10 -p 6379 -c
#查看節(jié)點的哈希槽編號范圍
cluster slots ? ?
#賦值
set name yuji
#查看鍵的哈希槽編號
cluster keyslot 鍵名
?
?
[root@mas ~]# redis-cli -h 192.168.137.10 -p 6379 -c
192.168.121.10:6379> cluster slots ? ? #查看節(jié)點的哈希槽編號范圍
1) 1) (integer) 10923 ? ? ? ? #第一對主從的哈希槽編號范圍
? 2) (integer) 16383
? 3) 1) "192.168.137.15" ? ? #主節(jié)點
? ? ?2) (integer) 6379
? ? ?3) "5f117a3e204d1d6f6dc924ad8b39034a8e9f3261"
? 4) 1) "192.168.137.30" ? ? #從節(jié)點
? ? ?2) (integer) 6379
? ? ?3) "4a05a086eec06fa4da58b15512d1c81184bc5ee5"
2) 1) (integer) 5461 ? ? ? ? #第二對主從的哈希槽編號范圍
? 2) (integer) 10922
? 3) 1) "192.168.121.20" ? ?#主節(jié)點
? ? ?2) (integer) 6379
? ? ?3) "3008bba29dfbf342bc448ba3062b0a331c8d009e"
? 4) 1) "192.168.137.50" ? ?#從節(jié)點
? ? ?2) (integer) 6379
? ? ?3) "ee61a4709d6420bb540b2c28218fdd2dfe358b7a"
3) 1) (integer) 0 ? ? ? ? ? ?#第三對主從的哈希槽編號范圍
? 2) (integer) 5460
? 3) 1) "192.168.137.10" ? ?#主節(jié)點
? ? ?2) (integer) 6379
? ? ?3) "d1ddb554b3edaebefa6672b2f1f8171393e1f7f3"
? 4) 1) "192.168.137.40" ? ?#從節(jié)點
? ? ?2) (integer) 6379
? ? ?3) "71e1f705ce01ca31ab16fa3cf07d7e6cbfab5978"
192.168.121.10:6379>
?
?
#在10節(jié)點新建name鍵,會自動跳轉(zhuǎn)到20節(jié)點進行存放 ? ?
192.168.121.10:6379> set name yuji ?
-> Redirected to slot [5798] located at 192.168.137.15:6379
OK
192.168.121.20:6379> cluster keyslot name ? ?#查看name鍵的哈希槽編號
(integer) 5798
192.168.121.20:6379> quit ? ? #退出數(shù)據(jù)庫
[root@mas ~]# redis-cli -h 192.168.137.10 -p 6379 -c ? #重新登錄10節(jié)點
192.168.121.10:6379> keys * ? ? #10節(jié)點中沒有name鍵
(empty list or set)
192.168.121.10:6379> get name ? #查看name鍵的值,會根據(jù)鍵的哈希槽編號自動跳轉(zhuǎn)到20節(jié)點進行獲取
-> Redirected to slot [5798] located at 192.168.137.15:6379
"yuji"
192.168.121.20:6379> ? ? ? ? ? ?#已跳轉(zhuǎn)到20節(jié)點
?
到了這里,關(guān)于DAY 68 redis高可用的主從復制、哨兵、cluster集群的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!