您的位置:首页 > 数据库 > MySQL

mysql-mmm实现读写分离

2016-09-14 10:11 267 查看
环境lnmp架构。web服务器上lnmp+memcached.192.168.4.1
1.增加4台mysql数据库双主双从
其中192.168.4.10、192.168.4.11作为MySQL双主服务器192.168.4.12、192.168.4.13作为主服务器的从服务器。

192.168.4.10     master1
192.168.4.11     master2
192.168.4.12     slave1
192.168.4.13     slave2

每台步骤都设置如下
1.[root@master1 ~]# vim /etc/hosts
192.168.4.10     master1
192.168.4.11     master2
192.168.4.12     slave1
192.168.4.13     slave2

2.初始化配置数据库
1)把LNMP上的mysql库导出,密码假如是123456。
[root@lnmp ~]#mysqladmin -uroot -p123456 --all-databases >all.sql
[root@lnmp ~]#for i in 10 11 12 13 ;do scp all.sql root@192.168.4.$i:/root ;done
2)删除库并导入all.sql
[root@master1 ~]#mysql -uroot -p123456
mysql>drop database all;    #删除所有库。
[root@master1 ~]#mysql -uroot -p123456  grant
replication  slave  on  *.*  to  slaveuser@"192.168.4.%" identified
by  "123456";           //主从同步授权只需要在一台设备上操作即可
Query OK, 0 rows affected (0.00 sec)

2)修改所有my.cnf
[root@master1 ~]# cat /etc/my.cnf
server_id=10
log-bin

[root@master2 ~]# cat /etc/my.cnf
server_id=11
log-bin

[root@slave1 ~]# cat /etc/my.cnf
server_id=12
log-bin

[root@slave2 ~]# cat /etc/my.cnf
server_id=13
log-bin
[root@master1 ~]mysql> show master status\G;
*************************** 1. row ***************************
File: master1-bin.000001
Position: 120
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
/etc/init.d/mysqld restart
3)在mater2上 此步骤slave1,和slave2上和这里一模一样
[root@master2 ~]# mysql -uroot -p123456
mysql> change  master  to                         //设置主服务器信息
-> master_host="192.168.4.10",                //设置主服务器IP地址
-> master_user="slaveuser",                //设置主从同步用户
-> master_password="123456",                //设置主从同步密码
-> master_log_file="master1-bin.000001",    //设置主库binlog日志名称
-> master_log_pos=120;                        //设置主从binlog日志使用节点
Query OK, 0 rows affected, 2 warnings (0.06 sec)
mysql> start slave;                            //启动同步进程
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G                        //查看主从是否成功
Slave_IO_Running: Yes                //IO节点正常
Slave_SQL_Running: Yes                //SQL节点正常

4设置master2的从
[root@master2 ~]#mysql -uroot -p123456
mysql> show master status\G;
*************************** 1. row ***************************
File: master2-bin.000001
Position: 120
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
5在mster1上
[root@master1 ~]# mysql -uroot -p123456
mysql> change  master  to                         //设置主服务器信息
-> master_host="192.168.4.11",                //设置主服务器IP地址
-> master_user="slaveuser",                //设置主从同步用户
-> master_password="123456",                //设置主从同步密码
-> master_log_file="master2-bin.000001",    //设置主库binlog日志名称
-> master_log_pos=120;                        //设置主从binlog日志使用节点
Query OK, 0 rows affected, 2 warnings (0.06 sec)
mysql> start slave;                            //启动同步进程
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G                        //查看主从是否成功
Slave_IO_Running: Yes                //IO节点正常
Slave_SQL_Running: Yes                //SQL节点正常

6双主双从完成测试,查看测试结果
[root@master1 ~]# mysql -uroot -p123456
mysql>create database thistest;

4.上面还只是环境下面才是正题。

部署mysql-mmm
前面环境192.168.4.10、192.168.4.11作为MySQL双主服务器192.168.4.12、192.168.4.13作为主服务器的
从服务器现添加一台192.168.4.100作为MySQL-MMM架构中管理监控服务器实现监控MySQL主从服务器的工作状态及决定故障节点的移除或恢复
工作所以添加192.168.4.100   monitor到hosts里

