MMM切換原理

G8bao7發表於2014-01-10

slave agent收到new master傳送的set_active_master資訊後如何進行切換主庫
原始碼 Agent\Helpers\Actions.pm
set_active_master($new_master)
Try to catch up with the old master as far as possible and change the master to the new host.
(Syncs to the master log if the old master is reachable. Otherwise syncs to the relay log.)


一、獲取同步的binlog和position
    先獲取new master的show slave status中的 Master_Log_File、Read_Master_Log_Pos
    wait_log=Master_Log_File, wait_pos=Read_Master_Log_Pos

    如果old master可以連線,再獲取old master的show master status中的File、Position
    wait_log=Filewait_pos=Position  # 覆蓋new master的slave資訊,以old master 為準

二、slave追趕old master的同步位置
    SELECT MASTER_POS_WAIT('wait_log', wait_pos);

    # 停止同步
    STOP SLAVE;

三、設定new master資訊
    # 此時 new master已經對外提供寫操作。
    # (在main執行緒裡new master先接收到啟用的訊息,new master 轉換(包含vip操作)完成後,然後由_distribute_roles將master變動同步到slave上)
    # 在new master轉換完成後,如果能執行flush logs,更方便管理
    # 獲取new master的binlog資料。
    SHOW MASTER STATUS;
    
    # 從配置檔案/etc/mysql-mmm/mmm_common.conf 讀取同步帳戶、密碼
    replication_user、replication_password
    
    # 設定新的同步位置
    CHANGE MASTER TO MASTER_HOST='$new_peer_host', MASTER_PORT=$new_peer_port
                            , MASTER_USER='$repl_user',  MASTER_PASSWORD='$repl_password'
                            , MASTER_LOG_FILE='$master_log', MASTER_LOG_POS=$master_pos;

    # 開啟同步
    START SLAVE;


====== 潛在問題
雙主的binlog必須完全一致,否則切換會出問題
如果new master比slave的同步位置晚,會導致重複執行。只有row模式下才能保證資料一致性

如有錯誤,歡迎指正

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26250550/viewspace-1069277/,如需轉載,請註明出處,否則將追究法律責任。

相關文章