赞
踩
MySQL的集群方案有多种,按照实现途径可以分为MySQL官方和第三方。
1)官方实现方式包括:主从方式、一主多从方式、cluster集群方式等。
2)第三方实现方式包括:MMM(双主多从)方式、MHA(多主多从)方式、Galera Cluster(多主结构)方式等。
…
原理
写在master,读在slave。
通过重放binlog实现主库数据的异步复制。即当主库执行了一条 sql 命令,那么在从库同样的执行一遍,从而达到主从复制
的效果。在这个过程中, master 对数据的写操作记入二进制日志文件中(binlog),生成一个 log dump 线程,用来给从库的 i/o 线程传 binlog。而从库的 i/o 线程去请求主库的binlog,并将得到的 binlog 日志写到中继日志( relaylog)中,从库的 sql 线程,会读取 relaylog 文件中的日志,并解析成具体操作,通过主从的操作一致,而达到最终数据一致。
…
目的
实现数据的多点备份(没有故障自动转移和负载均衡)。
…
优势
相比于单个MySQL,优势有:
相比于各个集群方案来说,优势有:
…
劣势
…
应用场景
这种方式在日常业务中,读操作多于写操作。
…
搭建实现
安装MySQL,安装完成后,需要对配置文件进行配置。
1)配置主机
a)打开/etc/mysql/mysql.conf.d/mysqld.cnf里的log-bin和server-id=101。
$sudo vim /etc/mysql/my.cnf //不同版本,配置文件位置可能不一样
添加 server-id, log-bin
修改并开启:bind-address=0.0.0.0
b)然后启动MySQL:sudo /etc/init.d/mysql restart
c)进入MySQL后,创建一个Replication用于与slave同步数据。
- mysql > create user replication@'%' identified by '123456';
- mysql > grant all privileges on *.* to 'replication'@'%' identified by '123456' with grant option;
- mysql > show master status;
这里的mysql-bin.000001文件用于同步数据,Position为位置偏移量。
2)配置从机
从机的配置数据需要与主机的配置对应。
a)对于从机,不需要开启log-bin,但需要开启server-id=100。
b)然后启动MySQL:sudo /etc/init.d/mysql restart
c)设置master_ip,binlog,pos,master_port,master_use,master_password。
mysql > change master to master_host='192.168.189.133', master_port=3306, master_user='replication', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=380;
d)启动从机:mysql > start slave
e)查看从机状态:mysql> show slave status\G
如果看到下图中的Running为Yes,说明主从已经开始同步工作了。
问题引出:一主多从方式,主机出现问题应该怎么办?
…
原理
依旧是一主多从的结构,在MySQL Replication基础上,增加了故障检测与转移,自动数据分片功能。
MySQL Fabirc只有一个主节点,区别是当主节点挂了以后,会从从节点中选择一个来当主节点。
…
优势
相比于各个集群方案来说,优势有:
…
劣势
问题引出:主机宕机了,有些数据没有传到slave应该怎么处理?
…
原理
该方式为多主多从结构。MySQL分为2层,一层是mysql shell(每一个对应的IP地址),包含网络、SQL语句的解析、优化等。下一层是存储引擎。
Cluster多出了一层NDB存储引擎。
每一集群中可能有多个机器,每一个节点就是NDB节点,它们之间会进行同步,相当于每一段管理一段数据,没有所谓的主从。
…
优势
相比于各个集群方案来说,优势有:
…
劣势
1. MMM-双主多从方式
MMM ( Master Replication Manager for MySQL)是双主多从结构, MMM 是在 MySQL Replication的基础上,对其进行优化。 这是 Google 的开源项目,使用 Perl 语言来对 MySQL Replication做扩展,提供一套支持双主故障切换和双主日常管理的脚本程序,主要用来监控 mysql 主主复制并做失败转移。
MMM(Master-Master replication manager for Mysql)是一套灵活的脚本程序,用来监控和故障切换,管理mysql Master-Master复制的配置 (同一时间只有一个节点是可写的)。
两个主机共用一个虚拟IP,外部在与MySQL交互的时候,只需要与虚拟IP进行交互,具体内部与哪个master交互,不确定。
MMM主要的功能通过三个脚本实现:
1)mmm_mond
监控进程,负责所有的监控工作,决定和处理所有节点角色活动。
2)mmm_agentd
运行在每个mysql服务器上的代理进程,完成监控的探针工作和执行简单的远端服务设置。
3)mmm_control
一个简单的脚本,提供管理mmm_mond进程的命令。
注意:这里的双主节点,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热。
…
优势
相比于各个集群方案来说,优势有:
…
劣势
2. MHA
MHA( Master High Availability)是多主多从结构, MHA 是在 MySQL Replication 的基础上,对其进行优化。 这是日本 DeNA 公司的 youshimaton 开发,主要提供更多的主节点,但是缺少VIP(虚拟 IP),需要配合 keepalived 等一起使用。
要搭建MHA,要求一个复制集群中必须最少有3台数据库服务器,一主二从,即一台充当master,一台充当master,另外一台充当从库。
…
优势
相比于各个集群方案来说,优势有:
…
劣势
3. Galera Cluster
Galera Cluster 是由 Codership 开发的 MySQL 多主结构集群,这些主节点互为其它节点的从节点。不同于 MySQL 原生的主从异步复制, Galera 采用的是多主同步复制,并针对同步复制过程中,会大概率出现的事务冲突和死锁进行优化,就是复制不基于官方 binlog 而是 Galera复制插件,重写了 wsrep api。 异步复制中,主库将数据更新传播给从库后立即提交事务,而不论从库是否成功读取或重放数据变化。这种情况下,在主库事务提交后的短时间内,主从库数据并不一致。 同步复制时,主库的单个更新事务需要在所有从库上同步 更新。换句话说,当主库提交事务时,集群中所有节点的数据保持一致。
对于读操作,从每个节点读取到的数据都是相同的。对于写操作,当数据写入某一节点后,集群会将其同步到其它节点。
…
优势
相比于各个集群方案来说,优势有:
…
劣势
- func()
- {
- write_to_mysql();
- write_to_redis();
- }
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。