日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis主从原理+哨兵模式

發(fā)布時間:2024/1/18 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis主从原理+哨兵模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、主從復制原理
    • 1、如果在主從傳輸過程中,從節(jié)點掛了怎么辦?
    • 2.什么是主從復制風暴?
    • 3.主從復制優(yōu)缺點
      • 1.優(yōu)點
      • 2.缺點
  • 二、Redis項目部署
    • 1. 項目拓撲圖
    • 2.環(huán)境
      • 1.安裝redis
      • 2.配置Redis主從復制服務
    • 3.模擬主服務器掛掉后
  • 三、哨兵模式原理
    • 1.哨兵的主要作用
      • 1.現(xiàn)象
      • 2.原因
    • 2.哨兵部署流程
      • 1.模擬主服務器出現(xiàn)問題down下來,查看從服務器狀態(tài)變化
      • 2.查看之前配置的哨兵檢測的主服務器地址情況
      • 3.查看當原master服務器恢復上線時,狀態(tài)變化

一、主從復制原理


①:從服務器slave先于主服務器master建立socket長連接
②:從服務器slave向主服務器master發(fā)送一個PSYNC命令,請求復制數(shù)據(jù)。
③:主服務器master接收到PSYNC命令后,會通過bgsave命令利用子線程生成最新的rdb快照文件,并發(fā)送給從服務器slave。
持久化期間,master會繼續(xù)接收客戶端的請求,它會把這些可能修改數(shù)據(jù)集的請求緩存在內(nèi)存repl buffer中
④:slave清掉無用數(shù)據(jù),并接受master傳來的數(shù)據(jù)加載到內(nèi)存中
⑤:master再將之前持久化時緩存在內(nèi)存中的命令發(fā)送給slave。
⑥:slave接受master發(fā)過來的新命令并執(zhí)行
⑦:此時數(shù)據(jù)已同步完畢,當master再有新的寫操作,會通過socket長連接持續(xù)的發(fā)給slave,保證主從數(shù)據(jù)一致性!
注意: 如果master收到了多個slave并發(fā)連接請求,它只會進行一次持久化,而不是一個連接一次,然后再把這一份持久化的數(shù)據(jù)發(fā)送給多個并發(fā)連接的slave。

1、如果在主從傳輸過程中,從節(jié)點掛了怎么辦?

當salve因為網(wǎng)絡等原因接收到一半數(shù)據(jù)時掛掉了,經(jīng)過一段時間后,人為的重啟了salve從節(jié)點,那么此時的數(shù)據(jù)傳輸是怎么處理呢?
答:從redis2.8版本開始,redis改用可以支持部分數(shù)據(jù)復制的命令PSYNC去master同步數(shù)據(jù),slave與master能夠在網(wǎng)絡連接斷開重連后只進行部分數(shù)據(jù)復制(斷點續(xù)傳)。流程圖如下:

①:首先redis在運行時會默認開啟一個緩存池,用于緩存最近的redis命令,可以在6379.conf中配置
repl-backlog-size 1mb ####redis命令緩存池,默認大小為1Mb
②:當slave與master斷開并重新建立連接時,slave會向master發(fā)送PSYNC命令,并通過offset偏移量定位到斷開連接時傳輸數(shù)據(jù)的位置,從這個位置開始進行斷點續(xù)傳
③:如果slave節(jié)點斷開時間太久,導致偏移量太舊,已經(jīng)在master中的命令緩存池中找不到對應的位置,那么就會進行一次全量數(shù)據(jù)的復制。無法使用斷點續(xù)傳了!

2.什么是主從復制風暴?

主從復制風暴:多個從節(jié)點同時復制主節(jié)點導致主節(jié)點壓力過大
為了解決主從復制風暴問題,可以讓部分從節(jié)點與從節(jié)點同步數(shù)據(jù),架構(gòu)如下設計:

3.主從復制優(yōu)缺點

1.優(yōu)點

2.缺點

二、Redis項目部署

1. 項目拓撲圖

2.環(huán)境

一臺主服務器 master :192.168.1.10 兩臺備服務器 slave1 :192.168.1.11slave2 :192.168.1.12

1.安裝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]# cd

2.創(chuàng)建鏈接

