Mysql架构系列——生产常用的高可用部署模式介绍

本文介绍了MySQL的几种高可用模式,包括GaleraCluster的多主集群、主从/主主复制、MHA的自动化故障转移和MGR的状态机复制技术。此外,还提到了PerconaServer和PerconaXtraDBCluster的增强可用性解决方案以及Keepalived在VIP管理中的应用。
摘要由CSDN通过智能技术生成

模式

高可用模式

Galera Cluster是由Codership开发的MySQL多主集群,包含在MariaDB中,同时支持Percona xtradb、MySQL,是一个易于使用的高可用解决方案,在数据完整性、可扩展性及高性能方面都有可接受的表现。

将会基于Galera Cluster安装到三个服务器上,每个节点都支持读写操作,并且在写操作之后会同步到另外两个节点。
在这里插入图片描述

主从模式

主从复制模式可以缓解单服务器的压力,将写操作给主服务器,读操作给从服务器,从服务器可以部署多台,分摊压力。因为在一个应用中,读的操作肯定是大于写的操作。

将会安装到两个服务器上,其中第一个服务器为主节点,主节点支持读写操作,从节点只允许读操作,主节点在写操作之后会同步到从节点(如果强行在从节点上进行写操作,可能会导致主从同步失败)
在这里插入图片描述

主主模式

将会安装到两个服务器上,两个节点都支持读写操作,并且在写操作之后会同步到另一节点。

主主模式和主从模式的主要区别就在于两个节点都支持写入操作。一定程度上可以保证当主库不可用时,可以极快的切换到另一台主库上。两库之间可以采用keepalived等方案对外使用VIP提供服务。
在这里插入图片描述

MHA模式

MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL主从复制架构提供了 automating master failover (自动化主故障转移)功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。
 
MySQL和MHA—Node将会同时安装到三台服务器上,且在第三台服务器上还会安装MHA-manager(要求该服务器已经安装gcc);其中第一台服务器为MySQL主节点,其余两台服务器为从节点。因为MHA负责在主节点故障时自动切换,请谨慎通过SEE进行启停MySQL节点操作。
在这里插入图片描述

MGR模式

MGR正是Mysql提供的状态机复制技术。在MGR中每个服务器都能看到其他组节点的状态,在MGR中称之为视图(view),MGR内置group membership service,为每个节点提供一致的视图,节点的离开、加入都会触发视图的改变,而因为网络异常的原因退出的节点,也会有相应的故障检测机制来发现。

MGR的一个重要特点是对于要提交的事务,组中的大多数必须在全局事务序列中约定给定交易的顺序,决定提交或中止事务是由每个服务器单独完成的,MGR保证所有的服务器都做出相同的决定。

所有这些功能都依赖于底层的节点间通信和协调算法。在Mysql中被称为Group Communication System (GCS),它提供了故障检测机制、组成员服务以及安全且完全有序的消息传递,其底层基于paxos算法。

安装到3台服务器上,VIP支持读写操作,写操作会自动同步到其他两个从节点,主节点挂了会选举新的主节点,此时VIP会漂移到新的主节点上
在这里插入图片描述

PMS模式

Percona Server for MySQL 是任何 MySQL 数据库的免费可用、完全兼容、增强和开源的直接替代品。它提供了卓越和优化的性能、更高的可扩展性和可用性、增强的备份、增强的可见性和检测。

Percona XtraDB Cluster 是 MySQL 的完全开源高可用性解决方案。它将Percona Server for MySQL和Percona XtraBackup与Galera库集成在一起,以实现同步多源复制。

基于Keepalived生成VIP的Percona8主从模式;VIP默认在主节点上,若主节点挂了,VIP自动飘移到从节点,从节点支持写操作。

在这里插入图片描述

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 Kubernetes 中,可以使用 StatefulSet 来部署 MySQL 高可用。 1. 创建 PVC 首先需要创建一个 PersistentVolumeClaim(PVC) 用于存储 MySQL 数据。可以使用下面的 YAML 文件创建一个名为 mysql-pvc 的 PVC: ``` kind: PersistentVolumeClaim apiVersion: v1 metadata: name: mysql-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi ``` 2. 部署 StatefulSet 接下来需要创建一个 StatefulSet 来运行 MySQL 实例。可以使用下面的 YAML 文件创建一个名为 mysql-statefulset 的 StatefulSet: ``` apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql-statefulset spec: serviceName: mysql replicas: 3 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 env: - name: MYSQL_ROOT_PASSWORD value: "password" ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumeClaimTemplates: - metadata: name: mysql-persistent-storage spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 10Gi ``` 在这个 YAML 文件中,我们指定了 StatefulSet 的副本数为 3,使用了 MySQL 5.7 的官方镜像,并且在容器中挂载了之前创建的 PVC。 3. 部署 Headless Service 最后需要创建一个 Headless Service 来提供 DNS 解析服务。可以使用下面的 YAML 文件创建一个名为 mysql 的 Headless Service: ``` kind: Service apiVersion: v1 metadata: name: mysql spec: clusterIP: None selector: app: mysql ports: - name: mysql port: 3306 targetPort: 3306 ``` 在这个 YAML 文件中,我们指定了这个 Service 的 clusterIP 为 None,使其成为 Headless Service。同时指定了 Service 的端口为 3306,与 MySQL 的默认端口一致。 部署完成后,可以使用 kubectl get pods 查看 Pod 的状态,使用 kubectl get svc 查看 Service 的状态,使用 kubectl get statefulset 查看 StatefulSet 的状态,以及使用 kubectl get pvc 查看 PVC 的状态。 需要注意的是,使用 StatefulSet 部署 MySQL 高可用时,需要保证每个 Pod 的 hostname 和 PersistentVolumeClaim 的名称是唯一的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吴代庄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值