百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

Linux服务器开发之MySQL 集群方案

liebian365 2024-10-22 15:41 5 浏览 0 评论

案例:

100W 的客户端,每三分钟上传一次数据。数据库如何设计?能够查询所有记录?

官方 MySQL 集群方案

MySQL Replication

MySQL Replication 是 mysql 自带的功能,主从复制是通过重放 binlog 实现主库数据的

异步复制。即当主库执行了一条 sql 命令,那么在从库同样地执行一遍,从而达到主从复制

的效果。在这个过程中,master 对数据的写操作记入二进制日志文件中(binlog),生成一

个 log dump 线程,用来给从库的 i/o 线程传 binlog。而从库的 i/o 线程去请求主库的

binlog,并将得到的 binlog 日志写到中继日志(relaylog)中,从库的 sql 线程,会读

取 relaylog 文件中的日志,并解析成具体操作,通过主从的操作一致,而达到最终数据一

致。

MySQL Replication 一主多从的结构,主要目的是实现数据的多点备份(没有故障自动转移和

负载均衡)。相比于单个的 mysql,一主多从下的优势如下:

1. 如果让后台读操作连接从数据库,让写操作连接主数据库,能起到读写分离的作用,这

个时候多个从数据库可以做负载均衡。

2. 可以在某个从数据库中暂时中断复制进程,来备份数据,从而不影响主数据的对外服务

(如果在 master 上执行 backup,需要让 master 处于 readonly 状态,这也意味着所有的

write 请求需要阻塞)。

就各个集群方案来说,其优势为:

1. 主从复制是 mysql 自带的,无需借助第三方。

2. 数据被删除,可以从 binlog 日志中恢复。

3. 配置较为简单方便。

其劣势为:

1. 从库要从 binlog 获取数据并重放,这肯定与主库写入数据存在时间延迟,因此从库的数

据总是要滞后主库。

2. 对主库与从库之间的网络延迟要求较高,若网络延迟太高,将加重上述的滞后,造成最

终数据的不一致。

3. 单一的主节点挂了,将不能对外提供写服务。

配置主机:

$ sudo vim /etc/mysql/my.cnf

添加 log-bin , server_id
修改 bind-address = 0.0.0.0
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 > 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;
mysql > start slave;
mysql> show slave status\G

问题 1

# mysql –u root -p
> create user ‘wangbojing’@’%’ identified by ‘123456’;
> grant all privileges on *.* to ‘wangbojing’@’%’ identified by
‘123456’ with grant option;
> SHOW DATABASES;
> CREATE DATABASE VIP_ORDER;
> CREATE TABLE TBL_USER (
> U_ID INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
> U_NAME VARCHAR(64) NOT NULL,
> U_IMAGE LONGBLOB,
> U_GENDER VARCHAR(64)
> )

# 性能测试

# sysbench src/lua/oltp_read_write.lua --tables=3 --table_size=500000 -
-mysql-user=root --mysql-password=123456 --mysql-host=192.168.2.217
mysql-port=3306 --mysql-db=TBL_REPLICATION prepare
# sysbench src/lua/oltp_point_select.lua --tables=3 --table_size=500000 --mysql
user=root --mysql-password=zhaomeiping --mysql-host=192.168.2.217 --mysql-port=3306
--mysql-db=TBL_REPLICATION --threads=128 --time=100 --report-interval=5 run

MySQL Fabirc

MySQL Fabirc,是 mysql 官方提供的。这是在 MySQL Replication 的基础上,增加了故障检测

与转移,自动数据分片功能。不过依旧是一主多从的结构,MySQL Fabirc 只有一个主节点,

区别是当该主节点挂了以后,会从从节点中选择一个来当主节点。

就各个集群方案来说,其优势为:

1. mysql 官方提供的工具,无需第三方插件。

2. 数据被删除,可以从 binlog 日志中恢复。

3. 主节点挂了以后,能够自动从从节点中选择一个来当主节点,不影响持续对外提供写服

务。

其劣势为:

1. 从库要从 binlog 获取数据并重放,这肯定与主库写入数据存在时间延迟,因此从库的数

据总是要滞后主库。

2. 对主库与从库之间的网络延迟要求较高,若网络延迟太高,将加重上述的滞后,造成最

终数据的不一致。

3. 2014 年 5 月推出的产品,数据库资历较浅,应用案例不多,网上各种资料相对较少。

4. 事务及查询只支持在同一个分片内,事务中更新的数据不能跨分片,查询语句返回的数

据也不能跨分片。

5. 节点故障恢复 30 秒或更长(采用 InnoDB 存储引擎的都这样)。

MySQL Cluster

MySQL 集群(MySQL Cluster)也是 mysql 官方提供的。

MySQL Cluster 是多主多从结构的

就各个集群方案来说,其优势为:

1.

mysql 官方提供的工具,无需第三方插件。

2.

高可用性优秀,99.999%的可用性,可以自动切分数据,能跨节点冗余数据(其数据集并

不是存储某个特定的 MySQL 实例上,而是被分布在多个 Data Nodes 中,即一个 table 的

数据可能被分散在多个物理节点上,任何数据都会在多个 Data Nodes 上冗余备份。任何

一个数据变更操作,都将在一组 Data Nodes 上同步,以保证数据的一致性)。

