MMM方案不适用对数据一致性要求很高的业务
一、方案
使用5台RHEL 7虚拟机其中192.168.4.11、192.168.4.12作为MySQL双主服务器,
192.168.4.13、192.168.4.14作为主服务器的从服务器。
192.168.4.15作为管理节点服务器
1)准备环境 关闭防火墙和selinux,确保每台虚拟机能ping通

2)安装启动数据库(4台数据库主机 user1,user2,suser3,user4 执行以下操作)

    [root@user1 ~]# tar xvf mysql-5.7.17-1.el7.x86_64.rpm-bundle.tar

3)安装MySQL数据库
在bundle的整合包中,并不是所有的rpm包都会用到,将一些重复的删除。
安装mysql时可能会缺少某些依赖包,需提前单独安装
[root@user1 ~]#yum -y install perl-Data-Dumper perl-JSON perl-Time-HiRes
[root@user1 ~]# rpm -Uvh mysql-community-*.rpm
4)关于MySQL数据库的管理员账号root,安装时随机生成一个随机生成的密码字串可以从保存到mysql日志文件中找到:
[
[root@user1 /]# ls /var/lib/mysql 数据目录
[root@user1 /]# cat /var/log/mysqld.log 日志文件
[root@user1 /]# grep password /var/log/mysqld.log 查看初始密码
[root@user1 /]# mysql -hlocalhost -uroot -p'pIwkJA=9)(mysql> set global validate_password_policy=0; 修改root口令 只验证长度
mysql> set global validate_password_length=6; 修改默认长度为6
mysql> alter user root@"localhost" identified by "123456"; 设置密码
[root@user1 /]# mysql -hlocalhost -uroot -p123456 再次登入
想要密码永久生效 写入配置文件
[root@user1 /]#vim /etc/my.cnf
[mysqld]
validate_password_policy=0
validate_password_length=6
二、部署双主多从结构
user3 用户授权 启用binlog日志
user4用户授权 启用binlog日志,并允许级联复制



【配置user3 user4 为主主结构】
【user3】
[root@user3 /]#vim /etc/my.cnf 
mysqld]
server_id=13
log-bin=master13                    日志名
binlog_format="mixed"               格式
validate_password_policy=0
validate_password_length=6

root@user3 /]# mysql  -uroot -p123456   
mysql> grant replication slave on *.*
    -> to
    -> slaveuser@"%"
    -> identified by "123456";
        【指定从服务器】
mysql> change master to
> master_host="192.168.4.14",
> master_user="slaveuser",
> master_password="123456",
> master_log_file="master14.000001",
> master_log_pos=154;
> 
查看binlog使用信息> show master status\G;

【user4】
[root@user4 mysql]# vim /etc/my.cnf
[mysqld]
server_id=14
log-bin=master14                
binlog_format="mixed"           指定格式
validate_password_policy=0
validate_password_length=6
log_slave_updates               指定级联

root@user4 /]# mysql  -uroot -p123456   
mysql> grant replication slave on *.*
    -> to
    -> slaveuser@"%"
    -> identified by "123456";
                【指定从服务器】
mysql> change master to
mysql> master_host="192.168.4.13",
mysql> master_user="slaveuser",
mysql> master_password="123456",
mysql> master_log_file="master13.000001",
mysql> master_log_pos=154;

【配置 user1 user2 为user3的从服务器】
【user1】
[root@user1 mysql]# vim /etc/my.cnf
[mysqld]
server_id=11
log-bin=master11                
validate_password_policy=0
validate_password_length=6
【配置成为user13的从】
root@user1 /]# mysql  -uroot -p123456   
musql>change master to master_host="192.168.4.13",
>master_user="slaveuser",
>master_password="123456",
>master_log_file="master13.000001",
>master_log_pos=154;

【user2】
[root@user2 mysql]# vim /etc/my.cnf
[mysqld]
server_id=12
log-bin=master12                
validate_password_policy=0
validate_password_length=6
【配置成为user3的从】
root@user2 /]# mysql  -uroot -p123456   
musql>change master to master_host="192.168.4.13",
>master_user="slaveuser",
>master_password="123456",
>master_log_file="master13.000001",
>master_log_pos=154;

做完以上步骤:
开启服务
mysql> start slave;
查看SQL和IO是否是yes
mysql> start slave status\G;
现在就可以在user3上创建个库 然后在从服务器上查看是不是也有。
三、安装MYSQL-MMM   (5台均安装)
                注:软件包要去网上下载

[root@user1 ~]# yum -y install perl-Date-Manip 
    perl-Date-Manip     
    perl-Date-Manip
    perl-XML-DOM-XPath 
    perl-XML-Parser
    perl-XML-RegExp rrdtool 
    perl-Class-Singleton
    perl perl-DBD-MySQL
    perl-Params-Validate 
    perl-MailTools
    perl-Time-HiRes
    ~~~~~~~~~~
[root@user1 ~]#unzip mysql-mmm.zip
[root@user1 ~]# tar -zxvf mysql-mmm/mysql-mmm-2.2.1.tar.gz 
[root@user1 ~]# tar -zxvf Algorithm-Diff-1.1902.tar.gz  //解压安装包
[root@user1 ~]# cd Algorithm-Diff-1.1902                //切换到安装目录
[root@user1 Algorithm-Diff-1.1902]# perl  Makefile.PL    //生成makefile文件 [root@user1 Algorithm-Diff-1.1902]# make && make install        //编译,编译安装
[root@user1 Algorithm-Diff-1.1902]# cd ..                //切换到软件包目录
    ~~~~~~~~~
