MySQL5.6基于GTID同步复制,与如何实现MySQL负载均衡、读写分离。

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介:

   MySQL想必大家都不陌生,之前文章也有介绍同步复制与半同步复制,今天先来了解下什么是GTID。


GTID(global transaction ID)全局事务ID,是由服务器的UUID+一段随机数事务ID。

特性从服务器从主服务器复制过来的事务,GTID不变,也就是说一个事务在全局复制架构中的ID不变。

有什么用:

    在MySQL集群中,当Master故障时,需要从Slave中挑选一个提升为Master可以基于GTID对比其他Slave来保证数据的一致性。


MySQL主从同步如何配置数据过滤

主服务器配置:

Binlog-do-db   //指定要记录二进制日志的数据库

Binlog-ignore-db  //指定要忽略记录二进制日志的数据库


从服务器配置:

Replicate-do-table=   //指定要记录二进制日志的表

Replicate-ignore-table=  //指定要忽略记录二进制日志的表

Replicate-do-db=  //指定要记录二进制日志的数据库

Replicate-ignore-db=  //指定要忽略记录二进制日志的数据库

Replicate-wild-do-table=  //指定要记录二进制日志的表(支持通配符)

Replicate-wild-ignore-table=  //指定要忽略记录二进制日志的表(支持通配符)


实验一、配置一个基于GTID的MySQL主从复制架构。

实验环境:RHEL6.4+MySQL5.6

    Master:192.168.18.201 admin1.tuchao.com 

    Slave: 192.168.18.202 admin2.tuchao.com

安装和启动MySQL过程和之前都一样(略)


Master配置:

