Redis主从原理+哨兵模式
文章目錄
- 一、主從復制原理
- 1、如果在主從傳輸過程中,從節點掛了怎么辦?
- 2.什么是主從復制風暴?
- 3.主從復制優缺點
- 1.優點
- 2.缺點
- 二、Redis項目部署
- 1. 項目拓撲圖
- 2.環境
- 1.安裝redis
- 2.配置Redis主從復制服務
- 3.模擬主服務器掛掉后
- 三、哨兵模式原理
- 1.哨兵的主要作用
- 1.現象
- 2.原因
- 2.哨兵部署流程
- 1.模擬主服務器出現問題down下來,查看從服務器狀態變化
- 2.查看之前配置的哨兵檢測的主服務器地址情況
- 3.查看當原master服務器恢復上線時,狀態變化
一、主從復制原理
①:從服務器slave先于主服務器master建立socket長連接
②:從服務器slave向主服務器master發送一個PSYNC命令,請求復制數據。
③:主服務器master接收到PSYNC命令后,會通過bgsave命令利用子線程生成最新的rdb快照文件,并發送給從服務器slave。
持久化期間,master會繼續接收客戶端的請求,它會把這些可能修改數據集的請求緩存在內存repl buffer中
④:slave清掉無用數據,并接受master傳來的數據加載到內存中
⑤:master再將之前持久化時緩存在內存中的命令發送給slave。
⑥:slave接受master發過來的新命令并執行
⑦:此時數據已同步完畢,當master再有新的寫操作,會通過socket長連接持續的發給slave,保證主從數據一致性!
注意: 如果master收到了多個slave并發連接請求,它只會進行一次持久化,而不是一個連接一次,然后再把這一份持久化的數據發送給多個并發連接的slave。
1、如果在主從傳輸過程中,從節點掛了怎么辦?
當salve因為網絡等原因接收到一半數據時掛掉了,經過一段時間后,人為的重啟了salve從節點,那么此時的數據傳輸是怎么處理呢?
答:從redis2.8版本開始,redis改用可以支持部分數據復制的命令PSYNC去master同步數據,slave與master能夠在網絡連接斷開重連后只進行部分數據復制(斷點續傳)。流程圖如下:
①:首先redis在運行時會默認開啟一個緩存池,用于緩存最近的redis命令,可以在6379.conf中配置
repl-backlog-size 1mb ####redis命令緩存池,默認大小為1Mb
②:當slave與master斷開并重新建立連接時,slave會向master發送PSYNC命令,并通過offset偏移量定位到斷開連接時傳輸數據的位置,從這個位置開始進行斷點續傳
③:如果slave節點斷開時間太久,導致偏移量太舊,已經在master中的命令緩存池中找不到對應的位置,那么就會進行一次全量數據的復制。無法使用斷點續傳了!
2.什么是主從復制風暴?
主從復制風暴:多個從節點同時復制主節點導致主節點壓力過大
為了解決主從復制風暴問題,可以讓部分從節點與從節點同步數據,架構如下設計:
3.主從復制優缺點
1.優點
2.缺點
二、Redis項目部署
1. 項目拓撲圖
2.環境
一臺主服務器 master :192.168.1.10 兩臺備服務器 slave1 :192.168.1.11slave2 :192.168.1.121.安裝redis
主備服務器都需安裝
通過xshell文件傳輸redis安裝包
1.解壓縮
[root@master ~]# tar zxvf redis-5.0.4.tar.gz [root@master ~]# cd redis-5.0.4/ [root@master redis-5.0.4]# make 配置安裝 [root@master redis-5.0.4]# make DREFIX=/usr/local/redis install 更改安裝路徑可以用make PREFIX=安裝路徑 install [root@master redis-5.0.4]# cd2.創建鏈接
[root@master ~]# ln -s /usr/local/redis/bin/* /usr/local/bin/ [root@master ~]# cd redis-5.0.4/utils/ [root@master utils]# ls -lh 查看安裝腳本 [root@master utils]# ./install_server.sh 運行腳本 [root@master utils]# netstat -anpt | grep redis 查看端口狀態
提示安裝成功后,表示Redis的基礎配置完成
2.配置Redis主從復制服務
在主master服務器上
[root@master utils]# cd [root@master ~]# vi /etc/redis/6379.conf [root@master ~]# /etc/init.d/redis_6379 stop #服務關閉 [root@master ~]# /etc/init.d/redis_6379 start #服務開啟 修改添加 bind 0.0.0.0 修改監聽地址為0.0.0.0 daemonize yes 開啟守護進程 logfile /var/log/redis_6379.log 修改日志文件目錄 dir /var/lib/redis/6379 修改工作目錄 appendonly yes 開啟AOF持久化功能
在備1、2上編輯配置
在master服務器上查看
驗證主從效果
備2服務器同上
測試主從數據復制功能
在master主服務器上
在備1服務器上
在備2服務器上
3.模擬主服務器掛掉后
在master主服務器上,關閉服務
[root@master ~]# /etc/init.d/redis_6379 stop 關閉服務 [root@master ~]# tail -f /var/log/redis_6379.log 查看日志
在備1服務器查看現象
在備2服務器上
可以看到把主服務器關閉后,從服務器的狀態不會轉化成主服務器,但數據會復制轉移過來,是可以讀取查看到的
解決辦法:
通過哨兵功能可以實現在主服務器失效時,主從的狀態自動轉換
先恢復到之前狀態
master上
恢復上線
在備1服務器上
三、哨兵模式原理
- sentinel哨兵是特殊的redis服務,不提供讀寫服務,主要用來監控redis實例節點的狀態!
- 哨兵架構下client端第一次請求redis服務時,會先從哨兵找出redis的主節點,后續就直接訪問redis的主節點,不會每次都通過sentinel代理訪問redis的主節點,當redis的主節點發生變化,哨兵會第一時間感知到,并且將新的redis主節點通知給client端(這里面redis的client端一般都實現了訂閱功能,訂閱sentinel發布的節點變動消息)
1.哨兵的主要作用
1.現象
當master節點掛掉后,服務端控制臺會打印 連接超時錯誤,當過一段時間后,又恢復正常,可以繼續向redis中寫入數據!
2.原因
- 原因就是哨兵會時刻監視著master節點,當master節點掛掉,此時服務端控制臺會打印連接超時錯誤。但同時哨兵經過半數機制確認master掛掉,會選舉出一個slave作為新的master
- 選舉的這頓時間內,控制臺還是會打印錯誤,一旦選舉成功,就會恢復正常連接,這也是出現以上現象的原因!!
- 當原來掛掉的master節點重新恢復時,將自動稱為新的master的叢節點,完成哨兵高可用架構!
哨兵要設為奇數,最少三臺,里面涉及到投票問題!!
2.哨兵部署流程
在master服務器上
編輯哨兵模式的配置文件
拷貝文件到slave1,slave2上
啟動哨兵模式
先啟master服務器,后啟slave服務器
在master服務器上
1.查看日志
2.查看進程狀態
[root@master ~]# ps aux | grep redis [root@master ~]# ps aux | grep sentinel
表明哨兵服務已經啟動
3.遠程登錄數據庫查看哨兵狀態
1.模擬主服務器出現問題down下來,查看從服務器狀態變化
在master服務器上
[root@master ~]# /etc/init.d/redis_6379 stop 停止服務 [root@master ~]# ps aux | grep redis 查看進程狀態
在從服務器上進行日志查看
發現master狀態轉移到從備1上
在slave2查看遠程登錄查看哨兵信息
[root@slave2 ~]# redis-cli -h 192.168.1.11 -p 26379 info sentinel2.查看之前配置的哨兵檢測的主服務器地址情況
在備1服務器上
[root@slave1 ~]# vi redis-5.0.4/sentinel.conf
在主服務器上
發現的配置地址變化,在自動切換主狀態時也會自動變更檢測地址
3.查看當原master服務器恢復上線時,狀態變化
在master服務器上
[root@master ~]# /etc/init.d/redis_6379 start 服務啟動 [root@master ~]# ps aux | grep redis 查看進程端口狀態 [root@master ~]# tail -f /var/log/sentinel.log 查看日志文件在slave2上
查看數據庫哨兵狀態
發現在原主服務器出現上線后,master狀態并不會再次轉換重新到自己上,這一點不同于vrrp服務,原因vrrp有優先級設置,此處服務沒有。
總結
以上是生活随笔為你收集整理的Redis主从原理+哨兵模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【记录贴】数据库课程设计——学生信息管理
- 下一篇: 周杰伦 牛仔很忙 10月10日首播