[root@user1 ~]# tar -zxvf Proc-Daemon-0.03.tar.gz    //解压安装包
[root@user1 ~]# cd Proc-Daemon-0.03                    //切换到安装目录
[root@user1 Proc-Daemon-0.03]# perl    Makefile.PL    //生成makefile文件
[root@user1 Proc-Daemon-0.03]# make && make install    //编译,编译安装
[root@user1 Proc-Daemon-0.03]# cd  ..                  //切换到软件包目录
~~~~~~~~~

[root@user1 ~]#yum -y install gcc gcc-c++
[root@user1 ~]# gunzip Net-ARP-1.0.8.tgz    //使用gunzip解压tgz格式的安装包
[root@user1 ~]# tar xvf Net-ARP-1.0.8.tar            //解压tar安装包
[root@user1 ~]# cd Net-ARP-1.0.8                    //切换到安装目录
[root@user1 Net-ARP-1.0.8]# perl Makefile.PL        //生成makefile文件
[root@user1 Net-ARP-1.0.8]# make && make install    //编译,编译安装
[root@user1 Proc-Daemon-0.03]# cd  .. 

[root@user1 ~]# tar -zxvf mysql-mmm/mysql-mmm-2.2.1.tar.gz 
[root@user1 ~]# cd mysql-mmm-2.2.1/
[root@user1 ~]#make install
注:user5不用装Net-ARP-1.0.8.tar 
~~~~~~~~~~~~~~~~~~~~~~
四、 修改配置文件
1、修改数据节点代理服务器配置文件   
[root@user1 ~]#vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db11   (修改五台虚拟机的配置文件,db后面跟上ip号 方便记住)
2、修改公共文件
[root@user1 ~]# vim /etc/mysql-mmm/mmm_common.conf
 10     replication_user        slaveuser   #设置主从同步的用户
 11     replication_password    123456  #设置主从同步用户密码
 12 
 13         agent_user              agent       #控制数据库用户
 14         agent_password          123456   #t控制数据库用户密码

 17      #设置第一个主服务器
 18         ip              192.168.4.14
 19         mode            master
 20         peer            db13 #指定另外一台主服务器
 21 
 22 
 23   #设置第二台主服务器
 24         ip              192.168.4.13
 25         mode            master
 26         peer            db14
 27 
 28 
 29     #设置从服务器
 30         ip              192.168.4.12
 31         mode            slave
 32 
 34                      默认没有  可以把上面的复制下来
 35         ip              192.168.4.11
 36         mode            slave
 37 
 39                    
 40         hosts           db13, db14
 41         ips             192.168.4.100       不能重复
 42         mode            exclusive
 43 
 44 
 45                    
 46         hosts           db11, db12
 47         ips             192.168.4.101, 192.168.4.102
 48         mode            balanced

!!每台配置都相同 可以使用scp 到其他主机对应的配置文件里
3、修改管理主机配置文件(suer5)
[root@user5 ~]# vim /etc/mysql-mmm/mmm_mon.conf 
  4         ip              192.168.4.15        本机IP
  8         ping_ips                                192.168.4.11, 192.168.4.12, 192.168.4.13, 192.168.4.14      监控的ip地址
  9 
 10 
 11 
 12         monitor_user                    monitor         名字
 13         monitor_password                123456          密码
 14 

  根据配置文件的配置 在数据节点主机上添加对应的授权用户
    【user5】
 musql>grant replication client on *.* to monitor@"%" identified by "123456";

musql>grant replication client,process,super on *.* to agent@"%" identified by "123456";

4、启动服务
[user1-4]
[root@user1 ~]# /etc/init.d/mysql-mmm-agent start
[root@user1 ~]# netstat -pantu | grep 9989
tcp        0      0 192.168.4.11:9989        0.0.0.0:*     
[user5]
[root@user5~]# /etc/init.d/mysql-mmm-monitor start
[root@user5 ~]# netstat -pantu | grep 9988
tcp        0      0 192.168.4.15:9988        0.0.0.0:*         
~~~~~~~~~~~
五、查看状态
[root@user5 ~]#mmm_control show

perl/Config.pm line 863.
    (Maybe you should just omit the defined()?)
  db11(192.168.4.11) slave/AWAITING_RECOVERY. Roles: 
  db12(192.168.4.12) slave/AWAITING_RECOVERY. Roles: 
  db13(192.168.4.13) master/AWAITING_RECOVERY. Roles: 
  db14(192.168.4.14) master/AWAITING_RECOVERY. Roles: 

开起服务
[root@user5 ~]# mmm_control set_online db14

4perl/Config.pm line 863.
    (Maybe you should just omit the defined()?)
  db11(192.168.4.11) slave/AWAITING_RECOVERY. Roles: 
  db12(192.168.4.12) slave/AWAITING_RECOVERY. Roles: 
  db13(192.168.4.13) master/AWAITING_RECOVERY. Roles: 
  db14(192.168.4.14) master/ONLINE. Roles: writer(192.168.4.100)
    在数据节点本机查看是否获取到vip地址
[root@user4 ~]#ip addr show | grep 192.168.4.100
[user1-4]查看虚拟ip  主服务器只有一个