- 浏览: 852102 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zjhzwx1212:
为什么用threadLocal后,输出值是从20开始的,而定义 ...
j2ee的线程安全--threadlocal -
aeoluspu:
不错 mysql 测试部分感觉不详细
用sysbench(或者super-smack)测试mysql性能 -
nanPrivate:
有没有例子,只理论,实践起来还是不会啊
JMS可靠消息传送 -
lwclover:
一个网络工程师 装什么b
postfix 如何删除队列中的邮件 -
maimode:
我也欠缺不少啊
理想的计算机科学知识体系
先介绍下MMM
MMM是 mysql-master-master的缩写。
MMM项目来自 Google:http://code.google.com/p/mysql-master-master
MySQL本身没有提供replication failover的解决方案,那么如何使Replication方案具有HA的功能呢,那就是MMM。
大家都知道mysql的同步机制在解决实际问题上具有很高的可行性,特别对读写负载比较高的web2.0来说,那么在实际应用中必须保证mysql的稳定性及性能。
Master-Master Replication
1、使用两个MySQL数据库db1,db2,互为Master和Slave,即:
一边db1作为db2的master,一旦有数据写向db0时,db2定时从db1更新
另一边db2也作为db1的master,一旦有数据写向db2时,db1也定时从db2获得更新
2、但从AppServer的角度来说,同时只有一个结点db1扮演Master,另外一个结点db2扮演Slave,不能同时两个结点扮演Master。即AppSever总是把write操作分配某个数据库(db1),除非db1 failed,被切换。
3、如果扮演Slave的数据库结点db2 Failed了:
a)此时appServer要能够把所有的read,write分配给db1,read操作不再指向db2
b)一旦db2恢复过来后,继续充当Slave角色,并告诉AppServer可以将read分配给它了
4、如果扮演Master的数据库结点db1 Failed了
a)此时appServer要能够把所有的写操作从db1切换分配给db2,也就是切换Master由db2充当
b)db1恢复过来后,充当Slave的角色,Master由db2继续扮演
MMM利用了虚拟IP的技术:1个网卡可以同时使用多个IP。
(所以使用MMM时,需要2*n+1个IP,n为mysql数据库结点个数,包括master,slave)
MMM有3个重要的器件:
1、mmmd_mon - 数据库控制节点运行。
2、mmm_control - 数据库控制节点运行。
3、mmmd_agent - 数据库节点(master/slave)运行。
本文环境:
server1 ip: 192.168.1.225 ; virtual read ip:192.168.1.229
server2 ip: 192.168.1.226 ; virtual read ip:192.168.1.230
server3 ip: 192.168.1.227
virtual write ip: 192.168.1.231
配置过程很简单,
server1 server2 replication双向 master-master
server1 server2 安装mmm并配置mmm_agent.conf
server3 安装mmm并配置mmm_mon.conf
1,首先我们要先配置好master-master双向同步,这一步就不多说了。
2,安装部署MMM
3台服务器都要安装MMM软件,安装过程如下:
安装如下perl模块,为MMM安装做好准备,
cpan Algorithm::Diff
cpan Proc::Daemon
cpan Time::HiRes
cpan DBI
cpan DBD::mysql
wget http://mysql-master-master.googlecode.com/files/mmm-1.0-pre2.tar.bz2
tar xzf mmm-1.0-pre2.tar.bz2
cd mmm-1.0-pre2
./install.pl
3,在server1上配置MMM
修改配置 /usr/local/mmm/etc/mmm_agent.conf,如下:
#
# Master-Master Manager config (agent)
#
# Debug mode
debug no
# Paths
pid_path /usr/local/mmm/var/mmmd_agent.pid
bin_path /usr/local/mmm/bin
# Logging setup
log mydebug
file /usr/local/mmm/var/mmm-debug.log
level debug
log mytraps
file /usr/local/mmm/var/mmm-traps.log
level trap
# MMMD command socket tcp-port and ip
bind_port 9989
# Cluster interface
cluster_interface eth0
# Define current server id
this db1
mode master
# For masters
peer db2
# Cluster hosts addresses and access params
host db1
ip 192.168.1.225
port 3306
user rep_agent
password RepAgent
host db2
ip 192.168.1.226
port 3306
user rep_agent
password RepAgent
GRANT ALL PRIVILEGES on *.* to 'rep_agent'@'%′ identified by 'RepAgent';
GRANT ALL PRIVILEGES on *.* to 'rep_monitor'@'%' identified by 'RepMonitor';
3,在server2上配置MMM
修改配置 /usr/local/mmm/etc/mmm_agent.conf,如下:
#
# Master-Master Manager config (agent)
#
# Debug mode
debug no
# Paths
pid_path /usr/local/mmm/var/mmmd_agent.pid
bin_path /usr/local/mmm/bin
# Logging setup
log mydebug
file /usr/local/mmm/var/mmm-debug.log
level debug
log mytraps
file /usr/local/mmm/var/mmm-traps.log
level trap
# MMMD command socket tcp-port and ip
bind_port 9989
# Cluster interface
cluster_interface eth0
# Define current server id
this db2
mode master
# For masters
peer db1
# Cluster hosts addresses and access params
host db1
ip 192.168.1.225
port 3306
user rep_agent
password RepAgent
host db2
ip 192.168.1.226
port 3306
user rep_agent
password RepAgent
GRANT ALL PRIVILEGES on *.* to 'rep_agent'@'%′ identified by 'RepAgent';
GRANT ALL PRIVILEGES on *.* to 'rep_monitor'@'%' identified by 'RepMonitor';
3,在server3上配置MMM
修改配置 /usr/local/mmm/etc/mmm_mon.conf,如下:
#
# Master-Master Manager config (monitor)
#
# Debug mode
debug no
# Paths
pid_path /usr/local/mmm/var/mmmd.pid
status_path /usr/local/mmm/var/mmmd.status
bin_path /usr/local/mmm/bin
# Logging setup
log mydebug
file /usr/local/mmm/var/mmm-debug.log
level debug
log mytraps
file /usr/local/mmm/var/mmm-traps.log
level trap
email root@localhost
# MMMD command socket tcp-port
bind_port 9988
agent_port 9989
monitor_ip 127.0.0.1
# Cluster interface
cluster_interface eth0
# Cluster hosts addresses and access params
host db1
ip 192.168.1.225
port 3306
user rep_monitor
password RepMonitor
mode master
peer db2
host db2
ip 192.168.1.226
port 3306
user rep_monitor
password RepMonitor
mode master
peer db1
#
# Define roles
#
active_master_role writer
# Mysql Reader role
role reader
mode balanced
servers db1, db2
ip 192.168.1.229, 192.168.1.230
# Mysql Writer role
role writer
mode exclusive
servers db1, db2
ip 192.168.1.231
#
# Checks parameters
#
# Ping checker
check ping
check_period 1
trap_period 5
timeout 2
# Mysql checker
# (restarts after 10000 checks to prevent memory leaks)
check mysql
check_period 1
trap_period 2
timeout 2
restart_after 10000
# Mysql replication backlog checker
# (restarts after 10000 checks to prevent memory leaks)
check rep_backlog
check_period 5
trap_period 10
max_backlog 60
timeout 2
restart_after 10000
# Mysql replication threads checker
# (restarts after 10000 checks to prevent memory leaks)
check rep_threads
check_period 1
trap_period 5
timeout 2
restart_after 10000
启动
server1 与 server2上分别启动mmmd_agent
[root@localhost ~]# mmmd_agent
[root@localhost ~]# netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:9989 0.0.0.0:* LISTEN 26010/perl
出现9989端口说明启动成功。
server3上启动mmmd_mon
[root@localhost etc]# mmmd_mon
Reading config file: 'mmm_mon.conf'
$VAR1 = {
'db2' => {
'roles' => [
'reader(192.168.1.229;)'
],
'version' => '0',
'state' => 'ONLINE'
},
'db1' => {
'roles' => [
'reader(192.168.1.230;)',
'writer(192.168.1.231;)'
],
'version' => '0',
'state' => 'ONLINE'
}
};
Role: 'reader(192.168.1.229;)'
Adding role: 'reader' with ip '192.168.1.229'
Role: 'reader(192.168.1.230;)'
Adding role: 'reader' with ip '192.168.1.230'
Role: 'writer(192.168.1.231;)'
Adding role: 'writer' with ip '192.168.1.231'
在管理节点上(server3)启动db节点:
mmm_control set_online db1
mmm_control set_online db2
查看下节点状态:
[root@localhost etc]# mmm_control show
Config file: mmm_mon.conf
Daemon is running!
Servers status:
db1(192.168.1.225): master/ONLINE. Roles: reader(192.168.1.230;), writer(192.168.1.231;)
db2(192.168.1.226): master/ONLINE. Roles: reader(192.168.1.229;)
OK,能看到这个效果说明你已经配置成功了,下面就可以随心所欲的折腾mysql的异常状态,来进行测试。
发表评论
-
找出mysql中最大的表
2011-08-04 12:41 1688SELECT concat(round(table_rows/ ... -
find 10 largest table in mysql
2010-07-20 11:09 1110SELECT concat(round(table_rows/ ... -
MySQL Back to Basics: Analyze, Check, Optimize, and Repair
2010-07-14 11:35 1191http://www.pythian.com/news/111 ... -
找出mysql中无用的索引
2010-07-13 14:49 1892select t.TABLE_SCHEMA , ... -
xtrabackup timeout bug
2010-06-13 10:21 1093I modified /usr/bin/innobac ... -
Compiling sysbench 0.4.12 for Debian
2010-06-09 10:16 986http://www.randombugs.com/linux ... -
mysql 实用工具集
2010-06-04 00:08 1113这些工具都是从网上搜集来的,对mysql的管理,调优和恢复有很 ... -
gearman for mysql
2010-05-10 18:26 1007http://www.slideshare.net/datac ... -
几个应该被修改的mysql默认值
2010-05-06 15:24 1495wait_timeout = 20 (不适合持久连接) in ... -
How to Perform a Healthcheck on the Database
2010-02-26 10:05 1403http://bbs.chinaunix.net/thread ... -
PostgreSQL与Innodb并发控制大比拼
2010-01-14 11:38 2095http://wangyuanzju.blog.163.com ... -
关于mysql的很好网站
2009-10-21 10:40 951http://www.mysqlperformanceblog ... -
Should you move from MyISAM to Innodb ?
2009-10-17 02:37 1040There is significant portion of ... -
最好的mysql备份工具
2009-08-19 16:45 1216Xtrabackup https://launchpad.n ... -
mysql 增量备份脚本
2009-08-18 09:44 3657根据网上脚本修改而成 mysqlFullBackup.sh ... -
mysql-zrm备份mysql数据库
2009-07-22 13:58 2779MySQL-zrm是用perl脚本写的 ... -
Base: An Acid Alternative
2009-06-18 15:55 1410http://queue.acm.org/detail.cfm ... -
关于innodb插入性能
2009-04-07 10:54 1601根据某网友的测试,innodb在以下条件下插入性能是稳定的: ... -
MySQL主从服务器的一些技巧
2009-03-25 15:18 962http://www.sunnyu.com/?p=150 -
mytop1.6补丁
2009-03-13 17:27 1007mytop是一个实时监控mysql状态的工具,很好用,但是有一 ...
相关推荐
MySQL是世界上最受欢迎的关系型数据库管理系统之一,为了保证数据的高可用性和稳定性,许多企业选择采用高可用架构。本文将深入探讨MySQL的MMM(Mysql-Multi-Master Replication)架构,以及如何搭建和验证该架构。 ...
MySQL高可用MMM(Mysql-Multi-Master Replication Manager)是一种多主复制解决方案,它允许在多个MySQL主节点之间进行数据同步,以实现高可用性和负载均衡。然而,MMM并不适合那些对数据一致性有严格要求的业务场景...
搭建Mysql-mmm+mysql 5.6双主高可用集群的案例环境需要准备Centos7.4系统,mysql-5.6.36.tar.gz等软件包,以及4台主机分别作为master1、master2、slave1、slave2和1台监控节点。搭建步骤包括部署ntp服务和域名解析、...
#### 一、MySQL高可用性的重要性 - **定义与目的**:MySQL高可用性是指数据库系统能够在发生故障时自动切换到备用系统,并且对外提供不间断的服务能力。其目的是减少系统停机时间,提高数据的安全性和服务的可靠性。...
MySQL-MMm架构是一种用于MySQL高可用性和扩展性的解决方案,它主要设计用于管理和监控MySQL主主复制环境。在本文中,我们将深入探讨其优点、缺点、工作原理以及搭建过程。 **一、优点** 1. **高可用性**:MySQL-...
本书适合所有希望构建和管理高性能、高可用性的mysql数据库系统的开发者和dba阅读。 目录 · · · · · · 前言 第一部分 mysql5.5 新特性篇 第1章 mysql5.5介绍 2 1.1 性能上的显著改变 2 1.1.1 mysql5.5默认...
MHA(Master High Availability)是一种用于MySQL的高可用性解决方案,它采用Perl语言编写而成。MHA的核心优势在于能够在0~30秒内自动完成数据库的故障切换操作,同时确保数据的一致性和完整性,实现了真正的高可用...
在实际操作中,搭建MySQL主从集群涉及多个步骤,包括配置主服务器、从服务器,设置复制参数,以及测试复制功能。在配置过程中,需要开放主服务器的远程登录权限,以便从服务器可以连接并获取binlog。此外,为了应对...
1、数据库采用MYSQL 主主复制+MMM 高可用 2、Web 集群采用LVS+DR 模式,采用Keepalive 实现高可用 3、页面存储使用NFS 存储,使Web Server 同步信息相同 4、网管使用iptables 5、使用nagios 对所有服务器进行状态...
4. 熟练配置和优化Tomcat/Jetty服务器,使用Nginx+Keepalived实现服务的高可用性,掌握负载均衡组件的配置和调优。 **NoSQL数据库类和缓存类技能:** 1. 熟练使用Redis、Memcached等NoSQL解决方案,精通其在分布式...