Redis高可用:主从复制及哨兵模式
生活随笔
收集整理的這篇文章主要介紹了
Redis高可用:主从复制及哨兵模式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
- 主從復制
- 作用
- 復制原理
- 使用的方式
- 哨兵模式
- 主從切換過程
- Redis Sentinel的配置文件
- 參考
主從復制
主從復制,是指將一臺Redis服務器的數(shù)據(jù),復制到其他的Redis服務器。前者稱為主節(jié)點(master),后者稱為從節(jié)點(slave);數(shù)據(jù)的復制是單向的,只能由主節(jié)點到從節(jié)點。
實現(xiàn)讀寫分離,主服務器負責寫,從服務器負責讀
作用
復制原理
- Slave啟動成功連接到master后會發(fā)送一個sync同步命令,Master接到命令,啟動后臺的存盤進程,同時收集所有接收到的用于修改數(shù)據(jù)集命令,在后臺進程執(zhí)行完畢之后, master將傳送整個數(shù)據(jù)文件到slave ,并完成一次完全同步。
- 全量復制:slave服務在接收到數(shù)據(jù)庫文件數(shù)據(jù)后, 將其存盤并加載到內存中。
- 增量復制: Master繼續(xù)將新的所有收集到的修改命令依次傳給slave ,完成同步
- 只要是重新連接master , 一次完全同步(全量復制)將被自動執(zhí)行!我們的數(shù)據(jù)一定可以在從機中看到!
使用的方式
- 只需要配置從庫
- 查看Redis主從復制信息
- 啟動時設置為從節(jié)點并配置主節(jié)點ip及端口
- 通過redis.conf文件設置
哨兵模式
主從切換技術的方法是:當主服務器宕機后,需要手動把一臺從服務器切換為主服務器,這就需要人工干預,費事費力,還會造成一段時間內服務不可用。這不是一種推薦的方式,更多時候,我們優(yōu)先考慮哨兵模式。
哨兵模式是一種特殊的模式,首先Redis提供了哨兵的命令,哨兵是一個獨立的進程,作為進程,它會獨立運行。其原理是哨兵通過發(fā)送命令,等待Redis服務器響應,從而監(jiān)控運行的多個Redis實例。
- 通過發(fā)送命令,讓Redis服務器返回監(jiān)控其運行狀態(tài),包括主服務器和從服務器。
- 當哨兵監(jiān)測到master宕機,會自動將slave切換成master,然后通過發(fā)布訂閱模式通知其他的從服務器,修改配置文件,讓它們切換主機。
然而一個哨兵進程對Redis服務器進行監(jiān)控,可能會出現(xiàn)問題,為此,我們可以使用多個哨兵進行監(jiān)控。各個哨兵之間還會進行監(jiān)控,這樣就形成了多哨兵模式。
主從切換過程
- 假設主服務器宕機,哨兵1先檢測到這個結果,系統(tǒng)并不會馬上進行failover過程,僅僅是哨兵1主觀的認為主服務器不可用,這個現(xiàn)象成為主觀下線。
- 當后面的哨兵也檢測到主服務器不可用,并且數(shù)量達到一定值時,那么哨兵之間就會進行一次投票,投票的結果由一個哨兵發(fā)起,進行failover操作。
- 切換成功后,就會通過發(fā)布訂閱模式,讓各個哨兵把自己監(jiān)控的從服務器實現(xiàn)切換主機,這個過程稱為客觀下線。這樣對于客戶端而言,一切都是透明的。
Redis Sentinel的配置文件
# 哨兵sentinel實例運行的端口,默認26379 port 26379 # 哨兵sentinel的工作目錄 dir ./# 哨兵sentinel監(jiān)控的redis主節(jié)點的 ## ip:主機ip地址 ## port:哨兵端口號 ## master-name:可以自己命名的主節(jié)點名字(只能由字母A-z、數(shù)字0-9 、這三個字符".-_"組成。) ## quorum:當這些quorum個數(shù)sentinel哨兵認為master主節(jié)點失聯(lián) 那么這時 客觀上認為主節(jié)點失聯(lián)了 # sentinel monitor <master-name> <ip> <redis-port> <quorum> sentinel monitor mymaster 127.0.0.1 6379 2# 當在Redis實例中開啟了requirepass <foobared>,所有連接Redis實例的客戶端都要提供密碼。 # sentinel auth-pass <master-name> <password> sentinel auth-pass mymaster 123456 # 指定主節(jié)點應答哨兵sentinel的最大時間間隔,超過這個時間,哨兵主觀上認為主節(jié)點下線,默認30秒 # sentinel down-after-milliseconds <master-name> <milliseconds> sentinel down-after-milliseconds mymaster 30000 # 指定了在發(fā)生failover主備切換時,最多可以有多少個slave同時對新的master進行同步。這個數(shù)字越小,完成failover所需的時間就越長;反之,但是如果這個數(shù)字越大,就意味著越多的slave因為replication而不可用。可以通過將這個值設為1,來保證每次只有一個slave,處于不能處理命令請求的狀態(tài)。 # sentinel parallel-syncs <master-name> <numslaves> sentinel parallel-syncs mymaster 1 # 故障轉移的超時時間failover-timeout,默認三分鐘,可以用在以下這些方面: ## 1. 同一個sentinel對同一個master兩次failover之間的間隔時間。 ## 2. 當一個slave從一個錯誤的master那里同步數(shù)據(jù)時開始,直到slave被糾正為從正確的master那里同步數(shù)據(jù)時結束。 ## 3. 當想要取消一個正在進行的failover時所需要的時間。 ## 4.當進行failover時,配置所有slaves指向新的master所需的最大時間。不過,即使過了這個超時,slaves依然會被正確配置為指向master,但是就不按parallel-syncs所配置的規(guī)則來同步數(shù)據(jù)了 # sentinel failover-timeout <master-name> <milliseconds> sentinel failover-timeout mymaster 180000# 當sentinel有任何警告級別的事件發(fā)生時(比如說redis實例的主觀失效和客觀失效等等),將會去調用這個腳本。一個腳本的最大執(zhí)行時間為60s,如果超過這個時間,腳本將會被一個SIGKILL信號終止,之后重新執(zhí)行。 # 對于腳本的運行結果有以下規(guī)則: ## 1. 若腳本執(zhí)行后返回1,那么該腳本稍后將會被再次執(zhí)行,重復次數(shù)目前默認為10。 ## 2. 若腳本執(zhí)行后返回2,或者比2更高的一個返回值,腳本將不會重復執(zhí)行。 ## 3. 如果腳本在執(zhí)行過程中由于收到系統(tǒng)中斷信號被終止了,則同返回值為1時的行為相同。 # sentinel notification-script <master-name> <script-path> sentinel notification-script mymaster /var/redis/notify.sh# 這個腳本應該是通用的,能被多次調用,不是針對性的。 # sentinel client-reconfig-script <master-name> <script-path> sentinel client-reconfig-script mymaster /var/redis/reconfig.sh參考
Redis 的 Sentinel 文檔
Redis Replication
總結
以上是生活随笔為你收集整理的Redis高可用:主从复制及哨兵模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上海电脑技术学校(上海计算机职业技术学校
- 下一篇: 迈克菲是什么软件(McAfee是最好的安