使用mysql-mmm實現高可用mysql讀寫分離

MMM介紹:

 MMM全稱為Multi-Master Replication Manager for MySQL,即為主主復制管理器;根據MMM官網介紹,其工作原理類似于lvs,都是利用vip地址;但lvs只有一個組件便可以正常工作,而MMM則使用三個組件,分別是mysql-mmm、mysql-mmm-agent、mysql-mmm-monitor;使用mysql-mmm組件定義真實mysql各節點主機物理IP與ips地址的對應關系,然后利用mysql-mmm-agent檢查mysql各節點主機的工作狀態,最后使用mysql-mmm-monitor實現故障切換,讀寫分離。

實驗環境:

node1: 172.16.2.12  mysql主節點DB1
node2: 172.16.2.13  mysql主節點DB2
node3: 172.16.2.14  mysql從節點DB3
node4: 172.16.2.15  監控節點

write ips:

 172.16.2.21

read ips:

 172.16.2.22

 172.16.2.23

 172.16.2.24 

實驗前提:

 DB1與DB2是雙主模型,DB1與DB3是主從模型;確保都能正常運行

一、安裝mmm

1、創建監控時使用的用戶賬號和密碼

MariaDB [(none)]>GRANT REPLICATION CLIENT  ON *.* TO 'monitor'@'172.16.2.%' IDENTIFIED BY 'monitor';  \\此賬戶用于監控各節點的
MariaDB [(none)]>GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'agent'@'172.16.2.%'   IDENTIFIED BY 'agent'; \\此賬號用于mysql-agent使用

1、在DB1;DB2;DB3上安裝mysql-mmm,mysql-mmm-agent

[root@node1 ~]# yum -y install mysql-mmm mysql-mmm-agent

2、編輯mysql-mmm的配置文件,修改內容如下

[root@node1 ~]# vim /etc/mysql-mmm/mmm_common.conf
active_master_role      writer  \\定義活動主節點的角色
<host default>   \\定義主機信息
    cluster_interface       eth0  \\定義監聽接口
    pid_path                /var/run/mysql-mmm/mmm_agentd.pid   \\定義pid文件存放位置
    bin_path                /usr/libexec/mysql-mmm/   \\mmm執行文件的路徑
    replication_user        test   \\此處填寫主從或主主模型使用的用戶
    replication_password    test   \\此處填寫主從或主主模型使用的用戶密碼
    agent_user              agent   \\此處填寫運行代理(agent)的用戶
    agent_password          agent   \\此處填寫運行代理(agent)的用戶密碼
</host>

<host db1>  \\定義主機類型
    ip      172.16.2.12   \\定義db1主機的地址
    mode    master   \\定義db1主機的角色
    peer    db2    \\定義對端主機名稱
</host>

<host db2>
    ip      172.16.2.13
    mode    master
    peer    db1
</host>

<host db3>
    ip      172.16.2.14
    mode    slave   \\定義db3為從節點
</host>

<role writer> \\定義寫節點包含哪些主機
    hosts   db1, db2  \\定義寫節點主機
    ips     172.16.2.21   \\定義寫節點的vip地址
    mode    exclusive   \\類型為exclusive
</role>

<role reader>  \\定義讀節點的主機
    hosts   db1, db2, db3  \\主機名稱
    ips     172.16.2.22, 172.16.2.23, 172.16.2.24 \\讀節點的vip地址
    mode    balanced \\類型為輪詢
</role>

3、復制此配置文件到各個節點,包含監控節點

[root@node1 ~]# scp /etc/mysql-mmm/mmm_common.conf node2:/etc/mysql-mmm/
[root@node1 ~]# scp /etc/mysql-mmm/mmm_common.conf node3:/etc/mysql-mmm/
[root@node1 ~]# scp /etc/mysql-mmm/mmm_common.conf node4:/etc/mysql-mmm/

4、編輯mysql-mmm-agent配置文件,修改內容如下:

[root@node1 ~]# vim /etc/mysql-mmm/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 db1 \\此處根據mysql-mmm的配置文件定義的主機名填寫,node1,node2,node3分別為db1,db2,db3

5、在監控主機安裝mysql-mmm-monitor

[root@node4 ~]# yum -y install mysql-mmm-monitor

