MySQL Fabric 安裝及配置


  1. Fabric相關軟體需求
    MySQL Server 5.6.17 or later
    Python2 (2.6 or later)
    Connector/Pythone 1.2.1 or later
    Connector/J 5.1.27 or later
  2. 安裝mysql fabric (utilities)
    TAR包安裝 (本次使用版本為mysql-utilities 1.6)
    unzip mysql-utilities-version.zip
    cd mysql-utilities-version
    python ./setup.py build
    python ./setup.py install


    RPM安裝
    rpm -ivh mysql-utilities-version-el6.noarch.rpm
  3. 安裝和啟動資料庫(Backing store和user database)
    ((安裝過程不再贅述))
  4. 建立使用者及設定權限
    需要4種角色:Backing store user、Server user、 Backup and Restore user
    Backing store就是用在Fabric Server的那個資料庫,Server即使用者資料庫,我個人認為Backup和Restore可以使用同一個使用者即可

    Backing Store User:
    CREATE USER 'fabric_store'@'localhost' IDENTIFIED BY 'password';
    GRANT ALTER, CREATE, CREATE VIEW, DELETE, DROP, EVENT, INDEX, INSERT, REFERENCES, SELECT, UPDATE ON fabric.* TO 'fabric_store'@'localhost';


    Server User:(這個使用者在故障轉移時會用到)
    CREATE USER 'fabric_server'@'localhost' IDENTIFIED BY 'password';
    GRANT DELETE, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SELECT, SUPER, TRIGGER ON *.* TO 'fabric_server'@'localhost';
    GRANT ALTER, CREATE, DELETE, DROP, INSERT, SELECT, UPDATE ON fabric.* TO 'fabric_server'@'localhost';
    (2016/01/15更新,v1.5.6中一定要指定對mysql_fabric.*的權限,雖然沒這個資料庫但它是寫在源碼裡指定的…)
    GRANT ALTER, CREATE, DELETE, DROP, INSERT, SELECT, UPDATE ON mysql_fabric.* TO 'fabric_server'@'localhost';


    Backup User:
    CREATE USER 'fabric_backup'@'localhost' IDENTIFIED BY 'password';
    GRANT EVENT, EXECUTE, REFERENCES, SELECT, SHOW VIEW, TRIGGER ON *.* TO 'fabric_backup'@'localhost';


    Restore User:
    CREATE USER 'fabric_restore'@'localhost' IDENTIFIED BY 'password';
    GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TABLESPACE, CREATE VIEW, DROP, EVENT, INSERT, LOCK TABLES, REFERENCES, SELECT, SUPER, TRIGGER ON *.* TO 'fabric_restore'@'localhost';
  5. 配置fabric.cfg參數檔
    參考官網
    http://dev.mysql.com/doc/mysql-fabric/1.6/en/fabric-configuration-file.html
  6. 設定mysqlfabric
    mysqlfabric --config=config/fabric.cfg manage setup

    設定完可以透過mysqlshow來查看目前Fabric配置是否正確
    mysqlshow -ufabric_store -p --protocol=tcp -P3306 fabric
    (mysqlfabric 1.5.6 用--protocol預設走IPv6,要走IPv4直接指定-h or --host即可)
  7. 啟動Fabric
    mysqlfabric --config=config/fabric.cfg manage start > /var/log/fabric.log &

    檢查Fabric啟動狀態
    mysqlfabric --config=config/fabric.cfg manage ping
    正常會出現下圖訊息:

  8. 建立高可用(High-Availability)群組
    mysqlfabric <grp> <cmd> <grp_name>
    mysqlfabric --config=config/fabric.cfg group create mygroup1
    mysqlfabric --config=config/fabric.cfg group add mygroup1 localhost:3316
    mysqlfabric --config=config/fabric.cfg group add mygroup1 localhost:3326

    mysqlfabric --config=config/fabric.cfg group add mygroup1 localhost:3336

    mysqlfabric --config=config/fabric.cfg group add mygroup1 localhost:3346


    確認所有的server是否有正確加入群組中
    mysqlfabric --config=config/fabric.cfg group lookup_servers mygroup1

    其結果如下圖:


    或是執行health來檢查狀態
    mysqlfabric --config=config/fabric.cfg group health mygroup1
  9. 推舉(Promote)群組裡其中一台Server來當主伺服器(Primary)
    mysqlfabric --config=config/fabric.cfg group promote mygroup1
    確認狀態是否有正確的推舉一台伺服器為主伺服器
    mysqlfabric --config=config/fabric.cfg group lookup_servers mygroup1

    其結果如下圖:
  10. 活化故障檢測器 (Activating a failure detector)
    mysqlfabric --config=config/fabric.cfg group activate mygroup1
  11. 故障測試
    關閉Primary伺服器,查看是否有自動切換
  12. 將故障伺服器重新加入Secondary
    若是資料庫有損毀的狀況,記得一定要先將完整的資料從Master中備份並還原後再開始設定,否則會無法設定複製
    確認資料都還原後開始執行rejoin動作

    mysqlfabric --config=config/fabric.cfg server set_status localhost:3336 spare
    mysqlfabric --config=config/fabric.cfg server set_status localhost:3336 secondary

    (2016/01/25更新)
    在做spare過程中不知道為什麼會一直出現錯誤,但你進資料庫裡面看會發現其實它已經有把Faulty的那台設好Replication,只是在Fabric中看到還是Faulty狀態,這時候去Faulty的資料庫裡面執行slave stop,然後繼續做spare的動作,前2次還是會出現錯誤訊息第3次就會成功了,成功之後再接著做設定成secondary;過程讓我覺得非常的莫名其妙完全不知道錯在哪,也看到其他的詳細資訊好讓你查問題。
    stop slave前出現的錯誤
    Stop slave後出現的錯誤
  13. 註記…
    在fabric.cfg裡面會看到protocol.xmlrpc和protocol.mysql兩個區塊的設定,一般程式是走protocol.xmlrpc(目前只支援java和python)因此是連32274這個埠號,至於protocol.mysql走的32275官方文件是說透過mysql這個終端工具是走這個埠,但進入之後對它執行任何語法都沒有什麼反應,呃…目前還不太清楚這個埠進去後是會到哪去。
  14. 2016/01/15更新
    protocol.mysql這個是要給MySQL Workbench使用的,它的使用者帳號密碼會存在Fabric資料庫下的users裡面,workbench連線設定如下:
    選擇MySQL Fabric Management Node
    如果可以連得上會顯示這個樣子
可以看到Fabric下面管理幾個節點及Primayr, Secondary的分佈
狀況,只要這些節點有設好權限,也可以直接登入DB進行管理

留言

這個網誌中的熱門文章

【工作筆記】SQL Timeout追蹤

MySQL監控軟體MEM及PMM介紹

MySQL Router 設定檔說明