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 主服务器只有一个