《Disney +》 迪士尼、Marvel、彼思、星球大戰…  Playful Festival新春購物優惠及線上挑戰賽活動公開   HP將以4.25億美元收購電競品牌「HyperX」!金士頓DRAM與SSD產品線將不受影響。   《魔物獵人崛起》免費大型更新「Ver.3.0」發布!追加新魔物&新結局!   澀谷實境RPG!《新‧美麗新世界》×「FIELD WALK RPG」街道探索活動開跑!   Ghost of Tsushima: 深入探究壹岐島的黑暗秘辛   全新顏色的DualSense無線控制器將於下個月推出,緊接著是新的PS5主機護蓋   電競設施將常駐於JR東日本松戶站,想嘗試電競的朋友不要錯過!   《Nour》:跟食物的副主廚——互動式原聲配樂——同工同樂 

MySQL Master-Master Replication Manager(完) – 問答

商業

MySQL Master-Master Replication Manager(完) - 問答

MySQL Master-Master Replication Manager 完結篇, 就來做個問與答吧~(這三篇文章都是 MMM 1.0 版) 不知道什麼是 MySQL Master-Master Replication Manager(MMM) 的, 請先看下述文章:

MMM 的問與答

將其中一台 MySQL 關掉, Mon 該如何動作?
  1. Mon 會自動把 IP 轉到另外一台, 等 MySQL 回復後自然會還原.
  2. mmm_control show # 若沒有自動還原
  3. mmm_control set_online db1 # 將沒有還原(假設是 db1)那台的設定上線.
先將 mmmd_agent kill 掉, 再把 MySQL kill 掉, 然後再把 MySQL start, Mon 會如何動作?
  1. 因為 Mon 是自動去連 MySQL 的, 所以不會因為 mmmd_agent 砍掉而有影響, MySQL kill 掉時, Mon 一樣會知道那台是掛掉的,(master/HARD_OFFLINE)
  2. 此時於 另外一台 MySQL 寫的資料, 於此台 MySQL start 時, 會自動寫入, 不過 Mon 無法將這台回復的機器登記入可以讀寫,(master/AWAITING_RECOVERY)
  3. 因為這台的 mmmd_agent 還沒起來, 沒辦法知道是否已經跟上 replication 沒.
  4. 所以要先啟動 mmmd_agent, Mon 再 mmm_control set_online db1.
Mon 的 mmmd_mon kill 掉, 對其它有沒有影響?
沒有影響, /usr/local/mmm/scripts/init.d/mmm_mon start 即可.
Master 測試重新開機 shutdown -n -f -r now
重新開機完後的處理步驟:
  • 於 重開機的機器(Master)
    1. /etc/init.d/mysql start # 這種重開法, MySQL 不一定能正常啟動.
    2. ps aux | grep mmm # 看 mmmd_agent 是否有正常啟動.
  • 於 Mon 的機器
    1. mmm_control show # 會發現啟動後, master 的狀態會由 HARD_OFFLINE -> AWAITING_RECOVERY
    2. mmm_control set_online db1 # 讓它啟動接受服務.
Mon 測試重新開機 shutdown -n -f -r now
重新開機完後的處理步驟: 於 Mon 的機器
  1. ps aux | grep mmm # 看 mmm_mon 是否有正常啟動, 沒有正常啟動就執行 /etc/init.d/mmm_mon start
  2. mmm_control show # 看監控的機器是否都還正常
Master 死掉, 然後造成 Reader 和 Writer 互換, 若 Mon 重新啟動會回復原始設定嗎? 若不會, 想要互換要怎麼換?
  1. 不會回復原始設定, 用的是最後跑的狀態.
  2. 想要將設定的互換, 步驟如下:
    1. master mysql restart
    2. slave mysql> start slave;
    3. 這 樣子就會互換了 (因為 Master MySQL restart, Slave 那台 replication 會停掉, 所以 Mon 會將所有 IP 都指向 Master, 再將 Slave replication 搞定, 就會再把 reader 指回 slave 了)
  3. 設定互換的另一種方法, 就是把另外一台先設 mmm_control set_offline, 再 set_online 即可.
  4. 設定互換的另一種方法, 使用 mmm_control move_role writer db1, 設定設回 Writer 去.(不過此方法我測試似乎不會動)