[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 2
datadir=/mydata
log-bin=mysql-bin
innodb_file_per_table = 1

binlog-format=ROW  //设置二进制日志格式
log-slave-updates=true //是否记录从服务器同步数据动作

gtid-mode=on //启用Gtid模式

enforce-gtid-consistency=true //是否强制GTID的一致性

master-info-repository=TABLE //master信息的记录位置

relay-log-info-repository=TABLE //中继日志信息的记录位置

sync-master-info=1
slave-parallel-workers=2 //设置从服务器复制线程数

binlog-checksum=CRC32 //设置binlog校验算法(循环冗余校验码)

master-verify-checksum=1 //设置主服务器是否校验

slave-sql-verify-checksum=1 //设置从服务器是否校验

binlog-rows-query-log_events=1
server-id       = 10
report-port=3306
report-host=admin1.tuchao.com //设置报告给哪台服务器,一般设置为本机的主机名。


Slave配置:

[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 2
datadir=/data
log-bin=mysql-bin
innodb_file_per_table = 1

binlog-format=ROW
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
server-id       = 20
report-port=3306
report-host=admin2.tuchao.com


其实master和slave配置几乎相同, 只需要修改几个参数我在上面用红色字体做了标记,如server-id ,report-host等。


在Master上授权复制权限的用户

  • grant replication slave,replication client on *.* to 'repluser'@'192.168.18.202' identified by '123456';

启动slave复制线程

  • change master to master_host='admin1.tuchao.com',master_user='repluser',master_password='123456',master_auto_position=1;

  • start slave;

查看警告信息

  • Show warnings

查看Slave状态

  • show slave status\G

wKiom1P0HVHiLPJBAAIUhlZFM00896.jpg



这时我们在Master上创建一个tuchao数据库

wKioL1P0JW3g02VTAAEQnJ5-JXE645.jpg

来到Slave查看

wKiom1P0JHbSxLPqAADMQtFQX8w645.jpg

同步成功!


实验二、使用amoeba构建MySQL集群实现负载均衡,读写分离。

    我们在192.168.18.199这台主机部署amoeba由于是java程序,要先安装jdk,然后定义JAVA_HOME环境变量,导出PATH环境变量。(略)


amoeba-mysql2.2 官网下载地址:

http://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/2.2.x/


创建需要的目录,创建链接,解压程序到目录。

mkdir /usr/local/amoeba-mysql-2.2

cd /usr/local

ln -sv amoeba-mysql-2.2 amoeba

tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba-mysql-2.2/

导出PATH环境变量

  • vim /etc/profile.d/amoeba.sh

export AMOEBA_HOME=/usr/local/amoeba
export PATH=$AMOEBA_HOME/bin:$PATH

编辑 /usr/local/amoeba/conf/dbServers.xml 

wKiom1P0Vb6xDtrhAARgaBpieF8991.jpg

wKiom1P0VdnRkXCHAAOLVFaqd9M292.jpg

编辑vim /usr/local/amoeba/conf/amoeba.xml

wKiom1P0ViCg8iAXAAPGeTIU2pA383.jpg

wKioL1P0V1rBtlbsAAP4MrsNrtU983.jpg

配置完成后保存,启动amoeba。

amoeba start

wKiom1P0WcHCh95WAAL9617TGLo629.jpg

连接amoeba

wKioL1P0WweBcx7gAALlsbOaqk8640.jpg

创建数据库,创建表,然后用tcpdump在两个节点抓包,你会发现写操作都会转发到Master。

执行select等语句凡是读操作,会发两个请求给Slave,一个给Master。

wKioL1P0XUOzYWnXAAMGibSAshs102.jpg


wKioL1P0YD7RpzZxAAK_IyJd_IM072.jpg


tcpdump 命令简单介绍

 -i 指定网卡

 -s 指定报文的长度,s0表示抓整个包。

 -nn 不要解析主机名和端口名。

 -XX 显示报文内容十六进制码,ASCII,以太网头部。

 -vv 显示详细信息。

 -A  显示数据包里的ASCII

 -w  把内容导出到指定的文件中

例子:

tcpdump -i eth0 -s0 -nn -A tcp dst port 3306 and dst host 192.168.18.202

tcpdump -i eth1 -s0 -nn -vv -A ip src 210.32.92.217 and tcp dst port 443

还可以用src 指定源地址。


这篇就写到这里了,大家自行抓包测试。




本文转自qw87112 51CTO博客,原文链接:http://blog.51cto.com/tchuairen/1542454

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
安全 关系型数据库 MySQL
如何将数据从MySQL同步到其他系统
【10月更文挑战第17天】如何将数据从MySQL同步到其他系统
2103 0
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
8月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
866 6
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
负载均衡 监控 关系型数据库
MySQL 官宣:支持读写分离了!!
【10月更文挑战第8天】MySQL的读写分离功能显著提升了数据库性能、可用性和可靠性。通过将读写操作分配至不同服务器,有效减轻单个服务器负载,提高响应速度与吞吐量,并增强系统稳定性。此外,它还支持便捷的扩展方式,可通过增加只读服务器提升读操作性能。实现读写分离的方法包括软件层面(如使用数据库中间件)和硬件层面(使用独立服务器)。使用时需注意数据一致性、负载均衡及监控管理等问题。
666 0
|
SQL 关系型数据库 MySQL
如何实现 MySQL 的读写分离?
本文介绍了 MySQL 读写分离的实现方式及其主从复制原理,解释了如何通过主从架构提升读并发能力。重点分析了主从同步延时问题及解决方案,如半同步复制、并行复制等技术手段,并结合实际案例探讨了高并发场景下的优化策略。文章还提醒开发者在编写代码时需谨慎处理插入后立即查询的情况,避免因主从延时导致的数据不一致问题。
1421 44
如何实现 MySQL 的读写分离?
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
监控 关系型数据库 MySQL
Flink CDC MySQL同步MySQL错误记录
在使用Flink CDC同步MySQL数据时,常见的错误包括连接错误、权限错误、表结构变化、数据类型不匹配、主键冲突和
655 17
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
1826 11
|
SQL 存储 关系型数据库
Mysql主从同步 清理二进制日志的技巧
Mysql主从同步 清理二进制日志的技巧
271 1

推荐镜像

更多