Redis哨兵模式(一主二从三哨兵)
目錄
- 一、redis環(huán)境:
- 二、哨兵介紹:
- 三、安裝redis:
- 四、使用Redis主從復(fù)制的作用:
- 五、配置redis一主二從:
- redis啟動前的準(zhǔn)備工作:
- 六、配置redis三哨兵:
一、redis環(huán)境:
環(huán)境:redis6.2.6
linux虛擬機(jī)一臺,contos7;
二、哨兵介紹:
1.一主二從三哨兵理論圖:
一主兩從三哨兵集群,當(dāng)master節(jié)點(diǎn)宕機(jī)時(shí),通過哨兵(sentinel)重新推選出新的master節(jié)點(diǎn),保證集群的可用性。
2.哨兵的主要功能:
1.集群監(jiān)控:負(fù)責(zé)監(jiān)控 Redis master 和 slave 進(jìn)程是否正常工作。
2.消息通知:如果某個(gè) Redis 實(shí)例有故障,那么哨兵負(fù)責(zé)發(fā)送消息作為報(bào)警通知給管理員。
3.故障轉(zhuǎn)移:如果 master node 掛掉了,會自動轉(zhuǎn)移到 slave node 上。
4.配置中心:如果故障轉(zhuǎn)移發(fā)生了,通知 client 客戶端新的 master 地址。
PS:根據(jù)推舉機(jī)制,集群中哨兵數(shù)量最好為奇數(shù)(3、5…)
3.哨兵用于實(shí)現(xiàn) redis 集群的高可用,本身也是分布式的,作為一個(gè)哨兵集群去運(yùn)行,互相協(xié)同工作。
- 故障轉(zhuǎn)移時(shí),判斷一個(gè) master node 是否宕機(jī)了,需要大部分的哨兵都同意才行,涉及到了分布式選舉的問題。
- 即使部分哨兵節(jié)點(diǎn)掛掉了,哨兵集群還是能正常工作的,因?yàn)槿绻粋€(gè)作為高可用機(jī)制重要組成部分的故障轉(zhuǎn)移系統(tǒng)本身是單點(diǎn)的,那就很坑爹了。
4.哨兵的核心知識:
- 哨兵至少需要 3 個(gè)實(shí)例,來保證自己的健壯性。
- 哨兵 + redis 主從的部署架構(gòu),是不保證數(shù)據(jù)零丟失的,只能保證 redis 集群的高可用性。
- 對于哨兵 + redis 主從這種復(fù)雜的部署架構(gòu),盡量在測試環(huán)境和生產(chǎn)環(huán)境,都進(jìn)行充足的測試和演練。
三、安裝redis:
此處省略redis的安裝。
四、使用Redis主從復(fù)制的作用:
主從復(fù)制,是指將一臺Redis主節(jié)點(diǎn)服務(wù)器的數(shù)據(jù),復(fù)制到其他的Redis從節(jié)點(diǎn)服務(wù)器。
主節(jié)點(diǎn)稱為(master/leader),從節(jié)點(diǎn)稱為(slave/follower);
1,數(shù)據(jù)冗余:主從復(fù)制實(shí)現(xiàn)了數(shù)據(jù)的熱備份,這也是持久化實(shí)現(xiàn)的另一種方式。
2,故障恢復(fù):當(dāng)主節(jié)點(diǎn)出現(xiàn)問題時(shí),可以由從節(jié)點(diǎn)提供服務(wù),實(shí)現(xiàn)快速的故障恢復(fù);實(shí)際上是一種服務(wù)的冗余。
3,讀寫分離:master服務(wù)主要用來寫,slave服務(wù)主要用來讀數(shù)據(jù)??梢蕴岣叻?wù)器的負(fù)載能力,可以根據(jù)需求的變化,添加從節(jié)點(diǎn)的數(shù)量。
4,負(fù)載均衡:同時(shí)配合讀寫分離,由主節(jié)點(diǎn)提供寫服務(wù),從節(jié)點(diǎn)提供讀服務(wù),分擔(dān)服務(wù)器的負(fù)載。在寫少讀多的情況下,通過多個(gè)從節(jié)點(diǎn)分擔(dān)讀負(fù)載,能夠大大提高Redis服務(wù)的并發(fā)量和負(fù)載。
5,高可用的基石,主從復(fù)制是哨兵和集群模式能夠?qū)嵤┑幕A(chǔ)。
五、配置redis一主二從:
在正常的生產(chǎn)中我們是準(zhǔn)備多臺服務(wù)器,比如三臺,每臺都在各自的linux系統(tǒng)中安裝redis。
但是此處為了演示方便,我使用一臺電腦安裝虛擬機(jī),在虛擬機(jī)上安裝三份redis服務(wù),來模擬一主二從的效果。
第一步:修改原redis.conf配置文件:
redis.conf配置文件采用默認(rèn)的混合持久化,也可以采用單獨(dú)的RDB持久化,因?yàn)橹鲝膹?fù)制的本質(zhì)是RDB方式,所以要有RDB方式參與即可。
原redis.conf配置文件需要修改的幾個(gè)地方:
1.先在網(wǎng)絡(luò)部分注釋掉單機(jī)連接那一行,即注釋掉bind 127.0.0.1 2.同樣我們要將后臺運(yùn)行打開:daemonize no,設(shè)置為yes。 3.將 保護(hù)模式關(guān)閉:protected-mode yes 改為:protected-mode no 4.打開RDB持久化配置: #RDB持久化策略 默認(rèn)三種方式,[900秒內(nèi)有1次修改], #[300秒內(nèi)有10次修改],[60秒內(nèi)有10000次修改]即觸發(fā)RDB持久化, #我們可以手動修改該參數(shù)或新增策略 save 900 1 save 300 10 save 60 10000 #RDB文件名 dbfilename dump.rdb #RDB文件存儲路徑 dir ./ 策略配置: #在seconds秒內(nèi)有changes次數(shù)據(jù)修改就觸發(fā)RDB持久化5.開啟AOF持久化配置 appendonly yes #AOF文件名 appendfilename "appendonly.aof" #AOF文件存儲路徑 與RDB是同一個(gè)參數(shù),共用一個(gè)文件路徑 dir ./ #即bin目錄下 #AOF策略,一般都是選擇第一種[always:每個(gè)命令都記錄], #[everysec:每秒記錄一次],[no:看機(jī)器的心情高興了就記錄,linux一般半個(gè)小時(shí)同步一次] #appendfsync always appendfsync everysec # appendfsync no #aof文件大小比起上次重寫時(shí)的大小,增長100%(配置可以大于100%)時(shí),觸發(fā)重寫。 #[假如上次重寫后大小為10MB,當(dāng)AOF文件達(dá)到20MB時(shí)也會再次觸發(fā)重寫,以此類推 auto-aof-rewrite-percentage 100 #aof文件大小超過64MB*2時(shí),觸發(fā)重寫, #為何要乘以2,因?yàn)閍uto-aof-rewrite-percentage 100 是翻倍即100%, #達(dá)到翻倍時(shí)才重寫 auto-aof-rewrite-min-size 64mb 6.打開混合持久化: #6.aof-use-rdb-preamble yes # 檢查混合持久化是否打開,redis5.0后默認(rèn)開啟第二步:將修改后的redis.conf配置文件復(fù)制出來三份:
1.進(jìn)入redis默認(rèn)的安裝路徑:cd /usr/local/bin
ll #查看文件夾內(nèi)容
cp redis.conf redis_bk.conf #盡量備份一個(gè)配置文件,防止修改錯(cuò)了,可以重新用
cp redis.conf redis6379.conf
cp redis.conf redis6380.conf
cp redis.conf redis6381.conf
第三步:分別修改三個(gè)配置文件:
vim redis6379.conf
修改的內(nèi)容:
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb
vim redis6380.conf
修改的內(nèi)容:
pidfile /var/run/redis_6380.pid
port 6380
dbfilename dump6380.rdb
vim redis6381.conf
修改的內(nèi)容:
pidfile /var/run/redis_6381.pid
port 6381
dbfilename dump6381.rdb
redis啟動前的準(zhǔn)備工作:
查看虛擬機(jī)防火墻是否關(guān)閉,需要關(guān)閉防火墻
1:查看防火狀態(tài)
systemctl status firewalld
service iptables status
2:暫時(shí)關(guān)閉防火墻
systemctl stop firewalld
service iptables stop
3:永久關(guān)閉防火墻
systemctl disable firewalld
chkconfig iptables off
關(guān)閉后再查看防火墻狀態(tài)
三:開放指定端口6379:
開放指定端口的方式一:
在linux中執(zhí)行: /sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
redis默認(rèn)端口號6379是不允許進(jìn)行遠(yuǎn)程連接的,所以在防火墻中設(shè)置6379開啟遠(yuǎn)程服務(wù);
開放指定端口的方式二:
先開啟防火墻才能開放指定端口的:systemctl start firewalld
firewall-cmd --zone=public --add-port=6379/tcp --permanent
第四步:啟動三臺redis服務(wù)器,并查看是否啟動成功:
redis-server redis6379.conf
redis-server redis6380.conf
redis-server redis6381.conf
ps -ef | grep redis
第五步:配置從庫不配置主庫 :
先連接上redis客戶端:
redis-cli -p 6380
然后將6380機(jī)器配置成從機(jī):
slaveof 主機(jī)ip 主機(jī)端口號
#slaveof 127.0.0.1 6379
info replication
然后將6381機(jī)器配置成從機(jī):
redis-cli -p 6381
#slaveof 主機(jī)ip 主機(jī)端口號
slaveof 127.0.0.1 6379
info replication
在主機(jī)查看從機(jī)信息:發(fā)現(xiàn)配置成功。
redis-cli -p 6379
info replication
六、配置redis三哨兵:
將官方自帶的sentinel.conf(此文件在redis的源碼目錄下,即解壓路徑下)復(fù)制到/usr/local/bin:
然后復(fù)制出來三份:
修改的內(nèi)容如下:
vim sentinel0.conf
文件修改內(nèi)容如下:
protected-mode no
daemonize yes
port 26379 #sentinel 端口
dir “/usr/local/bin”
sentinel monitor mymaster 127.0.0.1 6379 2
然后分別修改sentinel1.conf信息如下:
protected-mode no
daemonize yes
port 26380 # sentinel 端口,因?yàn)槲覀冊谝慌_虛擬機(jī)上,所以端口要不一樣
dir “/usr/local/bin”
sentinel monitor mymaster 127.0.0.1 6379 2 #這里的mymaster 兩個(gè)副本的要一樣,mymaster同一個(gè)主機(jī)名
然后分別修改sentinel2.conf信息如下:
protected-mode no
daemonize yes
port 26381 # sentinel 端口,因?yàn)槲覀冊谝慌_虛擬機(jī)上,所以端口要不一樣
dir “/usr/local/bin”
sentinel monitor mymaster 127.0.0.1 6379 2 #這里的mymaster 兩個(gè)副本的要一樣
配置文件詳解
哨兵的配置主要就是修改sentinel.conf配置文件中的參數(shù),在Redis安裝目錄即可看到此配置文件,各參數(shù)詳解如下:
最后是先啟動三個(gè)服務(wù),然后起送三個(gè)哨兵,然后客戶端;
啟動哨兵:
redis-sentinel sentinel0.conf
redis-sentinel sentinel1.conf
redis-sentinel sentinel2.conf
啟動后查看sentinel信息:redis-cli -p sentinel的端口號
redis-cli -p 26379
info sentinel
總結(jié)
以上是生活随笔為你收集整理的Redis哨兵模式(一主二从三哨兵)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web基础(三)Python Web
- 下一篇: 连接mysql数据库有几种方式_数据库连