[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 查看端口狀態(tài)


提示安裝成功后,表示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 修改監(jiān)聽地址為0.0.0.0 daemonize yes 開啟守護進程 logfile /var/log/redis_6379.log 修改日志文件目錄 dir /var/lib/redis/6379 修改工作目錄 appendonly yes 開啟AOF持久化功能






在備1、2上編輯配置

[root@slave1 utils]# vi /etc/redis/6379.conf [root@slave1 utils]# /etc/init.d/redis_6379 restart 服務重啟 修改添加 bind 0.0.0.0 修改監(jiān)聽地址為0.0.0.0 appendonly yes 開啟AOF持久化功能 replicaof 192.168.1.10 6379 增加一個同步master節(jié)點IP和端口




在master服務器上查看
驗證主從效果

[root@master ~]# tail -f /var/log/redis_6379.log


備2服務器同上

測試主從數(shù)據(jù)復制功能
在master主服務器上

[root@master ~]# redis-cli #進入數(shù)據(jù)庫 127.0.0.1:6379> set fa a #設置fa鍵得值為a 127.0.0.1:6379> get fa #查看fa鍵得值 127.0.0.1:6379> info replication #信息復制,狀態(tài)信息


在備1服務器上

[root@slave1 ~]# redis-cli #進入數(shù)據(jù)庫 127.0.0.1:6379> get fa #獲取fa鍵得值 127.0.0.1:6379> info replication #信息復制,狀態(tài)信息


在備2服務器上

// An highlighted block var foo = 'bar';

3.模擬主服務器掛掉后

在master主服務器上,關閉服務

[root@master ~]# /etc/init.d/redis_6379 stop 關閉服務 [root@master ~]# tail -f /var/log/redis_6379.log 查看日志


在備1服務器查看現(xiàn)象

[root@slave1 ~]# tail -f /var/log/redis_6379.log 查看日志 [root@slave1 ~]# redis-cli 進入數(shù)據(jù)庫 127.0.0.1:6379> get k 獲取k的鍵值 "aa" 127.0.0.1:6379> info replication 信息復制,狀態(tài)信息 # Replication role:slave 狀態(tài):從服務器 master_host:192.168.1.10


在備2服務器上

可以看到把主服務器關閉后,從服務器的狀態(tài)不會轉(zhuǎn)化成主服務器,但數(shù)據(jù)會復制轉(zhuǎn)移過來,是可以讀取查看到的

解決辦法:
通過哨兵功能可以實現(xiàn)在主服務器失效時,主從的狀態(tài)自動轉(zhuǎn)換

先恢復到之前狀態(tài)
master上
恢復上線

[root@master ~]# /etc/init.d/redis_6379 start 服務啟動 [root@master ~]# tail -f /var/log/redis_6379.log 查看日志 [root@master ~]# redis-cli 進入數(shù)據(jù)庫 127.0.0.1:6379> info replication 信息復制,狀態(tài)查看 # Replication role:master 主服務 connected_slaves:2 連接2個服務器 slave0:ip=192.168.1.11,port=6379,state=online,offset=84,lag=1 slave1:ip=192.168.1.12,port=6379,state=online,offset=84,lag=0 master_replid:087088c1aa398b11c1e4759e93eb8abb6bc277e2 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:84 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:84 127.0.0.1:6379> set nb b 添加nb鍵值為b OK 127.0.0.1:6379> get nb 獲取nb的鍵值 "b"


在備1服務器上

[root@slave1 ~]# tail -f /var/log/redis_6379.log #查看日志 [root@slave1 ~]# redis-cli

三、哨兵模式原理

  • sentinel哨兵是特殊的redis服務,不提供讀寫服務,主要用來監(jiān)控redis實例節(jié)點的狀態(tài)!
  • 哨兵架構(gòu)下client端第一次請求redis服務時,會先從哨兵找出redis的主節(jié)點,后續(xù)就直接訪問redis的主節(jié)點,不會每次都通過sentinel代理訪問redis的主節(jié)點,當redis的主節(jié)點發(fā)生變化,哨兵會第一時間感知到,并且將新的redis主節(jié)點通知給client端(這里面redis的client端一般都實現(xiàn)了訂閱功能,訂閱sentinel發(fā)布的節(jié)點變動消息)

1.哨兵的主要作用

1.現(xiàn)象

當master節(jié)點掛掉后,服務端控制臺會打印 連接超時錯誤,當過一段時間后,又恢復正常,可以繼續(xù)向redis中寫入數(shù)據(jù)!

2.原因

  • 原因就是哨兵會時刻監(jiān)視著master節(jié)點,當master節(jié)點掛掉,此時服務端控制臺會打印連接超時錯誤。但同時哨兵經(jīng)過半數(shù)機制確認master掛掉,會選舉出一個slave作為新的master
  • 選舉的這頓時間內(nèi),控制臺還是會打印錯誤,一旦選舉成功,就會恢復正常連接,這也是出現(xiàn)以上現(xiàn)象的原因!!
  • 當原來掛掉的master節(jié)點重新恢復時,將自動稱為新的master的叢節(jié)點,完成哨兵高可用架構(gòu)!

哨兵要設為奇數(shù),最少三臺,里面涉及到投票問題!!

2.哨兵部署流程

在master服務器上
編輯哨兵模式的配置文件

[root@master ~]# vi redis-5.0.4/sentinel.conf 修改添加 protected-mode no 關閉安全模式 daemonize yes 指定sentine1為后臺啟動,開啟守護進程 logfile "/var/log/sentinel.log" 指定日志存放路徑 dir /var/lib/redis/6379 指定數(shù)據(jù)庫存放路徑sentinel monitor mymaster 192.168.1.10 6379 2 指定幾個哨兵(slave)檢測主服務器故障,才會進行故障遷移(主服務器ip地址,端口號,slave數(shù))sentinel down-after-milliseconds mymaster 3000 判定服務器down掉的時間周期,默認30000毫秒(30秒)sentinel failover-timeout mymaster 100000 故障節(jié)點的最大超時時間為100000毫秒(100秒)





拷貝文件到slave1,slave2上

[root@master ~]# scp redis-5.0.4/sentinel.conf root@192.168.1.11:/root/redis-5.0.4 [root@master ~]# scp redis-5.0.4/sentinel.conf root@192.168.1.12:/root/redis-5.0.4


啟動哨兵模式
先啟master服務器,后啟slave服務器

[root@master ~]# redis-sentinel redis-5.0.4/sentinel.conf & [1] 69742 [root@slave1 ~]# redis-sentinel redis-5.0.4/sentinel.conf & [1] 62685 [root@slave2 ~]# redis-sentinel redis-5.0.4/sentinel.conf & [1] 62250

在master服務器上
1.查看日志

[root@master ~]# tail -f /var/log/sentinel.log

2.查看進程狀態(tài)

[root@master ~]# ps aux | grep redis [root@master ~]# ps aux | grep sentinel


表明哨兵服務已經(jīng)啟動
3.遠程登錄數(shù)據(jù)庫查看哨兵狀態(tài)

[root@master ~]# redis-cli -h 192.168.1.10 -p 26379 info sentinel [root@master ~]# redis-cli -h 192.168.1.10 -p 6379 info replication

1.模擬主服務器出現(xiàn)問題down下來,查看從服務器狀態(tài)變化

在master服務器上

[root@master ~]# /etc/init.d/redis_6379 stop 停止服務 [root@master ~]# ps aux | grep redis 查看進程狀態(tài)


在從服務器上進行日志查看

[root@slave1 ~]# tail -f /var/log/sentinel.log

發(fā)現(xiàn)master狀態(tài)轉(zhuǎn)移到從備1上

在slave2查看遠程登錄查看哨兵信息

[root@slave2 ~]# redis-cli -h 192.168.1.11 -p 26379 info sentinel

2.查看之前配置的哨兵檢測的主服務器地址情況

在備1服務器上

[root@slave1 ~]# vi redis-5.0.4/sentinel.conf


在主服務器上

發(fā)現(xiàn)的配置地址變化,在自動切換主狀態(tài)時也會自動變更檢測地址

3.查看當原master服務器恢復上線時,狀態(tài)變化

在master服務器上

[root@master ~]# /etc/init.d/redis_6379 start 服務啟動 [root@master ~]# ps aux | grep redis 查看進程端口狀態(tài) [root@master ~]# tail -f /var/log/sentinel.log 查看日志文件

在slave2上
查看數(shù)據(jù)庫哨兵狀態(tài)

[root@slave2 ~]# redis-cli -h 192.168.1.11 -p 26379 info sentinel

發(fā)現(xiàn)在原主服務器出現(xiàn)上線后,master狀態(tài)并不會再次轉(zhuǎn)換重新到自己上,這一點不同于vrrp服務,原因vrrp有優(yōu)先級設置,此處服務沒有。

總結(jié)

以上是生活随笔為你收集整理的Redis主从原理+哨兵模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。