1. 程式人生 > >MySQL-MMM高可用

MySQL-MMM高可用

可用性 時間 刪除 -m 0.11 自動 mar set lease

  • MMM介紹
  • MMM(Master-Master replication manager for MySQL)是一套支持雙主故障切換和雙主日常管理的腳本程序。MMM使用Perl語言開發,主要用來監控和管理MySQL Master-Master(雙主)復制,可以說是mysql主主復制管理器。雖然叫做雙主復制,但是業務上同一時刻只允許對一個主進行寫入,另一臺備選主上提供部分讀服務,以加速在主主切換時刻備選主的預熱,可以說MMM這套腳本程序一方面實現了故障切換的功能,另一方面其內部附加的工具腳本也可以實現多個slave的read負載均衡。關於mysql主主復制配置的監控、故障轉移和管理的一套可伸縮的腳本套件(在任何時候只有一個節點可以被寫入),這個套件也能對居於標準的主從配置的任意數量的從服務器進行讀負載均衡,所以你可以用它來在一組居於復制的服務器啟動虛擬ip,除此之外,它還有實現數據備份、節點之間重新同步功能的腳本。

    MMM提供了自動和手動兩種方式移除一組服務器中復制延遲較高的服務器的虛擬ip,同時它還可以備份數據,實現兩節點之間的數據同步等。由於MMM無法完全的保證數據一致性,所以MMM適用於對數據的一致性要求不是很高,但是又想最大程度的保證業務可用性的場景。MySQL本身沒有提供replication failover的解決方案,通過MMM方案能實現服務器的故障轉移,從而實現mysql的高可用。對於那些對數據的一致性要求很高的業務,非常不建議采用MMM這種高可用架構。

    安裝更新源

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    //可5臺同時安裝 更換源
    yum -y install epel-release  //進行eOpel更新
    yum clean all && yum makecache  四臺MySQL 清空原有的 安裝新的
    yum -y install mariadb-server mariadb  //安裝MySQL
    systemctl stop firewalld.service     //關閉服務器
    setenforce 0   //安全×××

    修改MySQL主配置文件4臺都一樣的配置 除了service——id 的序號

    #vi /etc/my.cnf  
    (9dd 刪除原有的配置 添加下面的)
     [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  //不需要同步的數據庫名稱
    character_set_server=utf8
    log_bin=mysql_bin                  //開啟binlog日誌用於主從復制
    server_id=1                            //4臺id設置不同
    log_slave_updates=true
    sync_binlog=1
    auto_increment_increment=2    //字段一次遞增多少
    auto_increment_offset=1           //自增字段的起始值:1,3,5,7...等 奇數ID
    
    # systemctl start mariadb  //開啟服務

    技術分享圖片
    安裝yum -y install mysql-mmm* 並且進行配置

    # yum -y install mysql-mmm*
    # cd /etc/mysql-mmm/
    # vi /etc/mysql-mmm/mmm_common.conf   //所有主機上都要配置
      ……
    <host default>
    cluster_interface ens33
    ……
    replication_user replication ? ? ? ? //復制用戶密碼
    replication_password 123456 ? ? ? ? //復制用戶
    agent_user mmm_agent ? ? ? ? //代理用戶
    agent_password 123456 ? ? ? ? //代理用戶密碼
    
    <host db1> ? ? ? ? ? //master-db1的host名稱
    ip 192.168.100.10
    mode master ? ? ? //主
    peer db2 ? ? ? //與master-db1對等的服務器的host名,也就是master-db2的服務器host名
    </host>
    
    <host db2>
    ip 192.168.100.24
    mode master
    peer db1
    </host>
    
    <host db3>
    ip 192.168.100.25
    mode slave ? ? ? ? // 從
    </host>
    
    <host db4>
    ip 192.168.100.26
    mode slave
    </host>
    
    <role writer>
    hosts db1, db2
    ips 192.168.100.100 ? ? ? ? //對外提供的寫操作的虛擬IP
    mode exclusive ? ? ? ? //exclusive代表只允許存在一個主,也就是只能提供一個寫的IP
    </role>
    
    <role reader>
    hosts db3, db4
    ips 192.168.100.210, 192.168.100.220 ? ? ? ?//對外提供讀操作的虛擬ip
    mode balanced ? ? ? ?//balanced代表負載均衡
    </role>
    復制給其他服務器
    # scp mmm_common.conf [email protected]:/etc/mysql-mmm/
    # scp mmm_common.conf [email protected]:/etc/mysql-mmm/
    # scp mmm_common.conf [email protected]:/etc/mysql-mmm/
    • Monitor服務器配置
      # cd /etc/mysql-mmm/
      # vi mmm_mon.conf
      ping_ips      192.168.100.10,192.168.100.11,192.168.100.12,192.168.100.13 //數據庫服務器地址
      auto_set_online     10        //自動上線時間 10秒
      .....
      <host default>
          monitor_user        mmm_monitor
          monitor_password    123456
      </host>
    • 在所有數據庫上為mmm_agent 和 mmm_moniter 授權
      mysql> grant super, replication client, process on *.* to ‘mmm_agent‘@‘192.168.100.%‘ identified by ‘123456‘;
      mysql> grant replication client on *.* to ‘mmm_monitor‘@‘192.168.100.%‘ identified by ‘123456‘;
      mysql> flush privileges;   //刷新權限
    • 修改所有數據庫的mmm_agent.conf
      # vi /etc/mysql-mmm/mmm_agent.conf
      ....
      this db1         //主1為db1、  主2為db2、   從1為db3 、  從2為db4

      技術分享圖片
      技術分享圖片

    MySQL-MMM高可用