基於mmm實現mysql的高可用

來源:互聯網
上載者:User

標籤:監控主機   ip地址   master   虛擬機器   

一 .實驗前規劃:

實驗環境:CentOS—6.5

資料庫:  Mysql-5.6.19

虛擬機器:VMware Workstation 10


網路拓撲結構:

三個節點非別為 master1,master2,slave. 其中master1與master2做了mysql的雙主複製,slave節點基於master1做主從複製。

由於節點的限制我們將slave節點也做為監控主機。


IP地址規劃:

master1: 10.43.2.81           10.43.2.99       做為提供給應用程式串連讀的節點   


master2: 10.43.2.93           10.43.2.100      做為提供給應用程式串連讀的節點


slave:   10.43.2.93           10.43.2.101      做為提供給應用程式串連可寫的節點


許可權的劃分:

master1與master互為主從在這兩個建立複製使用者 repl 密碼 repl

slave通過以上建立的複製使用者與master1做主從複製,這裡因為是實驗環境為了方便操作所以將用同一個複製使用者資訊,在生產環境中應該避免這個問題。

二.Mysql的相關配置

            在三個幾點上安裝mysql這個安裝可以自行查閱資料

   1.master1與master2做雙主複製:

     修改master1的設定檔如下:

[mysqld]character-set-server=utf8server-id       = 1datadir = /mydata/datalog-bin = /mydata/binglogs/master-binrelay_log = /mydata/relaylogs/relaybinlog_format=mixedthread_concurrency = 4log-slave-updatessync_binlog=1auto_increment_increment=2auto_increment-offset=1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES[client]default-character-set=utf8

進入master1的mysql為master2 授予一個可以用於複製的使用者:repl 密碼:repl

同樣進入master2的mysql為master1授予一個可以用於複製的使用者:repl 密碼:repl

mysql> grant replication slave,replication client on *.* to ‘repl‘@‘%‘ identified by ‘repl‘    mysql> flush privileges;

這裡用 % 表示可以在遠端任意主機登入用repl使用者複製master的資料;當然這裡做也是為了實驗方便,便於實驗環境遷移。在生產環境中應該避免。

2.master1:

mysql> show master status;

+-------------------+----------+--------------+------------------+-------------------+

| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+-------------------+----------+--------------+------------------+-------------------+

| master-bin.000001 |      663 |              |                  |                   |

+-------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

3.修改master2的設定檔:

[mysqld]character-set-server=utf8server-id       = 3                    //mysql的複製應該保持此參數唯一datadir = /mydata/datalog-bin = /mydata/binglogs/master-binrelay_log = /mydata/relaylogs/relaybinlog_format=mixedthread_concurrency = 4log-slave-updatessync_binlog=1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES[client]default-character-set=utf8

4.master2:


mysql> show master status;

+-------------------+----------+--------------+------------------+-------------------+

| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+-------------------+----------+--------------+------------------+-------------------+

| master-bin.000001 |      663 |              |                  |                   |

+-------------------+----------+--------------+------------------+-------------------+

1 row in set (0.01 sec)

5.master2串連master1


change master to master_host=‘10.43.2.81‘,master_user=‘repl‘,master_password=‘repl‘    //生產環境中操作需要指出開始複製的主的二進位記錄檔和起始點,這裡由於資料比較少,二進位日誌完全在就預設不用指,讓其從頭開始複製

start slave ; show slave status\G Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0

 觀察這三個參數的值如上所示表示複製正常

6.同樣master1串連master2

 change master to master_host=‘10.43.2.93‘,master_user=‘repl‘,master_password=‘repl‘

 

start slave ; show slave status\G Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0

 觀察這三個參數的值如上所示表示複製正常

7.slave的設定檔:

[mysqld]character-set-server=utf8server-id       = 3datadir = /mydata/datarelay_log = /mydata/relaylogs/relaybinlog_format=mixedthread_concurrency = 4log-slave-updatessync_binlog=1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES[client]default-character-set=utf8

 slave就不需要開啟二進位日誌,只需要開啟中繼日誌即可。

8.slave串連上master1

change master to master_host=‘10.43.2.81‘,master_user=‘repl‘,master_password=‘repl‘

start slave ; show slave status\G Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0

9.在master2上建立資料進行測試:

 

在master2上建立資料庫sanhong

create database sanhong;

在master1上執行show master status

發現如下結果:

mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || mysql              || performance_schema || sanhong            || test               |+--------------------+5 rows in set (0.32 sec)

sanhong出現表示複製正常;

10.在slave上執行show master status

發現如下結果:

mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || mysql              || performance_schema || sanhong            || test               |+--------------------+5 rows in set (0.32 sec)

sanhong出現表示複製正常;

三.高可用相關的配置