3.

可伸缩性优秀,能自动切分数据,方便数据库的水平拓展。

4.

负载均衡优秀,可同时用于读操作、写操作都都密集的应用,也可以使用 SQL 和 NOSQL

接口访问数据。

5.

多个主节点,没有单点故障的问题,节点故障恢复通常小于 1 秒。

其劣势为:

1. 架构模式和原理很复杂。

2. 只能使用存储引擎 NDB ,与平常使用的 InnoDB 有很多明显的差距。比如在事务(其

事务隔离级别只支持 Read Committed,即一个事务在提交前,查询不到在事务内所做的

修改),外键(虽然最新的 NDB 存储引擎已经支持外键,但性能有问题,因为外键所关

联的记录可能在别的分片节点),表现制上的不同,可能会导致日常开发出现意外。

3. 作为分布式的数据库系统,各个节点之间存在大量的数据通讯,比如所有访问都是需要

经过超过一个节点(至少有一个 SQL Node 和一个 NDB Node)才能完成,因此对节点之

间的内部互联网络带宽要求高。

4. Data Node 数据会被尽量放在内存中,对内存要求大,而且重启的时候,数据节点将数

据 load 到内存需要很长时间。

第三方集群方案

MMM

MMM(Master Replication Manager for MySQL)是双主多从结构,MMM 是在 MySQL Replication

的基础上,对其进行优化。这是 Google 的开源项目,使用 Perl 语言来对 MySQL Replication

做扩展,提供一套支持双主故障切换和双主日常管理的脚本程序,主要用来监控 mysql 主主

复制并做失败转移。

注意:这里的双主节点,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,

另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热。

就各个集群方案来说,其优势为:

1. 自动的主主 Failover 切换,一般 3s 以内切换备机。

2. 多个从节点读的负载均衡。

其劣势为:

1. 无法完全保证数据的一致性。如主 1 挂了,MMM monitor 已经切换到主 2 上来了,而若

此时双主复制中,主 2 数据落后于主 1(即还未完全复制完毕),那么此时的主 2 已经成

为主节点,对外提供写服务,从而导致数据不一。

2. 由于是使用虚拟 IP 浮动技术,类似 Keepalived,故 RIP(真实 IP)要和 VIP(虚拟 IP)在

同一网段。如果是在不同网段也可以,需要用到虚拟路由技术。但是绝对要在同一个 IDC

机房,不可跨 IDC 机房组建集群。

MHA

MHA(Master High Availability)是多主多从结构,MHA 是在 MySQL Replication 的基础上,对

其进行优化。这是日本 DeNA 公司的 youshimaton 开发,主要提供更多的主节点,但是缺少

VIP(虚拟 IP),需要配合 keepalived 等一起使用。

要搭建 MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当

master,一台充当备用 master,另外一台充当从库。

就各个集群方案来说,其优势为:

1. 可以进行故障的自动检测和转移

2. 具备自动数据补偿能力,在主库异常崩溃时能够最大程度地保证数据的一致性。

其劣势为:

1. MHA 架构实现读写分离,最佳实践是在应用开发设计时提前规划读写分离事宜,再使用

时设置两个连接池,即读连接池与写连接池,也可以选择这种方案即引入 SQL Proxy。但

无论如何都需要改动代码;

2. 关于读负载均衡可以使用 F5、LVS、HAPROXY 或者 SQL Proxy 等工具,只要能实现负载均

衡、故障检查及备升级为主后的读写剥离功能即可,建议使用 LVS

Galera Cluster

Galera Cluster 是由 Codership 开发的 MySQL 多主结构集群,这些主节点互为其它节点的从节

点。不同于 MySQL 原生的主从异步复制,Galera 采用的是多主同步复制,并针对同步复制

过程中,会大概率出现的事务冲突和死锁进行优化,就是复制不基于官方 binlog 而是 Galera

复制插件,重写了 wsrep api。异步复制中,主库将数据更新传播给从库后立即提交事务,而

不论从库是否成功读取或重放数据变化。这种情况下,在主库事务提交后的短时间内,主从

库数据并不一致。同步复制时,主库的单个更新事务需要在所有从库上同步 更新。换句话

说,当主库提交事务时,集群中所有节点的数据保持一致。

对于读操作,从每个节点读取到的数据都是相同的。对于写操作,当数据写入某一节点后,

集群会将其同步到其它节点。

就各个集群方案来说,其优势为:

1. 多主多活下,可对任一节点进行读写操作,就算某个节点挂了,也不影响其它的节点的

读写,都不需要做故障切换操作,也不会中断整个集群对外提供的服务。

2. 拓展性优秀,新增节点会自动拉取在线节点的数据(当有新节点加入时,集群会选择出

一个 Donor Node 为新节点提供数据),最终集群所有节点数据一致,而不需要手动备份

恢复。

其劣势为:

能做到数据的强一致性,毫无疑问,也是以牺牲性能为代价。

