redis搭建哨兵模式實(shí)現(xiàn)一主兩從三哨兵
一、Redis 哨兵模式:
哨兵的核心功能:在主從復(fù)制的基礎(chǔ)上,哨兵引入了主節(jié)點(diǎn)的自動故障轉(zhuǎn)移
1、哨兵模式原理:
哨兵:是一個分布式系統(tǒng),用于對主從結(jié)構(gòu)中的每臺服務(wù)器進(jìn)行監(jiān)控,當(dāng)出現(xiàn)故障時通過投票機(jī)制選擇新的Master 并將所有Slave 連接到新的 Master。所以整個運(yùn)行哨兵的集群的數(shù)量不得少于3個節(jié)點(diǎn)。
2、哨兵模式的作用:
監(jiān)控:哨兵會不斷地檢查主節(jié)點(diǎn)和從節(jié)點(diǎn)是否運(yùn)作正常。
自動故障轉(zhuǎn)移:當(dāng)主節(jié)點(diǎn)不能正常工作時,哨兵會開始自動故障轉(zhuǎn)移操作,它會將失效主節(jié)點(diǎn)的其中一個從節(jié)點(diǎn)升級為新的主節(jié)點(diǎn),并讓其他從節(jié)點(diǎn)改為復(fù)制新的主節(jié)點(diǎn)。
通知提醒:哨兵可以將故障轉(zhuǎn)移的結(jié)果發(fā)送給客戶端
3、哨兵的結(jié)構(gòu):
哨兵節(jié)點(diǎn):哨兵系統(tǒng)由一個或多個哨兵節(jié)點(diǎn)組成,哨兵節(jié)點(diǎn)就是特殊的redis節(jié)點(diǎn),不存儲數(shù)據(jù)
數(shù)據(jù)節(jié)點(diǎn):主節(jié)點(diǎn)和從節(jié)點(diǎn)都是數(shù)據(jù)節(jié)點(diǎn)
注意:
哨兵的啟動依賴于主從模式,所以須把主從模式安裝好的情況下再去做哨兵模式,所有節(jié)點(diǎn)上都需要部署哨兵模式,哨兵模式會監(jiān)控所有的Redis工作節(jié)點(diǎn)是否正常。
4、故障轉(zhuǎn)移機(jī)制:
由哨兵節(jié)點(diǎn)定期監(jiān)控主節(jié)點(diǎn)是否出現(xiàn)了故障,每個哨兵節(jié)點(diǎn)每隔1秒會向主節(jié)點(diǎn)、從節(jié)點(diǎn)及其它哨兵節(jié)點(diǎn)發(fā)送一次ping命令做一次心跳檢測。 如果主節(jié)點(diǎn)在一定時間范圍內(nèi)不回復(fù)或者是回復(fù)一個錯誤消息,那么這個哨兵就會認(rèn)為這個主節(jié)點(diǎn)主觀下線了(單方面的),當(dāng)超過半數(shù)哨兵節(jié)點(diǎn)認(rèn)為該主節(jié)點(diǎn)下線了,這樣就客觀下線了。 此時哨兵節(jié)點(diǎn)會通過Raft算法〈選舉算法)實(shí)現(xiàn)選舉機(jī)制共同選舉出一個哨兵節(jié)點(diǎn)為leader,來負(fù)責(zé)處理主節(jié)點(diǎn)的故障轉(zhuǎn)移和通知。
故障轉(zhuǎn)移過程如下:
● 將某一個從節(jié)點(diǎn)升級為新的主節(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)的選舉條件:
過濾掉不健康的(已下線的),沒有回復(fù)哨兵ping響應(yīng)的從節(jié)點(diǎn)
選擇配置文件中從節(jié)點(diǎn)優(yōu)先級最高的(replication-priority,默認(rèn)值為100)
選擇復(fù)制偏移量最大的,也就是復(fù)制最完整的從節(jié)點(diǎn)。
二、案例環(huán)境
| 服務(wù)器 | |||
|---|---|---|---|
| master | Centos7.9 | 192.168.10.128 | redis-5.0.9.tar.gz |
| slave1 | Centos7.9 | 192.168.10.129 | redis-5.0.9.tar.gz |
| salve2 | Centos7.9 | 192.168.10.130 | redis-5.0.9.tar.gz |
1.關(guān)閉防火墻安全內(nèi)核機(jī)制,所有節(jié)點(diǎn)全部執(zhí)行
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# setenforce 0
2.所有節(jié)點(diǎn)分別搭建網(wǎng)絡(luò)yum源 ,需要聯(lián)網(wǎng)
[root@localhost ~]# yum clean all && yum makecache
3.分別修改主機(jī)名
[root@localhost ~]hostnamectl set-hostname master #192.168.10.128 [root@localhost ~]hostnamectl set-hostname slave1 #192.168.10.129 [root@localhost ~]hostnamectl set-hostname slave2 #192.168.10.130
4.所有節(jié)點(diǎn)修改hosts文件
[root@localhost ~]# cat >>/etc/hosts<< EOF 192.168.10.128 matser:7 192.168.10.129 slave1 192.168.10.130 slave2 EOF
三、實(shí)驗(yàn)部署
主從部署
1.所有節(jié)點(diǎn)安裝redis
#安裝編譯工具 yum -y install gcc gcc-c++ make cd /usr/src wget -P /usr/src http://download.redis.io/releases/redis-5.0.9.tar.gz tar -zxvf redis-5.0.9.tar.gz cd redis-5.0.9/ make && make PREFIX=/usr/local/redis install ln -s /usr/local/redis/bin/* /usr/local/bin/ cd /usr/src/redis-5.0.9/utils/ ./install_server.sh #出現(xiàn)Please select the redis port for this instance: [6379]一直回車直達(dá)出現(xiàn)Please select the redis executable path [] 手動輸入/usr/local/redis/bin/redis-server netstat -lnupt | grep redis cd /usr/lib/systemd/system/ cat >>redis.service<< EOF [Unit] Description=redis-server After=network.target ? [Service] Type=forking # ExecStart需要按照實(shí)際情況修改成自己的地址 ExecStart=/usr/local/bin/redis-server /etc/redis/6379.conf PrivateTmp=true ? [Install] WantedBy=multi-user.target EOF systemctl daemon-reload /etc/init.d/redis_6379 stop ps -ef|grep redis systemctl start redis systemctl status redis
2.修改Master節(jié)點(diǎn)的配置文件
[root@master ~]# cp /etc/redis/6379.conf{,.bak}
[root@master ~]# vim /etc/redis/6379.conf
?
bind 0.0.0.0 #70行,注釋掉bind項(xiàng),或修改為0.0.0.0,默認(rèn)監(jiān)聽所有網(wǎng)卡
daemonize yes #137行,開啟守護(hù)進(jìn)程
logfile /var/log/redis_6379.log #172行,指定日志文件目錄
dir /var/lib/redis/6379 #264行,指定工作目錄
requirepass 123456 #7508行,指定redis登錄密碼,可不設(shè)置
appendonly yes #700行,開啟AOF持久化功能
?
#重啟redis
[root@master ~]#systemctl start redis3.修改slave1和slave2兩個從節(jié)點(diǎn)
[root@slave1 ~]# cp /etc/redis/6379.conf{,.bak}
[root@slave1 ~]# vim /etc/redis/6379.conf
?
70 bind 0.0.0.0
#將監(jiān)聽端口改為任意端口
137 daemonize yes
#開啟守護(hù)進(jìn)程
172 logfile /var/log/redis_6379.log
#指定日志文件目錄
264 dir /var/lib/redis/6379
#指定工作目錄
287 replicaof 192.168.111.10 6379
#指定主節(jié)點(diǎn)的ip 和端口
700 appendonly yes
#開啟 AOF持久化
?
#重啟slave1節(jié)點(diǎn)和slave2節(jié)點(diǎn)redis服務(wù)
[root@slave1 ~]# systemctl restart reids
[root@slave2 ~]# systemctl restart reids4.驗(yàn)證主從效果
在Master節(jié)點(diǎn)上看日志
[root@master ~]#tail -f /var/log/redis_6379.log [root@master ~]#redis-cli #登錄redis 127.0.0.1:6379> info replication #查看 127.0.0.1:6379> set k1 1 #在主庫創(chuàng)建文件在從庫查看 OK 127.0.0.1:6379> get k1 存在 "1" 127.0.0.1:6379>
在master上動態(tài)查看日志:

在master上驗(yàn)證從節(jié)點(diǎn)

四、哨兵部署
[root@master ~]# cd /usr/src/redis-5.0.9/

1.修改哨兵模式的配置文件(所有節(jié)點(diǎn)操作)
[root@master redis-5.0.9]# cp sentinel.conf{,.bak}
[root@master redis-5.0.9]# vim sentinel.conf
#修改配置文件
17 protected-mode no
#關(guān)閉保護(hù)模式
21 port 26379
#哨兵默認(rèn)端口號 26379
26 daemonize yes
#開啟后臺運(yùn)行
36 logfile "/var/log/sentinel.log
#指定日志目錄
65 dir "/var/lib/redis/6379"
#數(shù)據(jù)文件
84 sentinel monitor mymaster 192.168.10.128 6379 2
#改變master節(jié)點(diǎn)地址,指定該哨兵節(jié)點(diǎn)監(jiān)控192.168.10。128:6379這個主節(jié)點(diǎn),該主節(jié)點(diǎn)的名稱是mymaster,最后的2的含義與主節(jié)點(diǎn)的故障判定有關(guān):至少需要2個哨兵節(jié)點(diǎn)同意,才能判定主節(jié)點(diǎn)故障并進(jìn)行故障轉(zhuǎn)移
113 sentinel down-after-milliseconds mymaster 30000
#可以修改時間,判定服務(wù)器down掉的時間周期,默認(rèn)30000毫秒(30秒)
146 sentinel failover-timeout mymaster 180000
#故障切換時間,故障節(jié)點(diǎn)的最大超時時間為180000 (180秒 )
[root@master redis-5.0.9]# scp sentinel.conf root@192.168.10.129:`pwd`
[root@master redis-5.0.9]# scp sentinel.conf root@192.168.10.130:`pwd`2.啟動哨兵模式所有節(jié)點(diǎn)都要啟動
#注意:先啟主節(jié)點(diǎn)master,再啟從節(jié)點(diǎn)slave
cd /usr/src/redis-5.0.9/ [root@master redis-5.0.9]# redis-sentinel sentinel.conf & [1] 15986 [root@slave1 redis-5.0.9]# redis-sentinel sentinel.conf & [1] 61088 [root@slave2 redis-5.0.9]# redis-sentinel sentinel.conf & [1] 66369
3.在master查看哨兵信息
所有節(jié)點(diǎn)都可以查看哨兵info sentinel
[root@master redis-5.0.9]# redis-cli -p 26379 info Sentinel