mmm主要功能由下面三個指令碼提供

         mmm_mond  負責所有的監控工作的監控守護進程,決定節點的移除等等

         mmm_agentd  運行在mysql伺服器上的代理守護進程,通過簡單遠程服務集提供給監控節點 預設監聽在TCP的9989連接埠

         mmm_control  通過命令列管理mmm_mond進程                   預設監聽在TCP的9988連接埠

  1. 安裝配置mysql-mmm:


    首先下載epel源 (對應自己作業系統的版本 CentoOS6.4)(三個節點同時安裝)


    wget http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm

    安裝epel源


    yum install -y epel-release-6-8.noarch.rpm


    安裝mysql-mmm-agent (三個節點同時安裝)


    yum -y install mysql-mmm-agent

  2. 編輯mysql_common.conf  (三個節點都需要 編輯完之後複製到三個節點上)


    

active_master_role      writer<host default>    cluster_interface       eth0    pid_path                /var/run/mysql-mmm/mmm_agentd.pid    bin_path                /usr/libexec/mysql-mmm/    replication_user        repl    replication_password    repl    agent_user              agent    agent_password          agent</host><host db1>    ip      10.43.2.81    mode    master    peer    db2</host><host db2>    ip      10.43.2.93    mode    master    peer    db1</host><host db3>    ip      10.43.2.83    mode    slave</host><role writer>    hosts   db1, db2    ips     10.43.2.101    mode    exclusive</role><role reader>    hosts   db2,db3    ips     10.43.2.99,10.43.2.100    mode    balanced</role>

在每個節點上修改mmm_agent.conf這個設定檔

include mmm_common.conf# The ‘this‘ variable refers to this server.  Proper operation requires # that ‘this‘ server (db1 by default), as well as all other servers, have the # proper IP addresses set in mmm_common.conf.this db3                                          //保證這個名稱為相應節點的名稱,比如對於master1來說此處就應該改為 db1 (對應mmm_common.conf)

3.我們將slave做為monitor在上邊安裝監控所需要的包

yum install mysql-mmm* -y


編輯mmm_mon.cof

vim /etc/mysql-mmm/mmm_mon.confinclude mmm_common.conf<monitor>    ip                  127.0.0.1    pid_path            /var/run/mysql-mmm/mmm_mond.pid    bin_path            /usr/libexec/mysql-mmm    status_path         /var/lib/mysql-mmm/mmm_mond.status    ping_ips            10.43.2.81,10.43.2.83,10.43.2.93    auto_set_online     60    # 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        monitor    monitor_password    monitor</host>debug 0


4.啟動MMM進行測試:

   

   三個節點都需要啟動;

[[email protected] mysql-mmm]# service mysql-mmm-agent startStarting MMM Agent Daemon:                                 [  OK  ]


   監控主機節點啟動監控服務:

 

[[email protected] mysql-mmm]# service mysql-mmm-monitor start Starting MMM Monitor Daemon:                               [  OK  ]


   在監控主機上查看各節點資料庫的狀態:

   

[[email protected] mysql-mmm]# mmm_control  show   db1(10.43.2.81) master/ONLINE. Roles: writer(10.43.2.101)  db2(10.43.2.93) master/ONLINE. Roles: reader(10.43.2.99)  db3(10.43.2.83) slave/ONLINE. Roles: reader(10.43.2.100)


顯示結果符合我們上邊的規劃,此時我們停掉一個資料庫

[[email protected] mysql-mmm]# mmm_control set_offline db1OK: State of ‘db1‘ changed to ADMIN_OFFLINE. Now you can wait some time and check all roles![[email protected] mysql-mmm]# mmm_control  show   db1(10.43.2.81) master/ADMIN_OFFLINE. Roles:                                 //db1此時已經下線 vip已經流動到master2即db2上  db2(10.43.2.93) master/ONLINE. Roles: reader(10.43.2.99), writer(10.43.2.101)  db3(10.43.2.83) slave/ONLINE. Roles: reader(10.43.2.100)

 此時我們在master2上建立一個資料庫 ‘jin‘ 觀察slave的情況

master2: mysql> create database jin;Query OK, 1 row affected (0.02 sec) slave:mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || jin                || mysql              || performance_schema || sanhong            || test               |+--------------------+6 rows in set (0.00 sec)

出現‘jin‘ 說明了 雖然slave與master1做的主從但是當master1離線後slave自動會同步master2的資料。


四:總結

  經過以上步驟簡單的實現了基於mmm的mysql高可用的實現。也發現了mmm優於keepalive的地方。

  1. mmm不但可以監控兩個master節點的運行狀態,還可以監控多個slave節點的運行狀態,任何一個節點出現問題,都會將失敗節點對應的虛擬IP自動實現切換到其他健康節點上,保持讀、寫服務的連續性和高可用性。

  2. mmm不僅能提供虛擬IP自動轉移功能,更重要的是,如果活動的master節點發生故障,會自動將後端的多個slave節點轉向備用的master節點繼續進行同步複製,整個過程完全不需要手動更改同步複製的配置,這是其他所有mysql高可用叢集方案都不具備的功能。

其實上邊我們把master1的mysql進程停掉也能達到vip會流動到master2上,這裡不再示範。

本文出自 “linux營運” 部落格,請務必保留此出處http://germanygu.blog.51cto.com/3574209/1637119

基於mmm實現mysql的高可用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.