1.mysql-mmm依赖安装mysql-mmm是perl写的所以安装perl相关库文件
[root@master1 ~]# yum -y install gcc* perl*
这里苦逼5台机器上都要这样。依赖各种烦
提供下面安装包的地址https://pan.baidu.com/s/1qYGQBwS
安装Net-ARP等依赖可能装了没有就要装上这几个Net-ARP,Proc-Daemon,Algorithm-Diff,Log-Log4perl
安装安装Log-Log4perl 类
[root@mysql-master1 ~]# rpm -ivh perl-Log-Log4perl-1.26-1.el6.rf.noarch.rpm
warning: perl-Log-Log4perl-1.26-1.el6.rf.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY
Preparing...                ######################### [100%]
1:perl-Log-Log4perl        ########################  [100%]
安装Algorithm-Diff类
[root@mysql-master1 ~]# tar -zxvf Algorithm-Diff-1.1902.tar.gz  //解压安装包
[root@mysql-master1 ~]# cd Algorithm-Diff-1.1902                //切换到安装目录
[root@mysql-master1 Algorithm-Diff-1.1902]# perl  Makefile.PL    //生成makefile文件
Checking if your kit is complete...
Looks good
Writing Makefile for Algorithm::Diff
[root@mysql-master1 Algorithm-Diff-1.1902]# cd                //切换到软件包目录
[root@mysql-master1 ~]#
安装Proc-Daemon类
[root@mysql-master1 ~]# tar -zxvf Proc-Daemon-0.03.tar.gz    //解压安装包
[root@mysql-master1 ~]# cd Proc-Daemon-0.03                    //切换到安装目录
[root@mysql-master1 Proc-Daemon-0.03]# perl    Makefile.PL    //生成makefile文件
Checking if your kit is complete...
Looks good
Writing Makefile for Proc::Daemon
[root@mysql-master1 Proc-Daemon-0.03]# make && make install    //编译编译安装
[root@mysql-master1 Proc-Daemon-0.03]# cd                    //切换到软件包目录
[root@mysql-master1 ~]#
安装Net-ARP虚拟IP分配工具
[root@mysql-master1 ~]# gunzip Net-ARP-1.0.8.tgz    //使用gunzip解压tgz格式的安装包
[root@mysql-master1 ~]# tar xvf Net-ARP-1.0.8.tar            //解压tar安装包
[root@mysql-master1 ~]# cd Net-ARP-1.0.8                    //切换到安装目录
[root@mysql-master1 Net-ARP-1.0.8]# perl Makefile.PL        //生成makefile文件
Module Net::Pcap is required for make test!
Checking if your kit is complete...
Looks good
Writing Makefile for Net::ARP
[root@mysql-master1 Net-ARP-1.0.8]# make && make install    //编译编译安装
[root@mysql-master1 Net-ARP-1.0.8]# cd                        //切换到软件包目录
[root@mysql-master1 ~]#

安装Mysql-MMM软件包
[root@mysql-master1 ~]# tar xvf mysql-mmm-2.2.1.tar.gz        //解压安装包
[root@mysql-master1 ~]# cd mysql-mmm-2.2.1       //切换到安装目录
[root@mysql-master1 mysql-mmm-2.2.1]# make && make install    //编译编译安装

修改公共配置文件

MySQL集群的5台服务器master1、master2、slave1、slave2、monitor都需要配置可以先配好一台后使用scp复制。

[root@master1 ~]# vim  /etc/mysql-mmm/mmm_common.conf
active_master_role    writer

cluster_interface        eth0                //设置主从同步的网卡
pid_path                /var/run/mmm_agentd.pid
bin_path                /usr/lib/mysql-mmm/
replication_user        slaveuser            //设置主从同步的用户
replication_password    123456            //设置主从同步用户密码
agent_user            agent                //mmm-agent控制数据库用户
agent_password        123456                //mmm-agent控制数据库用户密码
//设置第一个主服务器
ip                    192.168.4.10            //master1 IP 地址
mode                    master
peer                    master2                //指定另外一台主服务器
//指定另外一台主服务器
ip                    192.168.4.11
mode                    master
peer                    master1
//设置第一台从服务器
ip                    192.168.4.12            //slave1 IP 地址
mode                    slave                //本段落配置的是slave服务器

ip                    192.168.4.13
mode                    slave
//设置写入服务器工作模式
hosts                master1,master2        //提供写的主服务器
ips                    192.168.4.200        //设置VIP地址
mode                    exclusive            //排他模式
//设置读取服务器工作模式
hosts                slave1,slave2        //提供读的服务器信息
ips                    192.168.4.201,192.168.4.202    //多个虚拟IP
mode                    balanced                        //均衡模式

[root@master1 ~]#

修改管理主机配置文件monitor主机配置

[root@monitor ~]# vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf

ip                        192.168.4.100        //设置管理主机IP地址
pid_path                /var/run/mmm_mond.pid
bin_path                /usr/lib/mysql-mmm/
status_path                /var/lib/misc/mmm_mond.status
ping_ips                192.168.4.10,192.168.4.11,192.168.4.12,192.168.4.13
//设置被监控数据库

monitor_user            monitor                    //监控数据库MySQL用户
monitor_password        123456                    //监控数据库MySQL用户密码