五、驗(yàn)證哨兵,模擬故障
[root@master redis-5.0.9]# ps -ef | grep redis [root@master redis-5.0.9]# systemctl stop reids #也可以殺死 Master 節(jié)點(diǎn)上redis-server的進(jìn)程號 [root@master ~]# tail -f /var/log/sentinel.log #驗(yàn)證master是轉(zhuǎn)換至從服務(wù)器</span>

在Slave1上查看是否轉(zhuǎn)換成功
[root@slave1 redis-5.0.9]# redis-cli -p 26379 INFO Sentinel

在Slave2上查看是否轉(zhuǎn)換成功
[root@slave2 redis-5.0.9]# redis-cli -p 26379 INFO Sentinel

當(dāng)原來的master修復(fù)后會做為slave從新加入
[root@master redis-5.0.9]# redis-cli -p 26379 127.0.0.1:26379> info

將權(quán)重值調(diào)成默認(rèn)方便下次選舉
[root@slave1 redis-5.0.9]# redis-cli -h 192.168.10.128 -p 6379 config set slave-priority 100 [root@slave1 redis-5.0.9]# redis-cli -h 192.168.10.129 -p 6379 config set slave-priority 100 [root@slave1 redis-5.0.9]# redis-cli -h 192.168.10.130 -p 6379 config set slave-priority 100
總結(jié) 哨兵系統(tǒng)的搭建過程,有幾點(diǎn)需要注意:
哨兵系統(tǒng)中的主從節(jié)點(diǎn),與普通的主從節(jié)點(diǎn)并沒有什么區(qū)別,故障發(fā)現(xiàn)和轉(zhuǎn)移是由哨兵來控制和完成的。
哨兵節(jié)點(diǎn)本質(zhì)上是Redis節(jié)點(diǎn).
每個哨兵節(jié)點(diǎn),只需要配置監(jiān)控主節(jié)點(diǎn),便可以自動發(fā)現(xiàn)其他的哨兵節(jié)點(diǎn)和從節(jié)點(diǎn).
在哨兵節(jié)點(diǎn)啟動和故障轉(zhuǎn)移階段,各個節(jié)點(diǎn)的配置文件會被重寫(Config Rewrite)。
故障轉(zhuǎn)移分三步
1.從下線的主服務(wù)的所有從服務(wù)里面挑選一個從服務(wù), 將其轉(zhuǎn)成主服務(wù)
2.已下線主服務(wù)的所有從服務(wù)改為復(fù)制新的主服務(wù) 挑選出新的主服務(wù)之后,領(lǐng)頭sentinel 向原主服務(wù)的從服務(wù)發(fā)送 slaveof 新主服務(wù) 的命令,復(fù)制新master。
3.將已下線的主服務(wù)設(shè)置成新的主服務(wù)的從服務(wù), 當(dāng)其回復(fù)正常時,復(fù)制新的主服務(wù),變成新的主服務(wù)的從服務(wù) 當(dāng)已下線的服務(wù)重新上線時,sentinel會向其發(fā)送slaveof命令, 讓其成為新主的從。
查看[root@master redis-5.0.9]下的master節(jié)點(diǎn)信息
sentinel master imooc-master
查看[root@master redis-5.0.9]下的slaves節(jié)點(diǎn)信息
sentinel slaves imooc-master
查看[root@master redis-5.0.9]下的哨兵節(jié)點(diǎn)信息
sentinel sentinels imooc-master
到此這篇關(guān)于redis搭建哨兵模式實(shí)現(xiàn)一主兩從三哨兵的文章就介紹到這了,更多相關(guān)redis 一主兩從三哨兵內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Redis三種集群搭建配置(主從集群、哨兵集群、分片集群)
- Redis集群搭建(主從模式、哨兵模式、集群模式)
- Linux下Redis集群搭建全過程(主從+哨兵)
- Centos7 Redis主從搭建配置的實(shí)現(xiàn)
- Docker搭建Redis主從復(fù)制的實(shí)現(xiàn)步驟
- docker搭建redis主從哨兵集群的實(shí)現(xiàn)步驟
- docker搭建redis三主三從集群的實(shí)現(xiàn)步驟
- 使用Docker搭建Redis主從復(fù)制的集群
- 基于Docker搭建Redis主從集群的實(shí)現(xiàn)
- Redis搭建一主多從的實(shí)現(xiàn)步驟
相關(guān)文章
CentOS系統(tǒng)下Redis安裝和自啟動配置的步驟
相信大家都知道Redis是一個C實(shí)現(xiàn)的基于內(nèi)存、可持久化的鍵值對數(shù)據(jù)庫,在分布式服務(wù)中常作為緩存服務(wù)。所以這篇文章將詳細(xì)介紹在CentOS系統(tǒng)下如何從零開始安裝到配置啟動服務(wù)。有需要的可以參考借鑒。2016-09-09
redis緩存一致性延時雙刪代碼實(shí)現(xiàn)方式
這篇文章主要介紹了redis緩存一致性延時雙刪代碼實(shí)現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
Redis Cluster集群數(shù)據(jù)分片機(jī)制原理
這篇文章主要介紹了Redis Cluster集群數(shù)據(jù)分片機(jī)制原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04
redis?bitmap數(shù)據(jù)結(jié)構(gòu)之java對等操作詳解
bitmap是以其高性能出名。其基本原理是一位存儲一個標(biāo)識,其他衍生知道咱就不說了,而redis就是以這種原生格式存儲的,這篇文章主要介紹了redis?bitmap數(shù)據(jù)結(jié)構(gòu)之java對等操作,需要的朋友可以參考下2022-10-10
超強(qiáng)、超詳細(xì)Redis數(shù)據(jù)庫入門教程
這篇文章主要介紹了超強(qiáng)、超詳細(xì)Redis入門教程,本文詳細(xì)介紹了Redis數(shù)據(jù)庫各個方面的知識,需要的朋友可以參考下2014-10-10

