[TOC]mysql
實際應用中,咱們的系統在上線後,總會遇到一些問題,須要對redis進行遷移,或者說切實例。可是因爲是線上系統,一個是要謹慎,一個是要保證服務可用,在不停服的狀況進行處理。redis
好比,咱們的redis實例的機器宕機、或者機器磁盤只讀、或者redis服務異常;或者須要rename一些高危命令;或者業務底層redis存儲機制更改。當咱們遇到諸如此類的場景,那麼就須要考慮切redis實例了,下面就一些經常使用場景來一一舉例說明sql
一個大的前提是,業務訪問資源,建議都是經過域名來訪問,而不是ip來訪問。微信
若是redis實例所在機器異常,須要遷移,而且這個redis實例,是業務的從庫,業務這邊作了讀寫分離,寫主庫、讀從庫的話,切從庫是最容易實現的,基本就是DBA切個DNS,當前,前提是業務訪問是經過域名訪問而不是直接經過ip訪問運維
假如主庫是7526cdn
先從主庫上搭建新的從庫進程
7526 掛載新的實例host 並下掉老的實例Hostip
肯定老的從庫的鏈接數,要保證老的從庫沒有鏈接,資源
若是老的從庫沒有鏈接了,而且新的從庫有鏈接,就說明切從庫實例ok開發
通常,經過DNS來解析的話,業務若是採用鏈接池等方式,那可能遷移的過程,業務須要重啓,才能保證立刻斷開鏈接,實際中就發現雖然ping 從庫域名已是新的ip地址了,可是時間上,程序裏面鏈接的仍是老的ip,這個時候須要重啓一下服務
若是redis實例所在機器異常,或者其餘須要遷移,而且這個redis實例,是業務的主庫,那麼遷移主庫的流程,相對從庫的流程就稍微麻煩一點。
m7614.xxx.redis.com 對應的IP是 192.168.xxx.93
s7614.xxx.redis.com 對應的ip是 192.168.xxx.94
提高從實例爲主實例,而後把主從域名都指向從實例去,而後再搭建新的從庫
在某些場景下,若是直接切主庫、切從庫都不合適,可能會致使數據不一致或者數據丟失;或者須要停服或者短暫停寫的狀況下,咱們就要考慮雙寫+遷移策略,雙寫+遷移策略是萬能的,不只僅針對redis,其餘資源如mysql等也是好使的。
這個方案稍微繁瑣一點,可是有個好處就是必定保證不停服,不影響用戶,而且可以回滾,保證數據一致性。缺點就是須要業務方在修改代碼,而且再代碼裏面增長開關配置,好的作法是經過配置文件就可以打開雙寫、讀寫新庫等
這個方案的兩個關鍵點在於:
以上幾種狀況都是xxx項目在這一年多來遇到的,而且都是和運維、DBA一塊兒作過遷移,算是一點點小經驗。 另一點就是開發人員要可以分析排查問題,遇到線上問題後,要可以經過各類手段定位到緣由,再給出合適的解決方案
【"歡迎關注個人微信公衆號:Linux 服務端系統研發,後面會大力經過微信公衆號發送優質文章"】