实验系统:CentOS 6.6_x86_64

实验前提:防火墙和selinux都关闭

实验说明:本实验共有5台主机,IP分配如拓扑

实验软件:mariadb-10.0.20  mysql-mmm-2.2.1  mysql-mmm-monitor-2.2.1  mysql-mmm-agent-2.2.1

下载地址:http://pan.baidu.com/s/1bnnYiMr

实验拓扑:

    

一、准备工作

  1.根据下表,将各主机名进行修改:

    

  2.修改hosts文件,添加如下内容:

vim /etc/hosts
------------------------------------------->
192.168.19.21 mon
192.168.19.66 db1
192.168.19.74 db2
192.168.19.76 db3
192.168.19.79 db4

  3.规划虚拟ip,列表如下:

    

二、安装mariadb并配置

  1.在db1-4上安装:

tar xf mariadb-10.0.-linux-x86_64.tar.gz  -C /usr/local/
cd /usr/local/
ln -sv mariadb-10.0.-linux-x86_64 mysql
useradd -r mysql
mkdir -pv /mydata/data
chown -R mysql.mysql /mydata/data/
cd mysql/
chown -R root.mysql .
scripts/mysql_install_db --user=mysql --datadir=/mydata/data/
cp support-files/my-large.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on

  2.编辑配置文件:

    db1:

vim /etc/my.cnf
--------------------------------------------->
[mysqld]
server-id =
datadir = /mydata/data
log-bin = /mydata/data/mysql1-bin
binlog_format = ROW
relay_log = /mydata/data/relay-log
auto-increment-increment =
auto-increment-offset =
sync_binlog =
sync_master_info =
sync_relay_log =
sync_relay_log_info =
max_binlog_size = 100M
log_slave_updates = 1
<---------------------------------------------
service mysqld start

    db2:

vim /etc/my.cnf
--------------------------------------------->
[mysqld]
server-id =
datadir = /mydata/data
log-bin = /mydata/data/mysql2-bin
binlog_format = ROW
relay_log = /mydata/data/relay-log
auto-increment-increment =
auto-increment-offset =
sync_binlog =
sync_master_info =
sync_relay_log =
sync_relay_log_info =
max_binlog_size = 100M
log_slave_updates =
<---------------------------------------------
service mysqld start

    db3:

vim /etc/my.cnf
--------------------------------------------->
[mysqld]
server-id =
datadir = /mydata/data
log-bin = /mydata/data/mysql3-bin
binlog_format = ROW
relay_log = /mydata/data/relay-log
sync_binlog =
sync_master_info =
sync_relay_log =
sync_relay_log_info =
max_binlog_size = 100M
log_slave_updates =
<---------------------------------------------
service mysqld start

  db4:

vim /etc/my.cnf
--------------------------------------------->
[mysqld]
server-id =
datadir = /mydata/data
log-bin = /mydata/data/mysql4-bin
binlog_format = ROW
relay_log = /mydata/data/relay-log
sync_binlog =
sync_master_info =
sync_relay_log =
sync_relay_log_info =
max_binlog_size = 100M
log_slave_updates =
<---------------------------------------------
service mysqld start

  3.在db1上创建用户:

    这里需要创建三个用户,如下表:

    

/usr/local/mysql/bin/mysql
------------------------------------------------->
GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.19.%' IDENTIFIED BY '';
GRANT SUPER,REPLICATION CLIENT,PROCESS ON *.* TO 'mmm_agent'@'192.168.19.%' IDENTIFIED BY '';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.19.%' IDENTIFIED BY ''

  4.查看二进制日志位置:

FLUSH TABLES WITH READ LOCK;          //施加锁
SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysql1-bin. | | | |
+-------------------+----------+--------------+------------------+

  5.不要关闭这个mysql进程连接,避免锁失效,我们另起一个ssh连接db1服务器,进行数据库备份:

/usr/local/mysql/bin/mysqldump --all-databases > /tmp/database-backup.sql

  6.回到刚才mysql进程,进行解锁:

UNLOCK TABLES;

  7.将database-backup.sql文件复制到其他db节点:

scp /tmp/database-backup.sql db2:/tmp/
scp /tmp/database-backup.sql db3:/tmp/
scp /tmp/database-backup.sql db4:/tmp/

  8.db2-4主机导入sql文件,并刷新权限:

/usr/local/mysql/bin/mysql < /tmp/database-backup.sql
/usr/local/mysql/bin/mysql
------------------------------------------------->
FLUSH PRIVILEGES;

三、设置复制

  1.在db2-4上操作,将db1设置为db2-4的主:

CHANGE MASTER TO MASTER_HOST='192.168.19.66',MASTER_USER='replication',MASTER_PASSWORD='',MASTER_LOG_FILE='mysql1-bin.000004',MASTER_LOG_POS=;
START SLAVE;

  2.查看状态:

SHOW SLAVE STATUS\G

    

    

    

  3.查看db2的master日志位置:

SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysql2-bin. | | | |
+-------------------+----------+--------------+------------------+

  4.在db1上操作,将db2设置为db1的主:

CHANGE MASTER TO MASTER_HOST='192.168.19.74',MASTER_USER='replication',MASTER_PASSWORD='',MASTER_LOG_FILE='mysql2-bin.000001',MASTER_LOG_POS=;
START SLAVE;
SHOW SLAVE STATUS\G

    

四、安装MMM

  1.创建用户:

useradd -s /sbin/nologin mmmd

  2.在mon上安装:

yum -y install mysql-mmm-monitor

  3.在db1-4上安装:

yum -y install mysql-mmm-agent

  4.编写配置文件,五台主机必须一致:

vim /etc/mysql-mmm/mmm_common.conf
-------------------------------------------------------->
active_master_role writer <host default>
cluster_interface eth0
pid_path /var/run/mysql-mmm/mmm_agentd.pid
bin_path /usr/libexec/mysql-mmm/
replication_user replication //用于复制的用户
replication_password 123456 //复制用户的密码
agent_user mmm_agent //用于改变模式的用户
agent_password 123456 //改变模式用户的密码
</host> <host db1>
ip 192.168.19.66
mode master
peer db2 //需要监视的“同伴”
</host> <host db2>
ip 192.168.19.74
mode master
peer db1
</host> <host db3>
ip 192.168.19.76
mode slave
</host> <host db4>
ip 192.168.19.79
mode slave
</host> <role writer>
hosts db1, db2 //可写节点
ips 192.168.19.150 //写操作使用的VIP
mode exclusive //排他模式,此处资源同一时间只能分配给一个主机
</role> <role reader>
hosts db1, db2, db3, db4 //可读节点
ips 192.168.19.151, 192.168.19.152, 192.168.19.153, 192.168.19.154 //读操作使用的VIP
mode balanced //平衡模式
</role>

  5.在db1-4上修改mmm_agent.conf,只需要修改db1这里,是哪台就改成哪台,这里只给出db1的:

vim /etc/mysql-mmm/mmm_agent.conf
------------------------------------------------->
include mmm_common.conf # The 'this' variable refers to this server. Proper operation requires
# that 'this' server (db1 by default), as well as all other servers, have the
# proper IP addresses set in mmm_common.conf.
this db1 //只改这里

  6.配置mon上的mmm_mon.conf:

vim /etc/mysql-mmm/mmm_mon.conf
---------------------------------------------------->
include mmm_common.conf <monitor>
ip 127.0.0.1
pid_path /var/run/mysql-mmm/mmm_mond.pid
bin_path /usr/libexec/mysql-mmm
status_path /var/lib/mysql-mmm/mmm_mond.status
ping_ips 192.168.19.50, 192.168.19.66, 192.168.19.74, 192.168.19.76, 192.168.19.79
//用于测试网络可用性的IP地址,其中有一个地址能ping通,就代表网络正常,不要写入本机的ip地址
auto_set_online 60 //是否设置自动上线,如果该值大于0,抖动的主机在抖动的时间范围过后,则设置自动上线 # The kill_host_bin does not exist by default, though the monitor will
# throw a warning about it missing. See the section 5.10 "Kill Host
# Functionality" in the PDF documentation.
#
# kill_host_bin /usr/libexec/mysql-mmm/monitor/kill_host
#
</monitor> <host default>
monitor_user mmm_monitor //用于监控的用户
monitor_password 123456 //监控用户的密码
</host> debug

五、启动测试:

  1.在db1-4上启动agents:

chkconfig mysql-mmm-agent on
service mysql-mmm-agent start

  2.在mon上启动monitor:

vim /etc/default/mysql-mmm-monitor
--------------------------------------------------->
ENABLED=1
<---------------------------------------------------
service mysql-mmm-monitor start

  3.检查集群状态:

mmm_control show

    

    如果服务器状态不是ONLINE,可以用如下命令将服务器上线,例如:

mmm_control set_online db1

  4.从刚才图片可以看到,写请求的VIP在db1上,所有从节点也都把db1当做主节点。下面将db1停掉:

service mysqld stop          //停掉db1的mysql服务

    可以看到写请求的VIP已经转移到db2上了,且从节点的主都指向了db2:

    

    

  5.最后开启db3、db4的只读:

vim /etc/my.cnf
------------------------------->
[mysqld]
read_only = 1
<-------------------------------
service mysqld restart

  到此为止,所有的配置都完成了。一个writer的VIP和四个reader的VIP都已经正常分配,大家可以创建一个远程登录账号进行测试,这里就不再给出具体的过程了。由于时间紧迫,且经验有限,配置过程中可能会出现纰漏,如有发现请及时联系我,欢迎大家的指正,谢谢! 联系QQ:82800542

