穩定性相關異地多活
機房流量劃分:
保證同一緯度查詢寫入儘量在一個機房
切流控制點:
- DNS:DNS快取,切流量無法立刻生效 流量無法通過DNS完全切乾淨,有剩餘流量(對應入網框架中,在httpdns中改,有一點點本地快取,webapp無法用httpdns)
- LVS(無法根據業務需求流量劃分的)
- ROUTEr(改nginx)。內部呼叫(inrouter同上、thrift本來就是service的ip直接服務發現時改,用同一份)
- 業務程式碼
選取router
增加nginx 的dynamic_req_add key cityid $city_id
dynamic_req $upstream_name default_liddc=xx upstreamm_name=xx port=xx;
機房下線:
先DNS去掉,router配置去
資料同步。本質是雙機房要保持全量資料
mysql 主從
redis 見 https://segmentfault.com/a/11...
為什麼redis不能和mysql一樣用主從叢集分機房?mysql本身主從延時就大,不像redis這種本身作為快取的東西,機房間鏈路不穩定,如果主從複製配置同步或者命令延時就拒絕寫/叢集誇機房影響穩定。同步全部非同步,基本用mq,否則要加丟失資料補齊太複雜。
mq。寫入雙寫或消費雙訂閱。
切換過程中,因為重試等會有點問題。無法做到的。。。
機房遷移,遷移過程中雙活。或維持上期雙活
收斂配置,增加雙機房配置
機器ready
功能驗證。QA測
效能驗證。指定url壓測
資料同步
程式碼裡用小流量測試
DNS改50
DNS徹底改
殘餘流量:舊route中IP配成新機房的VIP(不配為IP的原因是故障摘除方便,要一直持續發半年)
雙活下機房遷移(有三活)
如果資料同步支援三活,沒問題。如果只支援雙活,可以:
驗證C功能:A與B做雙活,C讀A的redis
資料切C:A與B斷雙活,B與C做雙活,A讀C redis
故障應對:C有問題後,流量切回A,A讀Credis, C與B同步資料