debug 0
[root@monitor ~]#
关键地方
授权agent和monitor。
不然啥都别搭。做了主从了随便哪台机器
mysql> grant  replication  client  on *.*  to  monitor@"%" identified by "123456";           //MMM所需架构用户授权
Query OK, 0 rows affected (0.06 sec)
mysql> grant  replication client,process,super   on *.*  to  agent@"%" identified by "123456";      //MMM所需架构用户授权
Query OK, 0 rows affected (0.00 sec)
mysql> grant  all  on *.*  to  root@"%" identified by "123456";  //测试用户授权给自己一个客户机开个后门测试用。
Query OK, 0 rows affected (0.00 sec)

修改客户端配置文件
master1配置
[root@master1 ~]# cat /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this master1

master2配置

[root@master2 ~]# cat /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this master2

slave1配置
[root@slave1 ~]# cat /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this slave1

slave2配置
[root@slave2 ~]# cat /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this slave2

这里配置到此结束

MySQL-MMM架构使用

1启动mmm-agent进程 master1,master2,slave1,slave2启动
在这里还是提醒一下前面依赖没装会启动失败的运气好的起来了也是有各种问题的起不了可以 查看log日志,大概在这里吧
/var/log/mysql-mmm/***.log还有就是改vim
/etc/mysql-mmm/mmm_mon.conf  最后一行改称debug 1重起mysql-monitor 会有不错的排错效果。
master1操作
[root@master1 ~]# /etc/init.d/mysql-mmm-agent start
Daemon bin: '/usr/sbin/mmm_agentd'Daemon
pid: '/var/run/mmm_agentd.pid'
Starting MMM Agent daemon... Ok

2启动mmm-monitor进程
monitor主机操作
[root@monitor ~]# /etc/init.d/mysql-mmm-monitor start
Daemon bin: '/usr/sbin/mmm_mond'
Daemon pid: '/var/run/mmm_mond.pid'
Starting MMM Monitor daemon: Ok

设置集群中服务器为online状态
[root@monitor ~]# mmm_control show
master1(192.168.4.10) master/AWAITING_RECOVERY. Roles:
master2(192.168.4.11) master/AWAITING_RECOVERY. Roles:
slave1(192.168.4.12) slave/AWAITING_RECOVERY. Roles:
slave2(192.168.4.13) slave/AWAITING_RECOVERY. Roles:

[root@monitor ~]# mmm_control set_online master1
OK: State of 'master1' changed to ONLINE. Now you can wait some time and check its new roles!
[root@monitor ~]# mmm_control set_online master2
OK: State of 'master2' changed to ONLINE. Now you can wait some time and check its new roles!
[root@monitor ~]# mmm_control set_online slave1
OK: State of 'slave1' changed to ONLINE. Now you can wait some time and check its new roles!
[root@monitor ~]# mmm_control set_online slave2
OK: State of 'slave2' changed to ONLINE. Now you can wait some time and check its new roles!

[root@monitor ~]# mmm_control show
master1(192.168.4.10) master/ONLINE. Roles: writer(192.168.4.200)     #测试关闭master1是否自动切到master2上并且主从也跟着变了
master2(192.168.4.11) master/ONLINE. Roles:
slave1(192.168.4.12) slave/ONLINE. Roles: reader(192.168.4.201)
slave2(192.168.4.13) slave/ONLINE. Roles: reader(192.168.4.202)

查看vip
[root@master1 ~]#ip add show
[root@slave1 ~]#ip add show
[root@slave2 ~]#ip add show

[root@client ~]# mysql -h192.168.4.200 -uroot -p123456 -e "show databases"    //访问虚拟IP测试
原创亲测
出现问题,解决方案:
虽然mmm_control show 能看到writer(192.168.4.200)的ip,但是在master1上,ip add show 看不到

现象:vim /var/log/mysql-mmm/mmm_agentd.log
08:30:37 FATAL Couldn't allow writes: ERROR: Can't connect to MySQL (host = 192.168.4.10:3306, user = agent)! Access denied for user 'agent'@'master1' (using password: YES)

mysql> select user,host,password from mysql.user;
+-----------+-------------+-------------------------------------------+
| user      | host        | password                                  |
+-----------+-------------+-------------------------------------------+
| root      | localhost   | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root      | master1     |                                           |
| root      | 127.0.0.1   |                                           |
| root      | ::1         |                                           |
|           | localhost   |                                           |
|           | master1     |                                           |
| slaveuser | 192.168.4.% | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| monitor   | %           | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| agent     | %           | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root      | %           | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+-------------+-------------------------------------------+
10 rows in set (0.00 sec)

mysql> delete from mysql.user where user="";
Query OK, 2 rows affected (0.00 sec)
[root@master1 ~]/etc/init.d/mysqld restart
[root@master1 ~]ip add show

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 54:52:04:04:01:01 brd ff:ff:ff:ff:ff:ff
inet 192.168.4.10/24 brd 192.168.4.255 scope global eth0
inet 192.168.4.200/32 scope global eth0
inet6 fe80::5652:4ff:fe04:101/64 scope link
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 实现 mmm