mysql高可用架构之mysql-mmm配置详解的更多相关文章

  1. MySQL高可用架构:mysql+keepalived实现

    系统环境及架构 #主机名 系统版本 mysql版本 ip地址 mysqlMaster <a href="https://www.linuxprobe.com/" title= ...

  2. 33.MySQL高可用架构

    33.高可用架构33.1 MMM架构MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序(Perl).主要用来 ...

  3. (转)MySQL高可用架构之MHA

    MySQL高可用架构之MHA  原文:http://www.cnblogs.com/gomysql/p/3675429.html 简介: MHA(Master High Availability)目前 ...

  4. 从mysql高可用架构看高可用架构设计

    高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间. 假设系统一直能够提供服务,我们说系统的可用性是100%.如果 ...

  5. mysql高可用架构之MHA,haproxy实现读写分离详解

    MySQL高可用架构之MHA 一.运维人员需要掌握的MySQL技术: 1.基本SQL语句 2.基本的管理[库表数据的管理    权限的管理] 3.容灾       保证数据不丢失. 二.工作中MySQ ...

  6. MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解

    MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Mycat介绍 1>.什么是Mycat Mycat背后是 ...

  7. 032:基于Consul和MGR的MySQL高可用架构

    目录 一.Consul 1.Consul简介 2.准备环境 3.Consul 安装 4.Consul配置文件 5.Consul 服务检查脚本 6.Consul启动 二.MGR搭建 1.MGR配置 2. ...

  8. MySQL 高可用架构在业务层面的应用分析

    MySQL 高可用架构在业务层面的应用分析 http://mp.weixin.qq.com/s?__biz=MzAxNjAzMTQyMA==&mid=208312443&idx=1&a ...

  9. MySQL高可用架构应该考虑什么? 你认为应该如何设计?

    一.MySQL高可用架构应该考虑什么? 对业务的了解,需要考虑业务对数据库一致性要求的敏感程度,切换过程中是否有事务会丢失 对于基础设施的了解,需要了解基础设施的高可用的架构.例如 单网线,单电源等情 ...

  10. MySQL高可用架构之MySQL5.7组复制MGR

    MySQL高可用架构之MySQL5.7组复制MGR########################################################################### ...

随机推荐

  1. github上传项目(使用git)、删除项目、添加协作者

    一.注册github账号 github网址https://github.com/ 下一步 然后,你的邮箱会收到一封邮件,进行邮箱验证就行了 二.创建github仓库 登录你的github,在首页的右方 ...

  2. 在CentOS 6.5上安装python2.7

    1.yum groupinstall “Development tools” 2.安装编译Python需要的组件 yum install zlib-devel bzip2-devel openssl- ...

  3. C#基础-压缩文件及故障排除

    C#压缩文件可以使用第三方dll库:ICSharpCode.SharpZipLib.dll: 以下代码能实现文件夹与多个文件的同时压缩.(例:把三个文件夹和五个文件一起压缩成一个zip) 直接上代码, ...

  4. 背水一战 Windows 10 (24) - MVVM: 通过 Binding 或 x:Bind 结合 Command 实现,通过非 ButtonBase 触发命令

    [源码下载] 背水一战 Windows 10 (24) - MVVM: 通过 Binding 或 x:Bind 结合 Command 实现,通过非 ButtonBase 触发命令 作者:webabcd ...

  5. 如何给Ubuntu12.10 安装Vmware Tools

    众所周知在VMware虚拟机中安装好了VMware Tools,才能实现主机与虚拟机之间的文件共享,同时可支持自由拖拽的功能,鼠标也可在虚拟机与主机之前自由移动(而不再用按ctrl+alT释放),而且 ...

  6. AdapterPattern(适配器模式)

    import org.omg.PortableServer.AdapterActivator; /** * 分两种情况: * 1.类适配器 * 2.对象适配器 * 作用:让原本接口不兼容的两个类可以在 ...

  7. [连载]《C#通讯(串口和网络)框架的设计与实现》-3.设备驱动的设计

    目       录 第三章           设备驱动的设计... 2 3.1           初始化设备... 4 3.2           运行设备接口设计... 4 3.3        ...

  8. SOA的浅析

    曾今SOA的概念犹如今日“云计算.大数据”一样,被炒得火热,不少企业便纷纷响应,并宣称会拥抱和实施SOA.而事实上,业界出现了两种极端:一种是由于各类文章和书籍关于SOA的描述往往太过抽象,再加上各大 ...

  9. 利用SCORE法则来总结一次偷懒的单元测试过程

    最近遇到一个单元测试的问题,本周正好学个了一个SCORE法则,这里正好练练手应用此法则将问题的前因后果分享给大家. S:背景  代码要有单元测试,检测的标准就是统计代码的单元测试覆盖率,程序员需要达到 ...

  10. MySQL 5.7:非结构化数据存储的新选择

    本文转载自:http://www.innomysql.net/article/23959.html (只作转载, 不代表本站和博主同意文中观点或证实文中信息) 工作10余年,没有一个版本能像MySQL ...