MariaDB-MMM高可用羣集

什麼是MMM?

MMM(MySQL主主複製管理器)是一套支持雙主故障切換和雙主日常管理的腳本程序。MMM使用Perl語言開發,主要用來監控和管理MySQL Master-Master(雙主)複製,雖然叫做雙主複製,但是業務上同一時刻只允許對一個主進行寫入,另一臺備選主上提供部分讀服務,以加速在主主切換時備選主的預熱,可以說MMM這套腳本程序一方面實現了故障切換的功能,另一方面其內部附加的工具腳本也可以實現多個Slave的read負載均衡。

MMM提供了自動和手動兩種方式移除一組服務器中複製延遲較高的服務器的虛擬IP,同時它還可以備份數據,實現兩節點之間的數據同步等。由於MMM無法完全保證數據的一致性,所以MMM適用於對數據的一致性要求不是很高,但是又想最大程度地保證業務可用性的場景。對於那些數據一致性要求很高的業務,非常不建議採用MMM這種高可用架構。

MMM是一套靈活的腳本程序,基於perl實現,用來對mysql replication進行監控和故障遷移,並能管理MySQL Master-Master複製的配置。

關於MMM高可用架構的說明如下

  • mmm_mon:監控進程,負責所有的監控工作,決定和處理所有節點角色活動。此腳本需要在監管機上面運行
  • mmm_agent:運行在每個MySQL服務器上的代理進程,完成監控的探針工作和執行簡單的遠端服務設置。此腳本需要在監管機上面運行
  • mmm_control:一個簡單的腳本,提供mmm_mond進程的命令
  • mysql_mmm的監管端會提供多個虛擬IP(VIP),包括一個可寫VIP,多個可讀VIP,通過監管的管理。這些IP會綁定在可用MySQL之上,當某一臺MySQL宕機時,監管會將VIP遷移至其他MySQL。
    在整個監管過程中,需要在MySQL中添加相關授權用戶,以便讓MySQL可以支持監理機的維護。授權的用戶包括一個mmm_monitor用戶和一個mmm_agent用戶,如果想使用MMM的備份工具則還要添加一個mmm_tools用戶。

什麼是MariaDB數據庫?

MariaDB數據庫管理系統是MySQL的一個分支,主要由開源社區在維護,採用GPL授權許可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能輕鬆成爲MySQL的代替品。在存儲引擎方面,使用XtraDB來代替MySQL的InnoDB。MariaDB基於事務的Maria存儲引擎,替換了MySQL的MyISAM存儲引擎,它使用了Percona的 XtraDB,InnoDB的變體,分支的開發者希望提供訪問即將到來的MySQL 5.4 InnoDB性能。這個版本還包括了 PrimeBase XT (PBXT) 和 FederatedX存儲引擎。

項目環境

本次項目使用五臺centos7服務器模擬搭建

主機 操作系統 IP地址 VIP 主要軟件
MariaDB-m1 主服務器 CentOS-7-x86_64 172.16.10.23 172.16.10.100 MariaDB、MMM
MariaDB-m2 主服務器 CentOS-7-x86_64 172.16.10.20 172.16.10.100 MariaDB、MMM
MariaDB-m3 從服務器 CentOS-7-x86_64 172.16.10.24 172.16.10.110 MariaDB、MMM
MariaDB-m4 從服務器 CentOS-7-x86_64 172.16.10.22 172.16.10.120 MariaDB、MMM
MariaDB-monitor CentOS-7-x86_64 172.16.10.21 MMM

MariaDB-MMM高可用羣集

搭建MariaDB多主多從模式

安裝MariaDB

配置ALI雲源,安裝epel-release源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release
yum clean all && yum makecache   //清空所有,重新更新元數據緩存

配置epel源須在五臺服務器上都操作

安裝mariadb

yum -y install mariadb-server mariadb

關閉防火牆及selinux防火牆

systemctl disable firewalld.service
systemctl stop firewalld.service
setenforce 0

以上三個步驟在另外三臺數據庫服務器上一摸一樣,重複三遍

配置mariadb配置文件