5.1編輯mysql-mmm-monitor的配置文件

[root@node4 ~]# vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
<monitor>
    ip                  127.0.0.1  \\保持默認即可
    pid_path            /var/run/mysql-mmm/mmm_mond.pid  \\mysql-mmm-monitor的pid路徑
    bin_path            /usr/libexec/mysql-mmm   \\mysql-mmm-monitor運行程序路徑
    status_path         /var/lib/mysql-mmm/mmm_mond.status  \\監控狀態存放路徑
    ping_ips            172.16.2.1, 172.16.2.12, 172.16.2.13, 172.16.2.14 \\監控各個主機的狀態,172.16.2.1為主機的網關,這里也監控了網關
    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  \\調試,0為關閉,1為開啟

6、在各個DB節點啟動agent,在監控點啟動monitor

[root@node1 ~]# /etc/init.d/mysql-mmm-agent start
[root@node2 ~]# /etc/init.d/mysql-mmm-agent start
[root@node3 ~]# /etc/init.d/mysql-mmm-agent start
[root@node4 ~]# /etc/init.d/mysql-mmm-monitor start

7、在monitor節點運行mmm_control show命令查看

[root@node4 ~]# mmm_control show
  db1(172.16.2.12) master/ONLINE. Roles: reader(172.16.2.23), writer(172.16.2.21)
  db2(172.16.2.13) master/ONLINE. Roles: reader(172.16.2.24)
  db3(172.16.2.14) slave/ONLINE. Roles: reader(172.16.2.22)

8、查看各個DB接的ip地址:

[root@node1 ~]# ip addr list
 eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:0e:c4:29 brd ff:ff:ff:ff:ff:ff
    inet 172.16.2.12/24 brd 172.16.2.255 scope global eth0
    inet 172.16.2.23/32 scope global eth0
    inet 172.16.2.21/32 scope global eth0
    inet6 fe80::20c:29ff:fe0e:c429/64 scope link 
       valid_lft forever preferred_lft forever
[root@node2 ~]# ip addr list
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:f8:d4:88 brd ff:ff:ff:ff:ff:ff
    inet 172.16.2.13/16 brd 172.16.255.255 scope global eth0
    inet 172.16.2.24/32 scope global eth0
    inet6 fe80::20c:29ff:fef8:d488/64 scope link 
       valid_lft forever preferred_lft forever
[root@node3 ~]# ip addr list
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:5a:4f:48 brd ff:ff:ff:ff:ff:ff
    inet 172.16.2.14/24 brd 172.16.2.255 scope global eth0
    inet 172.16.2.22/32 scope global eth0
    inet6 fe80::20c:29ff:fe5a:4f48/64 scope link 
       valid_lft forever preferred_lft forever

9、模擬node1故障

[root@node4 ~]# mmm_control set_offline db1  \\使用monitor命令強制node1下線
OK: State of 'db1' changed to ADMIN_OFFLINE. Now you can wait some time and check all roles!
[root@node4 ~]# mmm_control show  \\再次查看各節點的狀態,db1顯示不在線,db2為讀寫角色,db3為讀角色
  db1(172.16.2.12) master/ADMIN_OFFLINE. Roles: 
  db2(172.16.2.13) master/ONLINE. Roles: reader(172.16.2.24), writer(172.16.2.21)
  db3(172.16.2.14) slave/ONLINE. Roles: reader(172.16.2.22), reader(172.16.2.23)

10、到此,mysql-mmm可以正常工作了,當一個主節點故障,此主節點的ips地址會轉移的另一個主節點上,實現故障切換,同時從節點也會切換主節點的ip,進行數據同步。

 此處只介紹了mmm的配置,如果大家在配置mysql雙主模型或主從模型時或配置mmm有問題時,大家可以一起研究。

相關連接:

http://mysql-mmm.org/mmm2:guide

原創文章,作者:馬行空,如若轉載,請注明出處:http://www.www58058.com/6726

(0)
馬行空馬行空
上一篇 2015-08-04
下一篇 2015-08-04

