<commit_before>---
layout:     post
title:      "MySQL MMM高可用架构的介绍与搭建"
subtitle:   "Introduction And Install of MySQL MMM High Availability Architecture"
date:       2017-06-16 00:47:03
author:     "Boomballa"
header-img: "img/home-bg.jpg"
catalog:    true
tags:
    - MySQL
    - High Availability
    - Perl
---

## 开场白
好久不见，最近又不知不觉的忙碌了起来，许多新项目的数据库已经投入使用了一段时间，需要整理，各种数据归档，更改数据流存储不合理的地方。接下来两篇文章来介绍下[MySQL](https://www.mysql.com/)的两种高可用方案，此篇文章来介绍我目前环境中运用最多的[MMM](http://mysql-mmm.org/doku.php)架构。

## MMM高可用架构介绍及配置使用
MMM（Master-Master Replication Manager for MySQL）是一组灵活的脚本，用于执行MySQL Master-Master复制配置的监视/故障转移和管理（只有一个节点可以随时写入）。 该工具集还能够通过标准主/从架构配置任意数量的从库，达到读库负载平衡，因此您可以通过移动虚拟IP地址，来决定它们是否在复制集群中。 除此之外，它还具有数据备份，节点之间的重新同步等脚本。

MMM官网地址：[传送门](http://mysql-mmm.org/doku.php)    
MMM使用手册地址：[传送门](http://mysql-mmm.org/mysql-mmm.html)

<img src="/img/in-post/mysql_ha_mmm/mysql-logo.jpg" height="213" width="510">

## MMM高可用架构搭建

#### **搭建环境介绍**

| IP地址 | 节点角色 | 节点端口 |
| :-------------: |:-------------:| :--------: |
| 10.10.13.20 | master-1 | 3306 |
| 10.10.13.22 | master-2 | 3306 |
| 10.10.13.23 | monitor-slave | 3306 |
	
我这边直接就把`monitor`搭建在`slave`上了，在正式线上环境中，大家可以把`monitor`单独搭建在一台机器上。搭建主从我就不在文章中演示了，相信大家都可以信手拈来了。这里只需要注意一点，搭建主主环境的时候，在`master2`上执行`show master status\G`，随便找一个点change过去即可。

#### MMM monitor与agent的安装

首先安装一下`epel`的yum源，在`monitor-slave`上安装`monitor`和`agent`，在`master1`和`master2`上安装`agent`。

1.`monitor-slave`的安装
```shell
rpm -ivh http://mirror01.idc.hinet.net/EPEL/6/x86_64/epel-release-6-8.noarch.rpm
yum install mysql-mmm-monitor mysql-mmm-agent -y
```

2.`master1`/`master2`的安装
```shell
rpm -ivh http://mirror01.idc.hinet.net/EPEL/6/x86_64/epel-release-6-8.noarch.rpm
yum install mysql-mmm-agent -y
```
#### MMM 集群中各个机器上进行赋权
<commit_msg>Update post comment<commit_after>---
layout:     post
title:      "MySQL MMM高可用架构的介绍与搭建"
subtitle:   "Introduction And Install of MySQL MMM High Availability Architecture"
date:       2017-06-16 00:47:03
author:     "Boomballa"
header-img: "img/home-bg.jpg"
catalog:    true
tags:
    - MySQL
    - High Availability
    - Perl
---

## 开场白
好久不见，最近又不知不觉的忙碌了起来，许多新项目的数据库已经投入使用了一段时间，需要整理，各种数据归档，更改数据流存储不合理的地方。接下来两篇文章来介绍下[MySQL](https://www.mysql.com/)的两种高可用方案，此篇文章来介绍我目前环境中运用最多的[MMM](http://mysql-mmm.org/doku.php)架构。

## MMM高可用架构介绍及配置使用
MMM（Master-Master Replication Manager for MySQL）是一组灵活的脚本，用于执行MySQL Master-Master复制配置的监视/故障转移和管理（只有一个节点可以随时写入）。 该工具集还能够通过标准主/从架构配置任意数量的从库，达到读库负载平衡，因此您可以通过移动虚拟IP地址，来决定它们是否在复制集群中。 除此之外，它还具有数据备份，节点之间的重新同步等脚本。

MMM官网地址：[传送门](http://mysql-mmm.org/doku.php)    
MMM使用手册地址：[传送门](http://mysql-mmm.org/mysql-mmm.html)

<img src="/img/in-post/mysql_ha_mmm/mysql-logo.jpg" height="213" width="510">

## MMM高可用架构搭建

#### **搭建环境介绍**

| IP地址 | 节点角色 | 节点端口 |
| :-------------: |:-------------:| :--------: |
| 10.10.13.20 | master-1 | 3306 |
| 10.10.13.22 | master-2 | 3306 |
| 10.10.13.23 | monitor-slave | 3306 |
	
我这边直接就把`monitor`搭建在`slave`上了，在正式线上环境中，大家可以把`monitor`单独搭建在一台机器上。搭建主从我就不在文章中演示了，相信大家都可以信手拈来了。这里只需要注意一点，搭建主主环境的时候，在`master2`上执行`show master status\G`，随便找一个点change过去即可。

#### MMM monitor与agent的安装

首先安装一下`epel`的yum源，在`monitor-slave`上安装`monitor`和`agent`，在`master1`和`master2`上安装`agent`。

CentOS6

1.`monitor-slave`的安装
```shell
rpm -ivh http://mirror01.idc.hinet.net/EPEL/6/x86_64/epel-release-6-8.noarch.rpm
yum install mysql-mmm-monitor mysql-mmm-agent -y
```

2.`master1`/`master2`的安装
```shell
rpm -ivh http://mirror01.idc.hinet.net/EPEL/6/x86_64/epel-release-6-8.noarch.rpm
yum install mysql-mmm-agent -y
```

CentOS7

1.`monitor-slave`的安装
```shell
rpm -ivh http://mirror01.idc.hinet.net/EPEL/7/x86_64/e/epel-release-7-10.noarch.rpm
yum install mysql-mmm-monitor mysql-mmm-agent -y
```

2.`master1`/`master2`的安装
```shell
rpm -ivh http://mirror01.idc.hinet.net/EPEL/7/x86_64/e/epel-release-7-10.noarch.rpm
yum install mysql-mmm-agent -y
```    
#### MMM 集群中各个机器上进行赋权

{'fraction_non_alphanumeric': 0.18252730109204368, 'fraction_numerical': 0.0499219968798752, 'mean_word_length': 4.449008498583569, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 6, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3733150', 'n_tokens_mistral': 2320, 'n_tokens_neox': 2441, 'n_words': 199}