Mysql-mmm配置全自动切换主从关系和读写分离
mysql-mmm的作用很简单就是读和写以ip的形式分离出来,并且可以全自动对mysql主从配置进行故障切换。
整个架构如下图:
操作系统全部为centos5.5 32bit
mysql版本为mysql-5.1.59
mysql-mmm版本为mysql-mmm-2.2.1
另外还需要4个虚拟IP,作用为:
192.168.93.141 数据库写入ip
192.168.93.142 数据库读取ip
192.168.93.143 数据库读取ip
192.168.93.144 数据库读取ip
一、安装mysql
useradd mysql |
vi /etc/my.cnf
[client] port = 3306 socket = /tmp/mysql.sock [mysqld] skip-external-locking log-bin=mysql-bin character-set-server=utf8 [mysqldump] [isamchk] [myisamchk] [mysqlhotcopy] [mysqld_safe] |
保存退出!
继续安装Mysql
/usr/local/mysql/bin/mysql_install_db --user=mysql chown -R mysql:mysql /home/var /usr/local/mysql/bin/mysqld_safe --user=mysql & cp ./support-files/mysql.server /etc/rc.d/init.d/mysql chmod +x /etc/rc.d/init.d/mysql chkconfig --add mysql |
vi ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin/ |
追加蓝色部分,然后保存退出
使配置立即生效
source ~/.bash_profile |
二、配置主从关系
DB1:编辑/etc/my.cnf,加入以下内容:
server-id=1 log-bin=mysql-bin binlog_format=ROW log-slave-updates sync_binlog=1 auto_increment_increment=2 auto_increment_offset=1 skip_slave_start |
DB2:编辑/etc/my.cnf,加入以下内容:
server-id=2 log-bin=mysql-bin binlog_format=ROW log-slave-updates sync_binlog=1 auto_increment_increment=2 auto_increment_offset=2 |
DB3:编辑/etc/my.cnf,加入以下内容:
server-id=3 log-bin=mysql-bin log-slave-updates |
然后重启mysql服务!
接下创建一个同步用的帐号并授权:
DB1授权:
mysql -uroot -p123456 -e "GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.93.138' IDENTIFIED BY 'slave'; " mysql -uroot -p123456 -e "GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.93.139' IDENTIFIED BY 'slave'; " |
DB2授权:
mysql -uroot -p123456 -e "GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.93.137' IDENTIFIED BY 'slave'; " mysql -uroot -p123456 -e "GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.93.139' IDENTIFIED BY 'slave'; " |
DB3的话以谁为主都无所谓,当主出现故障的时候,mmm会自动切换主的,我这里就以DB2为主,配置方从的步骤:锁表——(主)导出数据——(主)查看指针位置——(主)解锁——(从)导入数据——(从)导入主服务器的指针位置——(双方)开启主从线程
DB2:(PS我这里是新的数据库,所以省了导出数据这一步!)
mysql> flush tables with read lock; |
得出指针位置之后在DB1和DB3上操作:
mysql> change master to mysql> slave start; mysql> show slave status\G; |
看见蓝色那两行已经yes了,表示配置成功,刚才一口气把DB2配成DB1和DB3的主,现在要把DB1配成DB2的主,实现DB1和DB2互为主从关系
查看DB1的指针位置:
mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000005 | 586 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) |
然后在DB2上导入指针位置:
mysql> change master to mysql> slave start; mysql> show slave status\G; |
现在三台DB的主从关系都配置好了,可以测试一下:
在DB1的test库建个表,在DB2插入一条数据,在DB3查看
DB1:
mysql> create table test.t (id int(11) not null auto_increment,name varchar(30),primary key (id)); Query OK, 0 rows affected (0.03 sec) |
DB2:
mysql> use test mysql> insert into t(name) values ('mysql-mmm'); |
DB3:
mysql> use test Database changed mysql> select * from t; +----+-----------+ | id | name | +----+-----------+ | 2 | mysql-mmm | +----+-----------+ 1 row in set (0.00 sec) |
DB1:
mysql> select * from test.t; +----+-----------+ | id | name | +----+-----------+ | 2 | mysql-mmm | +----+-----------+ 1 row in set (0.00 sec) |
OK!三台DB的主从配置正常工作
三、安装mysql-mmm
安装Mysql-mmm之前,需要先安装一些perl模块,安装方法用perl -MCPAN -e shell 直接在线安装,第一次使用perl -MCPAN -e shell 命令时会有一大堆选项的,我直接enter过去,比较关键的是选择地区、国家和源这三个,按的时候注意选择一下就没问题,DB1、DB2和DB3需要安装以下模块:
# perl -MCPAN -e shell cpan> install Algorithm::Diff cpan> install DBI cpan>install Log::Dispatch cpan> install Log::Log4perl cpan> install Mail::Send cpan> install Net::ARP cpan> install Proc::Daemon cpan> install Time::HiRes cpan>install DBD::mysql cpan>install File::stat cpan>install File:basename |
server4需要安装以下:
# perl -MCPAN -e shell cpan> install Algorithm::Diff cpan> install Class::Singleton cpan> install Log::Dispatch cpan> install Log::Log4perl cpan> install Mail::Send cpan> install Proc::Daemon cpan> install Thread::Queue cpan> install Time::HiRes cpan> install DBI cpan>install DBD::mysql |
安装mysql-mmm,四台机器都要安装:
tar zxvf mysql-mmm-2.2.1.tar.gz cd mysql-mmm-2.2.1 make instal |
mysql-mmm文件位置及作用如下:
/usr/lib/perl5/vendor_perl/5.8.8/MMM MMM 使用的 perl 模块 /usr/lib/mysql-mmm MMM 的脚本揑件 /usr/sbin MMM 的命令保存路径 /var/log/mysql-mmm MMM 的日志保存路径 /etc MMM 配置文件保存的路径 /etc/mysql-mmm MMM 配置文件保存的路径,优先级最高 /etc/init.d/ agentd 和 monitor 的启劢关闭脚本 |
数据库授权一个Mysql-mmm专用用户(DB1、DB2和DB3都要授权):
mysql -uroot -p123456 -e "grant super,replication client,process on *.* to 'mmm_agent'@'192.168.93.137' identified by 'mmm_agent';" mysql -uroot -p123456 -e "grant super,replication client,process on *.* to 'mmm_agent'@'192.168.93.138' identified by 'mmm_agent';" mysql -uroot -p123456 -e "grant super,replication client,process on *.* to 'mmm_agent'@'192.168.93.139' identified by 'mmm_agent';" mysql -uroot -p123456 -e "grant super,replication client,process on *.* to 'mmm_agent'@'192.168.93.140' identified by 'mmm_agent';" |
修改mysql-mmm配置文件:
DB1:
/etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf this db1 |
蓝色的部分DB2和DB3则分别修改为db2和db3
/etc/mysql-mmm/mmm_common.conf
active_master_role writer <host default> pid_path /var/run/mmm_agentd.pid replication_user slave agent_user mmm_agent <host db1> <host db2> <host db3> <role writer> <role reader> |
将这份配置复制至其它三台机器,包括server4,然后启动DB1\、DB2和DB3可以启动mysql-mmm-agant::
[root@localhost mysql-mmm-2.2.1]# /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 |
最后配置server4的mysql-mmm-monitor
/etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf <monitor> <host default> debug 0 |
启动mysql-mmm-monitor:
[root@localhost mysql-mmm-2.2.1]# /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 [root@localhost mysql-mmm-2.2.1]# mmm_control show db1(192.168.93.137) master/AWAITING_RECOVERY. Roles: db2(192.168.93.138) master/AWAITING_RECOVERY. Roles: db3(192.168.93.139) slave/AWAITING_RECOVERY. Roles: |
将所有DB服务器设为online状态:
[root@localhost mysql-mmm-2.2.1]# mmm_control set_online db1 OK: State of 'db1' changed to ONLINE. Now you can wait some time and check its new roles! [root@localhost mysql-mmm-2.2.1]# mmm_control set_online db2 OK: State of 'db2' changed to ONLINE. Now you can wait some time and check its new roles! [root@localhost mysql-mmm-2.2.1]# mmm_control set_online db3 OK: State of 'db3' changed to ONLINE. Now you can wait some time and check its new roles! [root@localhost mysql-mmm-2.2.1]# mmm_control show db1(192.168.93.137) master/ONLINE. Roles: reader(192.168.93.143), writer(192.168.93.141) db2(192.168.93.138) master/ONLINE. Roles: reader(192.168.93.142) db3(192.168.93.139) slave/ONLINE. Roles: reader(192.168.93.144) |
设置成功,下面查看节点状态:
[root@localhost mysql-mmm-2.2.1]# mmm_control checks all db2 ping [last change: 2011/10/07 03:10:39] OK db2 mysql [last change: 2011/10/07 03:10:39] OK db2 rep_threads [last change: 2011/10/07 03:10:39] OK db2 rep_backlog [last change: 2011/10/07 03:10:39] OK: Backlog is null db3 ping [last change: 2011/10/07 03:10:39] OK db3 mysql [last change: 2011/10/07 03:10:39] OK db3 rep_threads [last change: 2011/10/07 03:10:39] OK db3 rep_backlog [last change: 2011/10/07 03:10:39] OK: Backlog is null db1 ping [last change: 2011/10/07 03:10:39] OK db1 mysql [last change: 2011/10/07 03:10:39] OK db1 rep_threads [last change: 2011/10/07 03:10:39] OK db1 rep_backlog [last change: 2011/10/07 03:10:39] OK: Backlog is null |
最后将除write机器的DB的read_only状态设为on:
set global read_only=on; |
并写入my.cnf!
在write角色的机器上授权一个帐号给外部登陆:
mysql -uroot -p123456 -e "grant all privileges on test.* to lihuipeng@'192.168.93.%' identified by 'lihuipeng';" |
然后从另外一台机器上试试登陆四个虚拟IP:
[root@localhost mysql-mmm-2.2.1]# mysql -ulihuipeng -plihuipeng -h192.168.93.141 Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> [root@localhost mysql-mmm-2.2.1]# mysql -ulihuipeng -plihuipeng -h192.168.93.142 Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> [root@localhost mysql-mmm-2.2.1]# mysql -ulihuipeng -plihuipeng -h192.168.93.143 Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> [root@localhost mysql-mmm-2.2.1]# mysql -ulihuipeng -plihuipeng -h192.168.93.144 Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> |
四个ip都可以使用,其它功能大家可以自己去测试一下,这里不多写了,这里主要把数据库的write功能独立出来一个ip,让两台互为主从的机器中其中一台担任write角色,其余机器担任read角色,出现故障时mysql-mmm可以自动切换write角色和主从关系。
配合amoeba完成真正读写分离:http://lihuipeng.blog.51cto.com/3064864/689103
本文转自运维笔记博客51CTO博客,原文链接http://blog.51cto.com/lihuipeng/689064如需转载请自行联系原作者
lihuipeng
Mysql-mmm配置全自动切换主从关系和读写分离相关推荐
- mysql读写分离错_MySQL主从同步、读写分离配置步骤、问题解决
根据要求配置MySQL主从备份.读写分离,结合网上的文档,对搭建的步骤和出现的问题以及解决的过程做了如下笔记: 现在使用的两台服务器已经安装了MySQL,全是rpm包装的,能正常使用. 为了避免不必要 ...
- 高性能高可用MySQL(主从同步,读写分离,分库分表,去中心化,虚拟IP,心跳机制)
高性能高可用MySQL(主从同步,读写分离,分库分表,去中心化,虚拟IP,心跳机制) 视频地址:https://www.bilibili.com/video/BV1ry4y1v7Tr?p=8& ...
- 【纯干货】Amoeba实现MySQL主从同步与读写分离
[纯干货]Amoeba实现MySQL主从同步与读写分离 一.简介 amoeba简介 Amoeba(变形虫)项目,该开源框架于2008年开始发布一款 Amoeba for Mysql软件.这个软件致力于 ...
- php解决mysql主从同步_Mysql读写分离,主从同步实现
随着用户量的增多,数据库操作往往会成为一个系统的瓶颈所在,因此我们可以通过实现数据库的读写分离来提高系统的性能. 通过设置主从数据库实现读写分离,主库负责"写"操作,从库负责&qu ...
- mysql主从和mycat读写分离的安装及验证
目录 一.背景介绍 二.安装mysql数据库(主从机器都需要先这样安装) 三.主从机配置 1.主服务器进行如下操作 2.从服务器进行如下操作 四.代理服务器安装和配置mycat读写分离 五.主从复制. ...
- MyCat 之路 | 配置 Mysql 读写分离+强制走写节点+根据主从延时的读写分离
数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能.对于MySQL来说,标准的读写分离是主从模式,一个写节点Master后面跟着多个读节点,读节点的数量取决于系统的压力 ...
- Django项目配置mysql主从数据库实现读写分离
1.在配置文件中添加slave数据库的配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', ...
- mysql mmm配置_从零开始配置 MySQL MMM
云平台是个好东西,MySQL-MMM 的典型配置是需要五台机器,一台作为MMM admin,两台master,两台slave.一下子找五台机器真不容易,何况还要安装同样的操作系统. 而有了cloud, ...
- MySQL主从架构、读写分离、集群相关面试问题
文章目录 一.MySQL主从同步原理 二.MySQL主从集群面试相关问题 1.全库同步与部分同步 2.GTID同步集群 3.集群扩容与MySQL数据迁移 4.理解半同步复制 5.主从集群与读写分离 6 ...
- redis主从配置 从而实现数据备份和读写分离
首先打开cmd,用cd找到你的redis文件夹,我的操作是 在你的第一个redis客户端文件夹配置文件中,搜索port,找到如下位置 端口号设置为6379(默认的.后面一个,两个或者多个客户端分别修改 ...
最新文章
- 【 C 】关于相邻字符串常量自动合并的标准(新旧标准)(新旧风格)(陷阱)
- 批量添加自定义用户控制,界面闪烁解决方案
- 知乎高赞:有哪些你看了以后大呼过瘾的数据分析书?
- 黑盒测试 ------ 等价类划分法
- python函数的使用方法图解_零基础python之4函数重用-函数与模块(附详细的步骤和程序)...
- mysql --one-database_MySQL数分:安装及入门
- python3.7怎么用_Python 3.7.0 来了!
- Kubernetes 小白学习笔记(1)--基本概念1
- 【渝粤题库】陕西师范大学201821 宋词研究 作业(专升本)
- 投射式触摸屏自电容与互电容工作原理基础(未完待续)
- 电脑里的html打不开,电脑网页打不开怎么回事,教您解决网页打不开的办法
- HC-SR04 超声波原理图讲解与时序分析与arduino使用
- Python基础---List(列表)
- 微信原样返回echostr也无法验证通过的原因
- 亚马逊服务器 购买 流程_亚马逊环如何使我们对购买的每种产品都抱有偏执
- C语言火车票管理系统
- PHp勾股定理,2.6 探索勾股定理(1)
- 2014年9月4日新GRE真题回忆
- 财报向好,但悦刻们迈入至暗时刻
- 迅雷马晓芳: 我向往“定海神针”般的管理者