相關推薦

  • HTTPD-相關的配置

    一次完整的HTTP請求處理過程: 1、建立連接:接收或拒絕鏈接請求 2、接受請求:接收客戶端請求報文中對某資源的一次請求的過程 Web訪問響應模型(Web I/O) 單進程I/O模型:啟動一個進程處理用戶請求,而且一次只處理一個,多個請 求被串行響應; 多進程I/O模型:并行啟動多個進程,每個進程響應一個鏈接請求; 復用I/O結構:啟動一個進程,同時響應N個…

    2017-08-29
  • Ansible淺談

    ansible特性:         模塊化,調用特定的模塊,完成特定的任務;         基于Python語言實現,由Paramiko、PyYAML和Jinja2三個關鍵模塊;         部署簡單,agentless; &nbs…

    Linux干貨 2016-12-15
  • Linux 用戶, 組和權限

    用戶, 組和權限 Linux登陸需要用戶名、密碼。/etc/passwd 文件保存用戶名。登錄linux時,Linux 先查找 /etc/passwd 文件中是否有這個用戶名,沒有則跳出,有則讀取用戶名的user ID 、 group ID 、用戶名對應的根目錄路徑以及所使用的 shell ,最后在 /etc/shadow 中核對該 UI…

    2017-07-22
  • 軟鏈接和硬鏈接的區別

          什么是鏈接文件? 使用windows的朋友們應該會經常接觸到快捷方式吧!它也就是能讓我們快速的打開一個目標應用程序,文件,或者文件夾來使我們的操作更加快捷。那么下面我們就來簡單聊聊linux上的“鏈接文件”吧!            &n…

    Linux干貨 2016-10-19
  • 三大家族輕松管理CentOS 7網絡屬性配置

    一、簡單介紹        在CentOS 7中對網絡管理還是有不少變化的,例如管理服務的命令變為systemctl,許多命令可以更改后直接生效,還有許多獨有的工具,本文以CentOS 6與CentOS 7對比進行講解,下面現總體介紹一下網絡屬性配置工具。    &nb…

    Linux干貨 2016-04-25
  • 【26期】Linux第八周學習小總結

        前言     本周的學習已經過去了,雖然本周學習中老師一直都有說,哎呀,這個不重要,以后有網絡管理員給你們來做,了解一下就行,然而話鋒一轉就又說,其實小公司沒有網絡管理員,如果你們不好好學,以后就會做得更多更雜的工作,這一周的知識點基本上都是在一個pdf上的,大概有200…

    2017-09-02

評論列表(4條)

  • xiaozhiqi
    xiaozhiqi 2015-11-11 15:24

    哥,按照你的文檔做,我在安裝mysql-mmm mysql-agent的時候一直解決不了依賴關系啊,centos6.6 Rpm安裝mysql主主,主從已經配好,配置好了本地yum源和epel源Error Downloading Packages:
    rrdtool-perl-1.3.8-7.el6.x86_64: failure: Packages/rrdtool-perl-1.3.8-7.el6.x86_64.rpm from base: [Errno 256] No more mirrors to try.
    perl-MIME-Lite-3.027-2.el6.noarch: failure: Packages/perl-MIME-Lite-3.027-2.el6.noarch.rpm from base: [Errno 256] No more mirrors to try.
    perl-Algorithm-Diff-1.1902-9.el6.noarch: failure: Packages/perl-Algorithm-Diff-1.1902-9.el6.noarch.rpm from base: [Errno 256] No more mirrors to try.
    perl-Email-Date-Format-1.002-5.el6.noarch: failure: Packages/perl-Email-Date-Format-1.002-5.el6.noarch.rpm from base: [Errno 256] No more mirrors to try.
    perl-MIME-Types-1.28-2.el6.noarch: failure: Packages/perl-MIME-Types-1.28-2.el6.noarch.rpm from base: [Errno 256] No more mirrors to try.
    如果看到請聯系我

    • 馬行空
      馬行空 2015-11-12 18:31

      @xiaozhiqi如果你可以翻墻的,可以到這個網站上看看:http://mysql-mmm.org/mmm2:guide

    • xiaozhiqi
      xiaozhiqi 2015-11-12 20:28

      @馬行空謝謝?。∥以谠囋?/p>

    • 馬行空
      馬行空 2015-11-12 18:32

      @xiaozhiqi這上面都詳細介紹了所依賴的插件

欧美性久久久久