redis哨兵模式没有切换主机_Redis的哨兵模式
網(wǎng)站:http://www.51manong.com51碼農(nóng)網(wǎng),讓程序員的堅持學(xué)習(xí)變得可能
Redis哨兵(Sentinel)模式
Redis的主從復(fù)制,當(dāng)主機(jī)出現(xiàn)了宕機(jī)時,需要人工手動去干預(yù),把一臺從服務(wù)器切換為主服務(wù)器,或者手動去重啟主機(jī),費時費力,而且還會導(dǎo)致該時間段內(nèi)的服務(wù)不可用,這就要說說Redis的哨兵模式。
哨兵自然就是站崗放哨,負(fù)責(zé)監(jiān)控。Redis的哨兵系統(tǒng)執(zhí)行3個任務(wù)
1.監(jiān)控,Redis的哨兵會不斷檢查主服務(wù)器和從服務(wù)器的運行狀況
2.提醒,當(dāng)哨兵檢查到某個Redis服務(wù)器出現(xiàn)了問題,哨兵可以通過API向運維或者其他程序發(fā)送通知
3.自動故障遷移(Automatic failover), 當(dāng)一個主服務(wù)器不能正常工作時, 哨兵會開始一次自動故障遷移操作, 它會將失效主服務(wù)器的其中一個從服務(wù)器升級為新的主服務(wù)器, 并讓失效主服務(wù)器的其他從服務(wù)器改為復(fù)制新的主服務(wù)器
哨兵模式的配置文件sentinel.conf
運行一個 Sentinel 所需的最少配置如下所示:
sentinel monitor mymaster 127.0.0.1 6379 1 sentinel down-after-milliseconds mymaster 60000 sentinel failover-timeout mymaster 180000 sentinel parallel-syncs mymaster 1sentinel monitor resque 192.168.1.3 6380 4 sentinel down-after-milliseconds resque 10000 sentinel failover-timeout resque 180000 sentinel parallel-syncs resque 5第一行配置指示 Sentinel 去監(jiān)視一個名為 mymaster 的主服務(wù)器, 這個主服務(wù)器的 IP 地址為 127.0.0.1 , 端口號為 6379 , 而將這個主服務(wù)器判斷為失效至少需要 1 個 Sentinel 同意 (只要同意 Sentinel 的數(shù)量不達(dá)標(biāo),自動故障遷移就不會執(zhí)行)。
down-after-milliseconds 選項指定了 Sentinel 認(rèn)為服務(wù)器已經(jīng)斷線所需的毫秒數(shù)。
如果服務(wù)器在給定的毫秒數(shù)之內(nèi), 沒有返回 Sentinel 發(fā)送的 PING 命令的回復(fù), 或者返回一個錯誤, 那么 Sentinel 將這個服務(wù)器標(biāo)記為主觀下線(subjectively down,簡稱 SDOWN )。
不過只有一個 Sentinel 將服務(wù)器標(biāo)記為主觀下線并不一定會引起服務(wù)器的自動故障遷移: 只有在足夠數(shù)量的 Sentinel 都將一個服務(wù)器標(biāo)記為主觀下線之后, 服務(wù)器才會被標(biāo)記為客觀下線(objectively down, 簡稱 ODOWN ), 這時自動故障遷移才會執(zhí)行。
parallel-syncs 選項指定了在執(zhí)行故障轉(zhuǎn)移時, 最多可以有多少個從服務(wù)器同時對新的主服務(wù)器進(jìn)行同步, 這個數(shù)字越小, 完成故障轉(zhuǎn)移所需的時間就越長
哨兵模式演示
1.將Redis源碼下的sentinel文件復(fù)制到Redis的安裝目錄
[erayt@ERAYT-01 redis-3.0.0]$ cp sentinel.conf /usr/local/redis/bin/順便說一下,Redis Sentinel 兼容 Redis 2.4.16 或以上版本, 推薦使用 Redis 2.8.0 或以上的版本。2.配置sentinel
sentinel monitor mymaster 127.0.0.1 6379 13.啟動哨兵
[erayt@ERAYT-01 bin]$ ./redis-sentinel sentinel.conf查看窗口日志
3146:X 20 Jul 05:41:40.158 # Sentinel runid is 2fd81c3ed629769930e5b4511470e95b0a429a4b 3146:X 20 Jul 05:41:40.158 # +monitor master mymaster 127.0.0.1 6379 quorum 2 3146:X 20 Jul 05:41:41.169 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379 3146:X 20 Jul 05:41:41.169 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 63794.關(guān)閉Redis的主節(jié)點6379
[erayt@ERAYT-01 bin]$ ./redis-cli shutdown查看窗口日志
3260:X 20 Jul 05:55:33.661 # +switch-master mymaster 127.0.0.1 6379 127.0.0.1 6380 3260:X 20 Jul 05:55:33.674 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6380 3260:X 20 Jul 05:55:33.696 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380 3260:X 20 Jul 05:56:03.710 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 63806380這個節(jié)點應(yīng)該成為了新的主服務(wù)器
127.0.0.1:6380> info replication # Replication role:master connected_slaves:1 slave0:ip=127.0.0.1,port=6381,state=online,offset=570,lag=0 master_repl_offset:570 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:569故障轉(zhuǎn)移的步驟
發(fā)現(xiàn)主服務(wù)器已經(jīng)進(jìn)入客觀下線狀態(tài)。
對我們的當(dāng)前紀(jì)元進(jìn)行自增, 并嘗試在這個紀(jì)元中當(dāng)選。
如果當(dāng)選失敗, 那么在設(shè)定的故障遷移超時時間的兩倍之后, 重新嘗試當(dāng)選。
如果當(dāng)選成功, 那么執(zhí)行以下步驟。
1.選出一個從服務(wù)器,并將它升級為主服務(wù)器。
2.向被選中的從服務(wù)器發(fā)送 SLAVEOF NO ONE 命令,讓它轉(zhuǎn)變?yōu)橹鞣?wù)器。
3.通過發(fā)布與訂閱功能, 將更新后的配置傳播給所有其他 Sentinel , 其他 Sentinel 對它們自己的配置進(jìn)行更新。
4.向已下線主服務(wù)器的從服務(wù)器發(fā)送 SLAVEOF host port 命令, 讓它們?nèi)?fù)制新的主服務(wù)器。
5.當(dāng)所有從服務(wù)器都已經(jīng)開始復(fù)制新的主服務(wù)器時, 領(lǐng)頭 Sentinel 終止這次故障遷移操作。
微信公眾號:51碼農(nóng)網(wǎng)
總結(jié)
以上是生活随笔為你收集整理的redis哨兵模式没有切换主机_Redis的哨兵模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql点击execute_MySQL
- 下一篇: djongo mysql 回滚_djan