vim /etc/my.cnf
[mysqld]
log_error=/var/lib/mysql/mysql.err               //錯誤日誌文件位置
log=/var/lib/mysql/mysql_log.log                 //訪問日誌文件位置
log_slow_queries=/var/lib/mysql_slow_queris.log  //慢日誌文件位置
binlog-ignore-db=mysql,information_schema        //mysql,information_schema這兩個數據庫不生成二進制日誌文件
character_set_server=utf8
log_bin=mysql_bin                                //二進制日誌文件功能開啓
server_id=10                                     //id每臺都不相同
log_slave_updates=true                           //開啓同步
sync_binlog=1                                    //1爲安全值
auto_increment_increment=2
auto_increment_offset=1

開啓服務

systemctl start mariadb    //開啓服務
netstat -anpt | grep 3306  //查看服務狀態

配置文件修改時,只需將原有的[mysqld]直接刪除,大約九行。替換爲以上內容,四臺服務器(MariaDB-m1、MariaDB-m2、MariaDB-m3、MariaDB-m4)的修改方法基本一致,唯一的不同是server_id不可相同,只要不同即可。
MariaDB-MMM高可用羣集

配置MariaDB-m1、MariaDB-m2主主模式

  • 先查看log bin日誌和pos值的位置
    在MariaDB-m1、MariaDB-m2中分別進行操作
    mysql   //登陸數據庫
    show master status;

    MariaDB-MMM高可用羣集
    MariaDB-MMM高可用羣集

  • MariaDB-m1、MariaDB-m2互相提升訪問權限
    在兩臺主服務器上分別執行
    #MariaDB-m1
    grant replication slave on *.* to 'replication'@'172.16.10.%' identified by '123456';
    //使用賬戶爲replication 密碼爲123456
    change master to master_host='172.16.10.20',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245;
    //當在MariaDB-m1上執行時,master_host地址爲MariaDB-m2地址
    ···
    #MariaDB-m2
    grant replication slave on *.* to 'replication'@'172.16.10.%' identified by '123456';
    //在兩臺master上分別執行,slave不需要執行
    change master to master_host='172.16.10.23',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245;
    //當在MariaDB-m2上執行時,master_host地址爲MariaDB-m1地址
  • 開啓同步,同時查看服務器的主從狀態
    Slave_IO_Running: Yes、Slave_SQL_Running: Yes這兩個條目的結果,必須爲yes
    start slave;
    show slave status\G;

    MariaDB-MMM高可用羣集
    MariaDB-MMM高可用羣集

    測試主主同步是否成功

    在主服務器上創建一個庫,然後查看從服務器上是否有新創建的庫,若新創建庫存在;則再嘗試在從服務器上刪除新創建的庫,若是此時主服務器上的庫被成功刪除,則表示主主複製創建成功。

    配置MariaDB-m3、MariaDB-m4作爲MariaDB-m1的從服務器

    在MariaDB-m3、MariaDB-m4上進行操作

  • 查看MariaDB-m1上log bin日誌和pos值的位置
    mysql
    show master status;

    注意日誌文件和位置參數的改變
    MariaDB-MMM高可用羣集

  • 在MariaDB-m3、MariaDB-m4上分別執行
    change master to master_host='172.16.10.23',master_user='replication',master_password='123456',master_log_file='mysql_bin.000004',master_log_pos=245;
  • 分別查看MariaDB-m3、MariaDB-m4上主從狀態
    start slave;
    show slave status\G;

    MariaDB-MMM高可用羣集
    MariaDB-MMM高可用羣集

    安裝配置MMM

    安裝MMM

    我們在最開始的操作中已經對所有的五臺服務器都安裝了epel源,所以這裏只需要使用yum安裝即可,所有的服務器都需安裝mysql-mmm*

    yum -y install mysql-mmm*

    配置MMM

    五臺服務器中的該配置文件都是相同的

    vim /etc/mysql-mmm/mmm_common.conf
    active_master_role      writer
    <host default>
    cluster_interface       ens33
    pid_path                /run/mysql-mmm-agent.pid
    bin_path                /usr/libexec/mysql-mmm/
    replication_user        replication
    replication_password    123456
    agent_user              mmm_agent
    agent_password          123456
    </host>
    <host db1>
    ip      172.16.10.23
    mode    master
    peer    db2
    </host>
    <host db2>
    ip      172.16.10.20
    mode    master
    peer    db1
    </host>
    <host db3>
    ip      172.16.10.24
    mode    slave
    </host>
    <host db4>
    ip      172.16.10.22
    mode    slave
    </host>
    <role writer>
    hosts   db1, db2
    ips     172.16.10.100
    mode    exclusive
    </role>
    <role reader>
    hosts   db3, db4
    ips     172.16.10.110, 172.16.10.120
    mode    balanced
    </role>
    </host>
    <host db4>
    ip      172.16.10.22
    mode    slave
    </host>
    <role writer>
    hosts   db1, db2
    ips     172.16.10.100
    mode    exclusive
    </role>
    <role reader>
    hosts   db3, db4
    ips     172.16.10.110, 172.16.10.120
    mode    balanced
    </role>

    MariaDB-MMM高可用羣集