寫入, 讀取應該要用的IP, 要用本機IP 還是設定的 db-r, db-w IP?
寫入/讀取要用的 IP, 是要用設定的 db-r, db-w 的IP, 設定的 db-r 的 IP(只要 Writer 沒有指到此 IP), INSERT/UPDATE/DELETE 的動作會把你擋掉, 會出現 ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement 的錯誤訊息.(不過 CREATE/DROP Table 等動作不會被擋掉.)
在 Master 上的 mmm/bin/* 有很多檔案, 要怎麼讓他可以使用?
要先讓它有存取 MySQL 的權限, 於 mysql> 就這樣子下: (帳號/密碼/IP 請自行修改)
  1. mysql> GRANT ALL PRIVILEGES on *.* to 'rep_agent'@'192.168.1.181' identified by 'RepAgent';
  2. mysql> GRANT ALL PRIVILEGES on *.* to 'rep_agent'@'192.168.1.182' identified by 'RepAgent';
  3. mysql> FLUSH PRIVILEGES;
  4. 不過 mysql_deny_write 並不會讓它不能寫入.(此程式會幫你執行: set global read_only=1, 不過 CREATE/DROP 還是可以使用. XD)
想要一台 Mon 管理多台 agent 要怎麼設定?
  1. 將 /usr/local/mmm/etc/mmm_mon.conf 改名成 mmm_mon_c1.conf
  2. 就可以 mmm_control @c1 show 來管理 c1 的 Cluster, 就可由此來做其它 Cluster 的 Mon 設定囉~
mmm_control 哪些狀態可以將機器 set_online?
master/AWAITING_RECOVERY 或 master/ADMIN_OFFLINE 的狀態.
mmm_contorl 全部狀態有哪些?
mmm_control show 會看到機器有下述的狀態: (原文可見: HowToUse - mysql-master-master)
  • master/ONLINE - 此機器沒有任何問題, 正常執行.
  • master/AWAITING_RECOVERY - 此機器的 MySQL 可能有重開, 並沒有被設定上線, 於 replication 跟上進度後(若 replication 有損壞的狀況, 需自行修復), 使用 mmm_control @C1 set_online 機器名稱 的命令讓他上線.
  • master/ADMIN_OFFLINE - 管理者設定讓這台機器下線.
  • master/HARD_OFFLINE - 此 MySQL 是沒辦法 ping 到, 可能是網路問題或者機器當掉或重開等等.
  • master/REPLICATION_FAIL - MySQL 的 replication error. 遇到先修復 replication 的狀況, 才能讓它再上線.
  • master/REPLICATION_DELAY - MySQL 死掉時, 可能 MMM 自動移動 reader 的角色到 Master 去, 但是 Reader 起來後, Replication 還根不上進度, 需要等它跟上才能恢復上線.
於 lvm 的環境下, 如何快速建立一台 Master (Master-Master) 架構?
  1. LVM 安裝: apt-get install lvm2 dmsetup mdadm reiserfsprogs xfsprogs # LVM 詳細安裝步驟可參考: A Beginner's Guide To LVM
  2. 設定好 /usr/local/mmm/etc/mmm_lvm.conf
  3. 就可以於 db2# mmm_clone --host db1 --clone-mode master-master (此指令會將 db2 的 MySQL 停掉, 再 scp 過來)
  4. 註: 不過這個我也沒試過.
讀取都是透過 Mon 指定的那兩個 Writer/Reader 的 IP, 但是 Mon 死掉的話, 會不會就無法寫入/讀取?
不會, 因為 Mon 是透過 Address Resolution Protocol (ARP), 而 ARP 在每台機器是都會有暫存區, 存: IP <-對應-> Mac Address 的資料, 所以 Mon 死掉在 ARP Cache 過期前, 都不會有影響.

常見 FAQ

隨機商業新聞

Gearbest 購物平台