- MySQL架构概述
通常的MySQL架构包括单机架构、主从复制架构、MySQL集群架构等。以下为您列举了一些常见架构及其优缺点:
- 单机架构:
优点:简单,易于部署和管理。
缺点:单点故障,无法处理大量并发请求,性能瓶颈,数据备份和恢复困难。
- 主从复制架构:
优点:实现读写分离,提高性能,提供数据备份。
缺点:主节点单点故障,数据一致性问题(如延迟复制),从节点只能提供读服务。
- MySQL集群架构(如MySQL NDB Cluster Percona XtraDB Cluster):
优点:高可用性,无单点故障,良好的可扩展性,高性能。
缺点:配置和管理复杂,需要特定的硬件和网络环境,成本较高。
在高数据量读写时,MySQL主从架构和MySQL集群架构优缺点描述
Replication(主从架构)
1、存储速度快;
2、弱一致性:在A节点写入的数据,无法保证把这条数据分发到集群的其他节点上,这就有可能出现在A节点写入的数据,在B节点上查不到这条数据。 由于弱一致性的特点,我们不能在Replication上保存高价值的数据,而是适合保存低价值的数据,如日志数据、新闻、论坛帖子数据等。
MySQL集群架构PXC(Percona XtraDB Cluster)
1、存储速度稍慢
2、强一致性:能保证数据同步的强一致性;在集群的A节点写入的数据,PXC方案一定会保证这条数据成功的同步到数据库集群的其他节点上。所以,PXC方案适合保存高价值的数据,如订单、账户、财务数据等等。
本文重点时讲述PXC(percona XtraDB Cluster)docker 方式部署安装
- MySQL集群PXC概述
Percona XtraDB Cluster (简称 PXC) 是 Percona 公司开源的实现 MySQL 高可用的解决方案。它将 Percona Server 和 Percona XtraBackup 与 Galera 库集成,以实现多主同步复制。和 MySQL 传统的异步复制相比,它能够保证数据的强一致性,在任何时刻集群中任意节点上的数据状态都是完全一致的,并且整个架构实现了去中心化,所有节点都是对等的,即允许你在任意节点上进行写入和读取,集群会把数据状态同步至其他所有节点。但目前 PXC 集群只支持 InnoDB 存储引擎,并具有以下限制:
添加新节点时,必须从现有节点之一复制完整数据集。如果是 100GB,则复制 100GB。为了减少网络开销,建议在搭建集群前使用备份的方式将所有节点初始的数据状态调整至一致。
不支持 LOCK TABLES ,在多主设置的情况下也不支持 UNLOCK TABLES。不支持锁定功能,如 GET_LOCK(),RELEASE_LOCK() 等。
由于可能在提交时回滚,因此也不支持 XA 事务 (分布式事务) 。
所有表必须具有主键。
由于节点是对等的,所以整个集群的写吞吐量受限于性能最差的节点,如果一个节点变慢,则整个群集都会变慢。因此应该保证所有节点的硬件配置一致,并避免单个节点超负载运行。
允许的最大事务大小由 wsrep_max_ws_rows 和 wsrep_max_ws_size 参数共同定义,因此超大型事务会被拆分为一系列小型事务,如加载大数据集 LOAD DATA INFILE。
由于在集群级别采用乐观锁进行并发控制,所以事务在 COMMIT 阶段仍然有被中止的可能。如两个事务在不同的集群节点上提交对相同的行的写入,此时只有其中一个可以成功提交,另一个将被中止。
虽然 PXC 集群存在以上限制,但就目前而言,它仍然是解决数据一致性和高可用性的最好方案
- Docker方式部署PXC集群
直接上干货,docker 方式部署pxc 5.7.21
注意:5.7.21版本对应的MySQL5.7.21 Percona XtraBackup cluster 中MySQL使用的稳定搬开源MySQL版本。
1、PXC版本pull获取
docker pull percona/percona-xtradb-cluster:5.7.21
由于名字太长不方便我们直接tag它为pxc
docker tag percona/percona-xtradb-cluster:5.7.21 pxc:5.7.21
2 通常我们dockers是在172.17网段,为了让数据库集群在同一网段我们创建一个专属网段
创建 network
docker network create --subnet=172.18.0.0/24 net1
docker network inspect net1 #查看网络信息
为了集群数据库数据持久化,我们采用docker卷形式,创建 volume 容器持久化
集群最小节点是三个,我们创建三个docker卷。
docker volume create --name v1
docker volume create --name v2
docker volume create --name v3
volume 信息查询 docker volume inspect v1
volume 想修改路径,可以参考以下方式修改,完成后重启 docker
编辑 /etc/docker/daemon.json 文件修改docker默认存储路径
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "/yourpach/docker-data/docker" #docker 默认路径
}
独立网络和磁盘卷都创建好后我们开始集群搭建
pxc 集群创建 3节点为例,下面三条命令根据自己实际情况修改网络IP,及自定义密码即可,一次执行。
注意需要等容器启动后可以连接到数据库后再进行一条命令执行。
1:docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -v v1:/var/lib/mysql --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc5.7.21
2:docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc5.7.21
3:docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc5.7.21
注:以上创建需要一个个创建,依次完成。
- 集群验证
完成后集群信息查询
登录任意一个节点进入mysql执行下面命令
show global status like '%wsrep_cluster%';
show global status like '%wsrep_ready%';
如下图所示:
创建test库测试
create database pxc;
use pxc;
create table test(id int primary key auto_increment,name varchar(20));
insert into test(name) values('zhang'),('li'),('wang');
查看其他数据库是否都有以上信息。
至此PXC5.7.1完成搭建。
生产环境中使用我们可以分别采用三台主机,进行一次完成以上步骤即可。
注意:如果使用三台主机,就不需要创建新network了。
三台主机需要做好防火墙设置,或者关闭防火墙,关闭selinux