Redis高可用-Cluster
Redis有三種高可用方案:主從,哨兵(sentinel),集群(cluster)。哨兵和集群模式都是基于redis主從來實(shí)現(xiàn)的,普通的redis主從無法實(shí)現(xiàn)自動(dòng)的高可用切換。
哨兵模式是在redis主從節(jié)點(diǎn)外圍部署哨兵集群,哨兵集群是一類特殊的redis,是基于quorum協(xié)議的監(jiān)控集群,至少需要三個(gè)節(jié)點(diǎn),哨兵集群會(huì)對(duì)redis主從節(jié)點(diǎn)狀態(tài)進(jìn)行監(jiān)控,如果設(shè)定值個(gè)數(shù)(一般使用多數(shù)派)的哨兵監(jiān)控到主節(jié)點(diǎn)的失敗,會(huì)協(xié)商進(jìn)行主從切換。一套哨兵集群可以監(jiān)控多套redis主從,具體配置步驟不再贅述。
集群模式也稱為redis cluster,redis cluster是一個(gè)多節(jié)點(diǎn)分布式緩存,架構(gòu)與分布式數(shù)據(jù)庫有些類似,redis key的crc16值被hash到16384個(gè)slot中,所以每個(gè)節(jié)點(diǎn)存儲(chǔ)一部分redis數(shù)據(jù),所有節(jié)點(diǎn)組成完整的redis集群。客戶端可以對(duì)每個(gè)redis節(jié)點(diǎn)進(jìn)行讀寫,但是同一時(shí)刻只能操作一個(gè)key。
redis集群的優(yōu)勢(shì)在于可以快速的實(shí)現(xiàn)擴(kuò)縮容,可以在線的新增和刪除節(jié)點(diǎn)。另外不同于sentinel模式,redis cluster中所有服務(wù)器都可以看做主節(jié)點(diǎn),都可以進(jìn)行讀寫,所有服務(wù)器的資源得到了利用。在高可用方案,每個(gè)redis主節(jié)點(diǎn)在另外的服務(wù)器上都會(huì)有一到多個(gè)備份的副本,并且基于多數(shù)派實(shí)現(xiàn)了主節(jié)點(diǎn)失敗時(shí)的自動(dòng)切換,可以容納集群少數(shù)節(jié)點(diǎn)同時(shí)失敗。
下面以兩臺(tái)機(jī)器為例簡單看下redis cluster的搭建步驟
兩臺(tái)機(jī)器分別創(chuàng)建redis目錄:
[][][][][][]
將編譯好的redis二進(jìn)制包(編譯過程略,默認(rèn)redis源碼包里也有編譯好的二進(jìn)制文件)拷貝到7001目錄中,一般我習(xí)慣使用的目錄結(jié)構(gòu)如下
redis-cluster/
└── 7001
├── bin
├── data
├── etc
└── log
編輯配置文件
vi /redis-cluster/7001/etc/redis.confbind 0.0.0.0port 7001pidfile /var/run/redis_7001.pidloglevel noticelogfile "/redis-cluster/7001/log/redis_7001.log"dir /redis-cluster/7001/data/redis-cluster/nodes-7001.confdaemonize yessupervised noappendonly yesyes5000save 900 1save 300 10save 60 10000dbfilename dump.rdbappendfilename "appendonly.aof"appendfsync everysec
按照一樣的步驟拷貝配置其他五個(gè)節(jié)點(diǎn),然后啟動(dòng)六個(gè)redis節(jié)點(diǎn),可以放在腳本中
[][][][][][]
執(zhí)行命令進(jìn)行集群創(chuàng)建
~]# redis-cli --cluster create 192.168.1.1:7001 192.168.1.1:7002 192.168.1.1:7003 192.168.1.2:7004 192.168.1.2:7005 192.168.1.2:7006 --cluster-replicas 1Performing hash slots allocation on 6 nodes...-> Slots 0 - 5460-> Slots 5461 - 10922-> Slots 10923 - 16383Adding replica 192.168.1.2:7006 to 192.168.1.1:7001Adding replica 192.168.1.1:7003 to 192.168.1.2:7004Adding replica 192.168.1.2:7005 to 192.168.1.1:7002M: 5fca048d05b26211e5ccb8b932b6327d31773822 192.168.1.1:7001slots:[0-5460] (5461 slots) masterM: 4f98b53609307f11674b60bd84caecce3ff8d18e 192.168.1.1:7002slots:[10923-16383] (5461 slots) masterS: fddf4c97eeb6f59d0de9e45cb0899b309e90d537 192.168.1.1:7003replicates 84e20fd036d2b1c37d0071a632b08138490f0173M: 84e20fd036d2b1c37d0071a632b08138490f0173 192.168.1.2:7004slots:[5461-10922] (5462 slots) masterS: 9769e3b34a0bdee505bba06a8dc924928917671b 192.168.1.2:7005replicates 4f98b53609307f11674b60bd84caecce3ff8d18eS: 9c6d002711965fbcbc945fa6ba99ab18b4c04810 192.168.1.2:7006replicates 5fca048d05b26211e5ccb8b932b6327d31773822Can I set the above configuration? (type 'yes' to accept): yesNodes configuration updatedAssign a different config epoch to each nodeSending CLUSTER MEET messages to join the clusterWaiting for the cluster to join..Performing Cluster Check (using node 192.168.1.1:7001)M: 5fca048d05b26211e5ccb8b932b6327d31773822 192.168.1.1:7001slots:[0-5460] (5461 slots) master1 additional replica(s)M: 84e20fd036d2b1c37d0071a632b08138490f0173 192.168.1.2:7004slots:[5461-10922] (5462 slots) master1 additional replica(s)S: fddf4c97eeb6f59d0de9e45cb0899b309e90d537 192.168.1.1:7003slots: (0 slots) slavereplicates 84e20fd036d2b1c37d0071a632b08138490f0173S: 9769e3b34a0bdee505bba06a8dc924928917671b 192.168.1.2:7005slots: (0 slots) slavereplicates 4f98b53609307f11674b60bd84caecce3ff8d18eM: 4f98b53609307f11674b60bd84caecce3ff8d18e 192.168.1.1:7002slots:[10923-16383] (5461 slots) master1 additional replica(s)S: 9c6d002711965fbcbc945fa6ba99ab18b4c04810 192.168.1.2:7006slots: (0 slots) slavereplicates 5fca048d05b26211e5ccb8b932b6327d31773822All nodes agree about slots configuration.Check for open slots...Check slots coverage...All 16384 slots covered.
集群相關(guān)檢查命令
[][]
