Galera Cluster大坑的解決方案

有些同窗在使用Galera Cluster以後,會發現有一些坑,如:
1)大表DDL操做會致使整個集羣不可用。在DDL操做完成前集羣都不可寫入任何事務,致使服務不可用。ide

解決方案:
直接使用pt-online-schema工具進行操做,能夠避開這個問題。工具

2)因爲Galera Cluster在執行DDL時,是Total Ordered Isolation(wsrep_OSU_method=TOI)的,因此必需要保證每一個節點都是同時執行的,固然對於不是DDL的,也是Total Order的,由於每個事務都具備同一個GTID值,DDL也不例外,而DDL涉及到的是表鎖,MDL鎖(Meta Data Lock),只要在執行過程當中,遇到了MDL鎖的衝突,全部狀況下,都是DDL優先,將全部的使用到這個對象的事務,通通殺死,無論是讀事務,仍是寫事務,被殺的事務都會報出死鎖的異常,因此這也是一個Galera Cluster中,關於DDL的聞名遐邇的坑。對象

解決方案:
可使用滾動升級方式在每一個節點上分別執行DDL操做,這樣就能夠避開上面的問題。操做以下:事務

SET wsrep_OSU_method='RSU';it

ALTER TABLE test ADD COLUMN user_age tinyint;io

SET wsrep_OSU_method='TOI';class

即先在節點上修改實例升級方式爲滾動升級(Rolling Schema Upgrade),而後再執行DDL語句,最後再將實例升級方式修改回去。test

相關文章
相關標籤/搜索