20221024mysql集群搭建

背景

有了基础的虚拟化环境,打算从头搭建一个分布式应用环境,学习学习各种集群的搭建过程。在公司这些都是别的部门弄好了直接用的,包括高可用、灾备等特性都有值得我研究学习的地方。

集群方式选择

mysql的集群方法

传统方法是基于源节点二进制日志重放事件,并且要求日志文件和位置在源和副本之间是同步的

更新一点的方法是基于 global transaction identifiers (GTIDs),GTIDs是事务性的,不需要依赖日志文件和位置就能工作,这极大的简化了许多常见的副本任务.使用GTIDs的方法保证了源和副本之间的一致性,所有的事务只要在源上提交了就一定会被应用到副本上。

基于日志的方法

源节点个每个副本都应该被设置唯一的ID (using the server_id system variable),顺带一提,每个副本必须设置源节点的host name, log file文件名,文件内的偏移量

这些细节可以通过mysql的session语句控制。MySQL 8.0.23开始是 CHANGE REPLICATION SOURCE TO ,之前是 CHANGE MASTER TO . 这些细节被存储在副本连接的元数据存储中 (see Section 17.2.4, “Relay Log and Replication Metadata Repositories”).

这里有多种不同的方法可以设置副本, 使用某个具体的方法取决于你如何设置以及你是否在源节点已经有想要复制的数据

想要安装多实例的 MySQL, 你可以使用 InnoDB Cluster ,它可以让你使用 MySQL Shell 轻易的管理mysql服务器集群. InnoDB Cluster 用程序化的方式提供了环境包装了MySQL Group Replication,它可以让你轻易的部署一个高可用的Mysql集群。另外 InnoDB Cluster的接口可以无缝集成 MySQL Router, 它可以让你的程序无需编写降级逻辑的情况下连接集群.  对于不需要高可用的相似场景可以使用 InnoDB ReplicaSet. 这里是安装过程here.

 

这里是一些通用任务来改概括所有步骤:

1.在源节点上开启binlog并配置unique server ID Section 17.1.2.1, “Setting the Replication Source Configuration”.

可以考虑使用 –init-file 执行SET GLOBAL server_id = 2;

查看这个值

2.在每个副本上配置a unique server ID.  Section 17.1.2.2, “Setting the Replica Configuration”.

重复1

3.可选,为每个副本创建不同的用户用于鉴权 Section 17.1.2.3, “Creating a User for Replication”.

4.在创建快照或重启副本进程之前,在记录源节点上的binlog当前位置. 当配置你副本节点时你需要这个信息 Section 17.1.2.4, “Obtaining the Replication Source Binary Log Coordinates

在源节点上执行

记录File | Position

5.如果你在源节点上已经有数据了并且想要同步到副本上,你需要创建数据的快照来复制数据到副本. 你所使用的存储引擎会决定你如何创建快照

当你使用 MyISAM时,你必须在源上停止处理语句来获得read-lock, 在允许源节点继续执行语句之前获取当前binlog的坐标并导出数据。 Section 17.1.2.4, “Obtaining the Replication Source Binary Log Coordinates”.

当你使用 InnoDB, 你不需要获取read-lock,一个够长的事务足够可以传输数据的快照(这么翻译感觉怪怪的,原文: you do not need a read-lock and a transaction that is long enough to transfer the data snapshot is sufficient.) Section 15.19, “InnoDB and MySQL Replication”.

6.在副本上设置连接的源节点,例如host name,、登录凭证、binlog文件名和位置 Section 17.1.2.7, “Setting the Source Configuration on the Replica”.

在副本节点上执行

7.对源和副本实施特定的安全措施 Section 17.3, “Replication Security”.

基础配置完成后,选择你的场景:

在管理MySQL集群之前,阅读完整的章节并尝试这里所有的语句,同时熟悉副本的启动选项

Section 13.4.1, “SQL Statements for Controlling Source Servers,

Section 13.4.2, “SQL Statements for Controlling Replica Servers.

Section 17.1.6, “Replication and Binary Logging Options and Variables.

基于GTIDs的方法

TODO

MRG搭建

注意,任意节点脱离group后需要手动执行start group_replication重新加入,执行前的数据保留在离开group时的状态

例如mysql2重新加入group变化如下

尝试mysql shell自动配置

https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-innodb-cluster.html

 

参考文档

https://dev.mysql.com/doc/refman/8.0/en/replication.html

https://dev.mysql.com/doc/refman/8.0/en/group-replication-deploying-in-single-primary-mode.html

https://ethendev.github.io/2018/12/17/JPA-MySQL-read-write-separation/

https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-innodb-cluster.html

0 Comments
Leave a Reply