MySQL 高可用架構之 MMM 架構

來杯可樂不加糖發表於2019-08-12

主要作用

監控和管理MySQL的主主複製拓撲,並在當前的主伺服器失效時,進行主和主備伺服器之間的主從切換和故障轉移等工作。

主要功能:

  • 監控MySQL主從複製健康狀況(主動主動模式下的主主複製(主主),主動被動模式的主主複製(主主備))
  • 在主庫出現當機時進行故障轉移並自動配置其它從DB對新主DB的複製
  • 提供可主,寫(讀)虛擬IP,在主從伺服器出現問題時可用自動遷移虛擬IP

架構:
ThinkPHP
資源:
ThinkPHP
部署:

  1. 配置主主複製及主從同步叢集
  2. 安裝主從節點所需要的支援包(perl)
  3. 安裝及配置MMM工具集
  4. 允許MMM監控服務
  5. 測試配置

- 演示:

  • 拓撲圖(VIP: visual IP)
    ThinkPHP

步驟:

1、配置主(100)<->主(101)[參考: [Tony 老師搭建 MySQL 主從伺服器](https://learnku.com/articles/31832)]
2、配置主(100)<->從(102)   [參考: [Tony 老師搭建 MySQL 主從伺服器](https://learnku.com/articles/31832)]
3、 安裝
     rpm -vih <http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm>
     rpm -Uvh <http://rpms.remirepo.net/enterprise/remi-release-7.rpm>
4、 yum clean all && yum makecache
5、更改yum源配置
    yum search mmm  # 查詢mmm支援包
    yum -y install mysql-mmm-agent.noarch #每個伺服器都需要安裝mmm代理
    yum -y install mysql-mmm*  #監控伺服器安裝監控服務
    systemctl status mysql-mmm-agent
    systemctl start mysql-mmm-agent
    systemctl stop mysql-mmm-agent
    systemctl restart mysql-mmm-agent
6、建立賬號
    CREATE USER repl@'192.168.71.%' identified by '123456'; //建立,建議從伺服器IP段 ①
    CREATE USER mmm_monitor@'192.168.71.%' identified by '123456'; //建立,建議從伺服器IP段 ①
    CREATE USER mmm_agent@'192.168.71.%' identified by '123456'; //建立,建議從伺服器IP段 ①
7、賬號授權
    GRANT replication client on *.* to 'mmm_monitor'@'192.168.71.%' identified by '123456';   #用於MMM監控伺服器使用,在master上建立
    GRANT super,replication client ,process on *.* to 'mmm_agent'@'192.168.71.%' identified by '123456';    #MMM代理服務,改變故障轉移和主從切換
    GRANT REPLICATION SLAVE ON *.* TO repl@'192.168.71.%'; //授權 複製賬號
8、配置MMM(資料庫節點配置,三臺均配置)
    cd /etc/mysq-mmm/
    vim mmm_common.conf
    配置< host default >:
        網口:cluster_interface 
        pid和bin路徑:預設
        replication_user:repl
        replication_password:123456
        agent_user:mmm_agent
        agent_password:123456
    配置< host db1 >:
        ip :192.168.71.244
        mode :master
        peer:db2
    配置 < host db2 > :
        ip:192.168.71.223
        mode:master
        peer:db1
    配置< host db3 >:
        ip:192.168.71.220
        mode:slave
    配置< role writer >
        hosts : db1,db2
        ips:192.168.71.90
        mode:exclusive( 唯一的)
    配置 < role reader >
        hosts:db1,db2,db3
        ips:192.168.71.91,192.168.71.92,192.168.71.93
        mode:balanced(平衡的)
    複製配置檔案到其他伺服器
        scp mmm_common.conf root@192.168.71.223:/etc/mysql-mmm/
        scp mmm_common.conf root@192.168.71.220:/etc/mysql-mmm/
    vim mysql-agent.conf (三臺伺服器對應設定為:db1,db2,db3)

9、監控節點配置(192.168.71.220,只配置監控節點)
    vim mmm_mon.conf  #監控資料檔案
    配置< host default >
        monitor_user :mmm_monitor
        monitor_password:123456
    配置monitor
        ping_ips:192.168.71.244,192.168.71.223,192.168.71.220
10、啟動MMM服務
    /etc/init.d/mysql-mmm-agent start(三臺伺服器均啟動代理服務)
    /etc/init.d/mysql-mmm-monitor start (監控伺服器啟動監控服務)
11、檢視監控資訊
    mmm_control  
    mmm_control show #檢視叢集狀態
    mmm_control checks all #檢查叢集狀態
    mmm_control ping #檢查與監控伺服器連線狀態
    mmm_control set_online/offline #設定伺服器上線/下線
    mmm_control help #檢視幫助
12、檢視伺服器虛擬IP狀態
13、測試
    關閉db1的資料庫:/etc/init.d/mysqld stop
    檢視監控伺服器上叢集狀態:mmm_control show
    檢視DB3的主從狀態

常見問題:

**透過mmm_control checks all 檢查伺服器狀態**
Q1:
    UNKNOWN: Error occurred: install_driver(mysql) failed: Can't load '/usr/lib64/perl5/vendor_perl/auto/DBD/mysql/mysql.so' for module DBD::mysql: libmysqlclient.so.18: cannot open shared object file: No such file or directory at /usr/lib64/perl5/DynaLoader.pm line 190, <STDIN> line 1.
A1:
    perl-DBD-MySQL安裝出問題
        S1:rpm -qa |grep -i DBD  #檢視DBD安裝
        S2:rpm -e --nodeps perl-DBD-MySQL-4.023-6.el7.x86_64 #解除安裝DBD
        S3:rpm -qa |grep -i DBD #檢視解除安裝狀態
        S4:wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm #下載MySQLserver,可根據系統選擇具體版本
        S5:rpm -ivh mysql-community-release-el7-5.noarch.rpm #rpm MySQLserver
        S6:yum install mysql-community-server #yum安裝
        S7:yum install perl-DBD-MySQL    #重新安裝
        S8:systemctl restart mysql-mmm-monitor #重啟
        S9:mmm_control checks all  + mmm_control show ->正常
Q2:
    當M1當機時,MMM架構自動切換至M2,插入資料,S未更新,M1重啟時,S仍未更新
A2:
    插入S一條空事務,記錄與M2時相同即可。
Q3:
    handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000002, end_log_pos 673 #跳過插入 | 更新 | 刪除
A3:
    stop slave;
    insert into user(`username`) values('1');
    set global sql_slave_skip_counter=1;
    start slave;
Q4:
    The slave I/O thread stops because master and slave have equal MySQL server ids #切換主從發現,server_id相同
A4:
    show variables like '**server_id**';
    vim /etc/my.cnf    修改server_id 值
**配置多執行緒**
stop slave #在從上,停止鏈路複製
set global slave_parallel_type = 'logical_clock';  #設定邏輯時鐘的方式
set global slave_parallel_workers = 4;      #設定併發執行緒數
start slave;
本作品採用《CC 協議》,轉載必須註明作者和本文連結
來杯可樂不加糖。

相關文章