redis哨兵模式没有切换主机_Redis的哨兵模式
網(wǎng)站:http://www.51manong.com51碼農(nóng)網(wǎng),讓程序員的堅(jiān)持學(xué)習(xí)變得可能
Redis哨兵(Sentinel)模式
Redis的主從復(fù)制,當(dāng)主機(jī)出現(xiàn)了宕機(jī)時(shí),需要人工手動(dòng)去干預(yù),把一臺(tái)從服務(wù)器切換為主服務(wù)器,或者手動(dòng)去重啟主機(jī),費(fèi)時(shí)費(fèi)力,而且還會(huì)導(dǎo)致該時(shí)間段內(nèi)的服務(wù)不可用,這就要說說Redis的哨兵模式。
哨兵自然就是站崗放哨,負(fù)責(zé)監(jiān)控。Redis的哨兵系統(tǒng)執(zhí)行3個(gè)任務(wù)
1.監(jiān)控,Redis的哨兵會(huì)不斷檢查主服務(wù)器和從服務(wù)器的運(yùn)行狀況
2.提醒,當(dāng)哨兵檢查到某個(gè)Redis服務(wù)器出現(xiàn)了問題,哨兵可以通過API向運(yùn)維或者其他程序發(fā)送通知
3.自動(dòng)故障遷移(Automatic failover), 當(dāng)一個(gè)主服務(wù)器不能正常工作時(shí), 哨兵會(huì)開始一次自動(dòng)故障遷移操作, 它會(huì)將失效主服務(wù)器的其中一個(gè)從服務(wù)器升級(jí)為新的主服務(wù)器, 并讓失效主服務(wù)器的其他從服務(wù)器改為復(fù)制新的主服務(wù)器
哨兵模式的配置文件sentinel.conf
運(yùn)行一個(gè) 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)視一個(gè)名為 mymaster 的主服務(wù)器, 這個(gè)主服務(wù)器的 IP 地址為 127.0.0.1 , 端口號(hào)為 6379 , 而將這個(gè)主服務(wù)器判斷為失效至少需要 1 個(gè) Sentinel 同意 (只要同意 Sentinel 的數(shù)量不達(dá)標(biāo),自動(dòng)故障遷移就不會(huì)執(zhí)行)。
down-after-milliseconds 選項(xiàng)指定了 Sentinel 認(rèn)為服務(wù)器已經(jīng)斷線所需的毫秒數(shù)。
如果服務(wù)器在給定的毫秒數(shù)之內(nèi), 沒有返回 Sentinel 發(fā)送的 PING 命令的回復(fù), 或者返回一個(gè)錯(cuò)誤, 那么 Sentinel 將這個(gè)服務(wù)器標(biāo)記為主觀下線(subjectively down,簡(jiǎn)稱 SDOWN )。
不過只有一個(gè) Sentinel 將服務(wù)器標(biāo)記為主觀下線并不一定會(huì)引起服務(wù)器的自動(dòng)故障遷移: 只有在足夠數(shù)量的 Sentinel 都將一個(gè)服務(wù)器標(biāo)記為主觀下線之后, 服務(wù)器才會(huì)被標(biāo)記為客觀下線(objectively down, 簡(jiǎn)稱 ODOWN ), 這時(shí)自動(dòng)故障遷移才會(huì)執(zhí)行。
parallel-syncs 選項(xiàng)指定了在執(zhí)行故障轉(zhuǎn)移時(shí), 最多可以有多少個(gè)從服務(wù)器同時(shí)對(duì)新的主服務(wù)器進(jìn)行同步, 這個(gè)數(shù)字越小, 完成故障轉(zhuǎn)移所需的時(shí)間就越長(zhǎng)
哨兵模式演示
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.啟動(dòng)哨兵
[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é)點(diǎn)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這個(gè)節(jié)點(diǎn)應(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)。
對(duì)我們的當(dāng)前紀(jì)元進(jìn)行自增, 并嘗試在這個(gè)紀(jì)元中當(dāng)選。
如果當(dāng)選失敗, 那么在設(shè)定的故障遷移超時(shí)時(shí)間的兩倍之后, 重新嘗試當(dāng)選。
如果當(dāng)選成功, 那么執(zhí)行以下步驟。
1.選出一個(gè)從服務(wù)器,并將它升級(jí)為主服務(wù)器。
2.向被選中的從服務(wù)器發(fā)送 SLAVEOF NO ONE 命令,讓它轉(zhuǎn)變?yōu)橹鞣?wù)器。
3.通過發(fā)布與訂閱功能, 將更新后的配置傳播給所有其他 Sentinel , 其他 Sentinel 對(duì)它們自己的配置進(jìn)行更新。
4.向已下線主服務(wù)器的從服務(wù)器發(fā)送 SLAVEOF host port 命令, 讓它們?nèi)?fù)制新的主服務(wù)器。
5.當(dāng)所有從服務(wù)器都已經(jīng)開始復(fù)制新的主服務(wù)器時(shí), 領(lǐng)頭 Sentinel 終止這次故障遷移操作。
微信公眾號(hào):51碼農(nóng)網(wǎng)
總結(jié)
以上是生活随笔為你收集整理的redis哨兵模式没有切换主机_Redis的哨兵模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql点击execute_MySQL
- 下一篇: djongo mysql 回滚_djan