更多技术点欢迎关注!

相关推荐

快递查询教程,批量查询物流,一键管理快递

作为商家,每天需要查询许许多多的快递单号,面对不同的快递公司,有没有简单一点的物流查询方法呢?小编的回答当然是有的,下面随小编一起来试试这个新技巧。需要哪些工具?安装一个快递批量查询高手快递单号怎么快...

一键自动查询所有快递的物流信息 支持圆通、韵达等多家快递

对于各位商家来说拥有一个好的快递软件,能够有效的提高自己的工作效率,在管理快递单号的时候都需要对单号进行表格整理,那怎么样能够快速的查询所有单号信息,并自动生成表格呢?1、其实方法很简单,我们不需要一...

快递查询单号查询,怎么查物流到哪了

输入单号怎么查快递到哪里去了呢?今天小编给大家分享一个新的技巧,它支持多家快递,一次能查询多个单号物流,还可对查询到的物流进行分析、筛选以及导出,下面一起来试试。需要哪些工具?安装一个快递批量查询高手...

3分钟查询物流,教你一键批量查询全部物流信息

很多朋友在问,如何在短时间内把单号的物流信息查询出来,查询完成后筛选已签收件、筛选未签收件,今天小编就分享一款物流查询神器,感兴趣的朋友接着往下看。第一步,运行【快递批量查询高手】在主界面中点击【添...

快递单号查询,一次性查询全部物流信息

现在各种快递的查询方式,各有各的好,各有各的劣,总的来说,还是有比较方便的。今天小编就给大家分享一个新的技巧,支持多家快递,一次能查询多个单号的物流,还能对查询到的物流进行分析、筛选以及导出,下面一起...

快递查询工具,批量查询多个快递快递单号的物流状态、签收时间

最近有朋友在问,怎么快速查询单号的物流信息呢?除了官网,还有没有更简单的方法呢?小编的回答当然是有的,下面一起来看看。需要哪些工具?安装一个快递批量查询高手多个京东的快递单号怎么快速查询?进入快递批量...

快递查询软件,自动识别查询快递单号查询方法

当你拥有多个快递单号的时候,该如何快速查询物流信息?比如单号没有快递公司时,又该如何自动识别再去查询呢?不知道如何操作的宝贝们,下面随小编一起来试试。需要哪些工具?安装一个快递批量查询高手快递单号若干...

教你怎样查询快递查询单号并保存物流信息

商家发货,快递揽收后,一般会直接手动复制到官网上一个个查询物流,那么久而久之,就会觉得查询变得特别繁琐,今天小编给大家分享一个新的技巧,下面一起来试试。教程之前,我们来预览一下用快递批量查询高手...

简单几步骤查询所有快递物流信息

在高峰期订单量大的时候,可能需要一双手当十双手去查询快递物流,但是由于逐一去查询,效率极低,追踪困难。那么今天小编给大家分享一个新的技巧,一次能查询多个快递单号的物流,下面一起来学习一下,希望能给大家...

物流单号查询,如何查询快递信息,按最后更新时间搜索需要的单号

最近有很多朋友在问,如何通过快递单号查询物流信息,并按最后更新时间搜索出需要的单号呢?下面随小编一起来试试吧。需要哪些工具?安装一个快递批量查询高手快递单号若干怎么快速查询?运行【快递批量查询高手】...

连续保存新单号功能解析,导入单号查询并自动识别批量查快递信息

快递查询已经成为我们日常生活中不可或缺的一部分。然而,面对海量的快递单号,如何高效、准确地查询每一个快递的物流信息,成为了许多人头疼的问题。幸运的是,随着科技的进步,一款名为“快递批量查询高手”的软件...

快递查询教程,快递单号查询,筛选更新量为1的单号

最近有很多朋友在问,怎么快速查询快递单号的物流,并筛选出更新量为1的单号呢?今天小编给大家分享一个新方法,一起来试试吧。需要哪些工具?安装一个快递批量查询高手多个快递单号怎么快速查询?运行【快递批量查...

掌握批量查询快递动态的技巧,一键查找无信息记录的两种方法解析

在快节奏的商业环境中,高效的物流查询是确保业务顺畅运行的关键。作为快递查询达人,我深知时间的宝贵,因此,今天我将向大家介绍一款强大的工具——快递批量查询高手软件。这款软件能够帮助你批量查询快递动态,一...

从复杂到简单的单号查询,一键清除单号中的符号并批量查快递信息

在繁忙的商务与日常生活中,快递查询已成为不可或缺的一环。然而,面对海量的单号,逐一查询不仅耗时费力,还容易出错。现在,有了快递批量查询高手软件,一切变得简单明了。只需一键,即可搞定单号查询,一键处理单...

物流单号查询,在哪里查询快递

如果在快递单号多的情况,你还在一个个复制粘贴到官网上手动查询,是一件非常麻烦的事情。于是乎今天小编给大家分享一个新的技巧,下面一起来试试。需要哪些工具?安装一个快递批量查询高手快递单号怎么快速查询?...

取消回复欢迎 发表评论: