個(gè)人記錄,謹(jǐn)慎參考屉符,歡迎指正剧浸,謝謝
針對(duì)redis的使用過程中,不斷地遇到問題矗钟,redis也在不斷發(fā)展
目前接觸到的主要策略有:主從備份唆香、哨兵機(jī)制、搭建集群吨艇。
一躬它、 配置多個(gè)redis服務(wù)
Redis安裝后,默認(rèn)安裝到
/usr/local/bin
目錄下东涡,端口默認(rèn)6379
安裝多個(gè)redis服務(wù)最簡單粗暴的就是復(fù)制這個(gè)bin冯吓。
步驟:
- 找一個(gè)自己喜歡的路徑(理論上憑喜好倘待,注意避開具有特殊功能的目錄),新建一個(gè)redis文件夾
mkdir redis
- 為了方便管理组贺,可以另外新建若干個(gè)文件夾延柠,以端口號(hào)命名,用來區(qū)分不同的redis锣披,
- 例如
mkdir 6380
- 將bin復(fù)制進(jìn)去
cp /usr/local/bin/* redis/6380
, - 修改端口號(hào):
vi redis.conf
替換:%s/6379/6380/g
- 保存退出
配置集體啟動(dòng)/關(guān)閉
當(dāng)服務(wù)多了起來后贞间,包括后期搭建集群,為了方便統(tǒng)一開關(guān)服務(wù)雹仿,我們可以配置集群啟動(dòng):
- 在保存不同端口服務(wù)的redis目錄下增热,新建一個(gè)文件
vi startRedis.sh
-
將所有redis開啟步驟編寫進(jìn)去: 開啟關(guān)閉
- 關(guān)閉同上,注意端口
- 保存并退出文檔胧辽,文件名沒有加粗 峻仇,此時(shí)還只是個(gè)文件,并不能起到服務(wù)的作用
- 提高開啟和關(guān)閉的權(quán)限邑商,使它成為服務(wù)
chmod +x start.sh(文件全名)
- 成為服務(wù)后摄咆,文件名就成粗體 ,就可以通過
./start.sh
統(tǒng)一開啟服務(wù)了人断,如圖:
打印日志 - 使用命令查看是否開啟成功
ps aux|grep redis
三個(gè)服務(wù)都已經(jīng)啟動(dòng)
二吭从、 主從備份
Redis的持久化保證了即使redis服務(wù)重啟也會(huì)丟失數(shù)據(jù) ,因?yàn)閞edis服務(wù)重啟后會(huì)將硬盤上持久化的數(shù)據(jù)恢復(fù)到內(nèi)存中恶迈,但當(dāng)redis服務(wù)器的硬盤損壞了可能會(huì)導(dǎo)致數(shù)據(jù)丟失 涩金,如果通過redis的主從復(fù)制機(jī)制可以避免這種單點(diǎn)故障。
相較于普通的單節(jié)點(diǎn)使用暇仲,主從配置最大的特點(diǎn)就是主從實(shí)例間數(shù)據(jù)實(shí)時(shí)同步步做,并且提供數(shù)據(jù)持久化和備份策略。
1. 配置
進(jìn)入要作為從節(jié)點(diǎn)redis的bin目錄奈附,打開redis.conf文件全度,
找到#slaveof <masterip> <masterport>
修改為slaveof 主節(jié)點(diǎn)IP 主節(jié)點(diǎn)端口
。
配置完畢后重啟所有redis服務(wù)斥滤,查詢節(jié)點(diǎn)狀態(tài)后如圖:
2. 測試
存入字段,顯示存入成功接下來打開rdm中跌,查看從節(jié)點(diǎn)是否成功備份
主從配置成功
3. 優(yōu)點(diǎn)
- 高可靠性咨堤,開啟數(shù)據(jù)持久化功能和配置合理的備份策略,能有效的解決數(shù)據(jù)誤操作和數(shù)據(jù)異常丟失的問題漩符。
- 讀寫分離策略一喘,從節(jié)點(diǎn)可以擴(kuò)展主庫節(jié)點(diǎn)的讀能力,有效應(yīng)對(duì)大并發(fā)量的讀操作。
4. 缺點(diǎn)
故障恢復(fù)復(fù)雜凸克,當(dāng)主庫節(jié)點(diǎn)出現(xiàn)故障時(shí)议蟆,需要手動(dòng)將一個(gè)從節(jié)點(diǎn)晉升為主節(jié)點(diǎn),同時(shí)需要通知業(yè)務(wù)方變更配置萎战,并且需要讓其他從庫節(jié)點(diǎn)去復(fù)制新主庫節(jié)點(diǎn)咐容,整個(gè)過程需要人為干預(yù),比較繁瑣蚂维。
三戳粒、 哨兵機(jī)制
由若干Sentinel 節(jié)點(diǎn)組成的分布式集群,可以實(shí)現(xiàn)故障發(fā)現(xiàn)虫啥,故障自動(dòng)轉(zhuǎn)移蔚约,配置中心和客戶端通知。Redis Sentinel 的節(jié)點(diǎn)數(shù)量要滿足
2n + 1(n>=1)
的奇數(shù)個(gè)涂籽。
redis的哨兵機(jī)制是從redis2.8開始支持苹祟。
redis的sentinel系統(tǒng)用于管理多個(gè)redis服務(wù)器,該系統(tǒng)主要執(zhí)行三個(gè)任務(wù):監(jiān)控评雌、提醒树枫、自動(dòng)故障轉(zhuǎn)移。
1景东、監(jiān)控(Monitoring):Redis Sentinel實(shí)時(shí)監(jiān)控主服務(wù)器和從服務(wù)器運(yùn)行狀態(tài)砂轻,并且實(shí)現(xiàn)自動(dòng)切換。
2耐薯、提醒(Notification):當(dāng)被監(jiān)控的某個(gè)Redis服務(wù)器出現(xiàn)問題時(shí)舔清,Redis Sentinel可以向系統(tǒng)管理員發(fā)送通知丝里,也可以通過API向其他程序發(fā)送通知曲初。
3、自動(dòng)故障轉(zhuǎn)移(Automatic failover):當(dāng)一個(gè)主服務(wù)器不能正常工作時(shí)杯聚,Redis Sentinel可以將一個(gè)從服務(wù)器升級(jí)為主服務(wù)器臼婆,并對(duì)其他從服務(wù)器進(jìn)行配置,讓它們使用新的主服務(wù)器幌绍。當(dāng)應(yīng)用程序連接Redis服務(wù)器時(shí)颁褂,Redis Sentinel會(huì)告之新的主服務(wù)器地址和端口。
1. 配置
哨兵模式需要配置的僅僅是哨兵系統(tǒng)
在主從備份服務(wù)文件夾(redis)的目錄下新建一個(gè)目錄
mkdir redis-sentinel
(方便管理)將redis(主從服務(wù))三個(gè)服務(wù)分別復(fù)制過來
例如:cp –rf redis/6379 redis-sentinel/26379
進(jìn)入redis-sentinel目錄刪除每一個(gè)的redis.conf
rm -rf 26379/redis.conf
從redis-4.0.11目錄中把sentinel.conf文件復(fù)制到每一個(gè)哨兵服務(wù)
修改每一個(gè)sentinel.conf:
a)# protected-mode no
取消注釋傀广,改為protected-mode no
b)sentinel monitor mymaster 192.168.11.128 6379 2
其中地址改為主redis節(jié)點(diǎn)地址颁独,2表示的是當(dāng)兩個(gè)或兩個(gè)以上的哨兵認(rèn)為主節(jié)點(diǎn)掛掉,進(jìn)行failover操作
c) 加入daemonize yes
用來后臺(tái)啟動(dòng)哨兵服務(wù)伪冰,避免服務(wù)阻塞啟動(dòng)哨兵服務(wù)(單個(gè)) 進(jìn)入26379目錄誓酒,執(zhí)行命令
./redis-sentinel sentinel.conf
這里我們也可以把哨兵服務(wù)的啟動(dòng)集合到一個(gè)文件里面注冊(cè)成服務(wù),同多個(gè)redis服務(wù)
2. 啟動(dòng)測試
3. 模擬錯(cuò)誤
通過命令殺掉主節(jié)點(diǎn)進(jìn)程
隨便進(jìn)入一個(gè)從節(jié)點(diǎn),查看信息
此時(shí)靠柑,6380身份還是從節(jié)點(diǎn)寨辩,但是主節(jié)點(diǎn)變成了6381,哨兵機(jī)制配置成功
4. 優(yōu)點(diǎn)
部署簡單
能夠解決 Redis 主從模式下的高可用切換問題
可以實(shí)現(xiàn)一套 Sentinel 監(jiān)控一組 Redis 數(shù)據(jù)節(jié)點(diǎn)或多組數(shù)據(jù)節(jié)點(diǎn)
5. 缺點(diǎn)
部署相對(duì) Redis 主從模式要復(fù)雜一些歼冰,原理理解更繁瑣
資源浪費(fèi)靡狞,Redis 數(shù)據(jù)節(jié)點(diǎn)中 slave 節(jié)點(diǎn)作為備份節(jié)點(diǎn)不提供服務(wù)
不能解決讀寫分離問題,實(shí)現(xiàn)起來相對(duì)復(fù)雜
Redis Sentinel 主要是針對(duì) Redis 數(shù)據(jù)節(jié)點(diǎn)中的主節(jié)點(diǎn)的高可用切換隔嫡,對(duì) Redis 的數(shù)據(jù)節(jié)點(diǎn)做失敗判定分為主觀下線和客觀下線兩種甸怕,對(duì)于 Redis 的從節(jié)點(diǎn)有對(duì)節(jié)點(diǎn)做主觀下線操作,并不執(zhí)行故障轉(zhuǎn)移腮恩。
四蕾各、 集群模式 redis-cluster
Redis Cluster 是社區(qū)版推出的 Redis 分布式集群解決方案,主要解決 Redis 分布式方面的需求庆揪,比如,當(dāng)遇到單機(jī)內(nèi)存缸榛,并發(fā)和流量等瓶頸的時(shí)候,Redis Cluster 能起到很好的負(fù)載均衡的目的钧排。
Redis集群節(jié)點(diǎn)最小配置 6 個(gè)節(jié)點(diǎn)以上(3 主 3 從),其中主節(jié)點(diǎn)提供讀寫操作均澳,從節(jié)點(diǎn)作為備用節(jié)點(diǎn)恨溜,不提供請(qǐng)求找前,只作為故障轉(zhuǎn)移使用。
1. 搭建集群前的準(zhǔn)備
在local目錄下創(chuàng)建文件夾 redis-cluster
把端口為6379的bin實(shí)例拷貝到redis-cluster文件夾下躺盛,并改名(隨意)1-7001
切換到redis-cluster/1-7001目錄下项戴,刪除dump.rdb,一個(gè)干凈的redis是沒有它的
修改端口號(hào)槽惫,
vi redis.conf
快捷方式:%s/6379/7001/g
搭建集群需要開啟集群設(shè)置 把
cluster-enabled yes
的注釋打開打開
bind 127.0.0.1
的注釋并修改為虛擬機(jī)ip
退出目錄到redis-cluster目錄下界斜,拷貝5次這個(gè)實(shí)例并命名,可以配置集群啟動(dòng)
修改每一個(gè)實(shí)例的端口 快捷方式
:%s/6379/7001/g
-
啟動(dòng)redis各薇,查看進(jìn)程如下圖
啟動(dòng)成功
現(xiàn)在的集群只是空有其表,還需要將他們連接起來
2. 搭建集群所需環(huán)境
安裝ruby
ruby是一種面向?qū)ο蟪绦蛟O(shè)計(jì)的腳本語言敬扛,redis-cluster的搭建需要使用到官方提供的ruby腳本,所以搭建前需要安裝ruby環(huán)境
執(zhí)行命令
`yum –y install ruby`
`yum –y install rubygems`
安裝ruby腳本---redis-4.1.1.gem
并將其上傳到Linux谍珊。
注意:這里的版本要求不低于redis版本急侥。Redis5.0以后就不再需要ruby。
安裝redis-4.1.1.gem贝润,執(zhí)行命令 gem install redis-4.1.1.gem
這時(shí)候铝宵,可能就會(huì)報(bào)錯(cuò)了
如果有,請(qǐng)?zhí)?--> 解決辦法
3. 正式操作集群配置
進(jìn)入redis-4.0.11解壓目錄下尊蚁,打開src文件夾侣夷,有一個(gè)redis-trib.rb 是個(gè)粗體腳本文件,后綴是.rb就是ruby的縮寫
拷貝redis-trib.rb到集群目錄下
-
運(yùn)行腳本
./redis-trib.rb create --replicas 1 192.168.5.230:7001 192.168.5.230:7002 192.168.5.230:7003 192.168.5.230:7004 192.168.5.230:7005 192.168.5.230:7006 'replicas 1' 表示每個(gè)redis服務(wù)只有1臺(tái)備份機(jī)
第三步注意參數(shù),如果多寫衙传、少寫或者寫錯(cuò)ip和端口,那么集群基本需要重新搭建
- 連接集群
集群的特點(diǎn)就是每一個(gè)節(jié)點(diǎn)都可以作為入口古瓤,備份節(jié)點(diǎn)也可以作為主機(jī)腺阳。Redis提供了客戶端穿香,那么連接集群命令參照 ./1-7001/redis-cli –h “192.168.5.230” –p 7001 -c
至此皮获,集群搭建并連接成功。
4. 模擬錯(cuò)誤
-
進(jìn)入集群购公,查看數(shù)據(jù)存儲(chǔ)的節(jié)點(diǎn),強(qiáng)制殺死該節(jié)點(diǎn)
模擬錯(cuò)誤 - 再次進(jìn)入集群知残,嘗試查詢數(shù)據(jù)
再次查詢
查詢結(jié)果成功比庄,發(fā)現(xiàn)數(shù)據(jù)的存儲(chǔ)分布被動(dòng)態(tài)調(diào)整佳窑。
5. 優(yōu)點(diǎn)
無中心架構(gòu)。
數(shù)據(jù)按照 slot 存儲(chǔ)分布在多個(gè)節(jié)點(diǎn)神凑,節(jié)點(diǎn)間數(shù)據(jù)共享,可動(dòng)態(tài)調(diào)整數(shù)據(jù)分布强挫。
可擴(kuò)展性:可線性擴(kuò)展到 1000 多個(gè)節(jié)點(diǎn)薛躬,節(jié)點(diǎn)可動(dòng)態(tài)添加或刪除型宝。
高可用性:部分節(jié)點(diǎn)不可用時(shí),能夠?qū)崿F(xiàn)故障自動(dòng) failover趴酣,集群仍可用岖寞。
6. 缺點(diǎn)
實(shí)現(xiàn)復(fù)雜。
節(jié)點(diǎn)會(huì)因?yàn)槟承┰虬l(fā)生阻塞(阻塞時(shí)間大于 clutser-node-timeout)仗谆,被判斷下線,這種 failover 是沒有必要的藻雪。
數(shù)據(jù)通過異步復(fù)制狸吞,不保證數(shù)據(jù)的強(qiáng)一致性指煎。