快速爲其他服務器修改配置文件

scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/
scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/
scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/
scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/

MariaDB-MMM高可用羣集

在數據庫主機上修改/etc/mysql-mmm/mmm_agent.conf文件,根據不同主機,修改不同的名稱

vim /etc/mysql-mmm/mmm_agent.conf
this db1  //按着順序分別修改爲db1、db2、db3、db4

MariaDB-MMM高可用羣集

對所有數據庫服務器進行一波安排

  • 在所有數據庫上爲mmm_agent授權
    grant super, replication client, process on *.* to 'mmm_agent'@'172.16.10.%' identified by '123456';
  • 在所有數據庫上爲mmm_moniter授權
    grant replication client on *.* to 'mmm_monitor'@'172.16.10.%' identified by '123456';
  • 重新加載權限表
    flush privileges;
  • 在所有數據庫服務器上啓動mysql-mmm-agent
    systemctl start mysql-mmm-agent.service    //開啓服務
    systemctl enable mysql-mmm-agent.service   //加入開機自啓動

    配置監控主機

    在監控主機(MariaDB-monitor)上修改/etc/mysql-mmm/mmm_mon.conf文件

    vim /etc/mysql-mmm/mmm_mon.conf
    include mmm_common.conf
    <monitor>
    ip                  127.0.0.1
    pid_path            /run/mysql-mmm-monitor.pid
    bin_path            /usr/libexec/mysql-mmm
    status_path         /var/lib/mysql-mmm/mmm_mond.status
    ping_ips            172.16.10.23,172.16.10.20,172.16.10.24,172.16.10.22
    auto_set_online     10
    # The kill_host_bin does not exist by default, though the monitor will
    # throw a warning about it missing.  See the section 5.10 "Kill Host
    # Functionality" in the PDF documentation.
    #
    # kill_host_bin     /usr/libexec/mysql-mmm/monitor/kill_host
    #
    </monitor>
    <host default>
    monitor_user        mmm_monitor
    monitor_password    123456
    </host>
    debug 0

    MariaDB-MMM高可用羣集

關閉防火牆及selinux防火牆

systemctl disable firewalld.service
systemctl stop firewalld.service
setenforce 0

啓動服務,查看各節點狀態

systemctl start mysql-mmm-monitor.service

MariaDB-MMM高可用羣集
ERROR: Can't connect to monitor daemon!,如若出現報錯,可嘗試重啓服務解決

查看監控服務器對所有數據庫的監控是否完善

mmm_control checks all  //檢查結果需爲全部ok

MariaDB-MMM高可用羣集

故障測試

停止m1,查看VIP是否爲漂移到m2上

systemctl stop mariadb.service   //關閉m1

MariaDB-MMM高可用羣集

systemctl start mariadb.service  //開啓m1 主不會搶佔

MariaDB-MMM高可用羣集

停止m3,查看VIP漂移狀態

systemctl stop mariadb.service   //關閉m3

MariaDB-MMM高可用羣集

systemctl start mariadb.service   //開啓m3,VIP會重新回到各自服務器上

MariaDB-MMM高可用羣集

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章