目前暫時還沒有哪款資料庫產品是專門針對跨IDC進行的最佳化,在理論上被業界認為最優的方案是採用基於Paxos協議(暫時只有google做出了實現,google f1),今天只討論MySQL在這方面的注意事項:
對於跨IDC的情況基本都會設計到以下問題:
1、MySQL多IDC的資料同步,資料一致性
2、多IDC之間的高可用
3、多IDC的多點寫入問題
4、營運監控
對於MySQL多IDC資料之間的同步問題:
1、MySQL的複製是非同步(對於5.5的半同步來說,還是屬於“非同步”),MySQL同步依賴的因素很多,同步的網路環境,硬體設定,SQL語句是否高效,以及資料量的大小。
在資料量較大的情況下在master和slave端啟用slave-compressed-protocol = 1壓縮模式,網路環境採用專線。可以利用blackhole儲存引擎的MySQL作為relay server實現級聯複製,這個最好控制在三層內,減少同步的延遲,減少機房之間傳輸的資料量。關於SQL語句,索引不要太多,影響插入速度,注意更新和刪除的問題,如果採用row模式進行複製,資料量是個問題,建議採用mixed模式進行複製。對於即時性要求較高的應用可以允許第一次讀的時候從主庫上讀取。或者在應用端給出等待時間來緩解同步延遲對使用者的影響。
2、對於多IDC中的高可用問題。
本欄目更多精彩內容:http://www.bianceng.cn/database/MySQL/
對於採用relay server的方式,可以採用兩台server,每隔relay下面都是一個slave叢集。當某個出現問題的時候,可以只訪問另一個slave叢集。
對於採用雙主模式的情況下,這個容災方式比較明顯,每個master下都接一個slave叢集。但對於多IDC部署的話缺點也很明顯,只能使用兩個IDC。
3、多點寫入問題
雙主複製,環狀複製,通過federated引擎都可以實現多點寫入。這個時候對於多點寫入需要考慮自增問題,可通過auto_increment_increment=N(增量值,且N是節點數)和auto_increment_offset=1,2,3,。。。N (初始值)來解決。更新丟失問題。每個master唯寫本機資料,slave擁有全部資料,這個時候資料是以一定次序出現的。利用訊息佇列,資料寫入本機資料庫時也寫入訊息佇列中(本人為涉及到)
4、營運監控問題
監控系統對整個維護過程中起著很重要的作用。為防止在多IDC之間網路環境的影響,最好採用分布式監控,並且每個IDC的監控系統都能獨立工作,可以參考zabbix,ganglia(兩個開源企業級監控系統)