MySQL架构

编程 · 02-22 · 125 人浏览

两台或以上数据库实例,通过二进制日志,实现数据的“同步"关系。

主从复制

实例准备:两台以上MySQL实例,server_id不同。

主库

  • 主库开启二进制日志
  • 主库建立复制用户:grant replication slave on . to repl@'10.0.0.%' identified by '123';
  • 主库备份:mysqldump -A --master-data=2 --single-transaction -R -E --triggers >/tmp/full.sql
  • 告知从库复制信息,找到复制开始起点:grep "\-- CHANGE MASTER TO" /tmp/full.sql

从库

  • 恢复到从库:mysql </tmp/full.sql
  • 从帮助中获取change master to语句进行修改:mysql> help change master to
  • 执行CHANGE MASTER TO命令
  • 从库开启专用复制线程:start slave;
  • 验证主从状态:show slave status \G

主从复制原理

文件

主库:binlog文件

从库:

  • relay-log文件:存储接收的binlog,默认存储在从库数据目录下,手工定义:relay_log_basename=/data/3307/data/relay-bin
  • master.info:连接主库信息,已经接收binlog位置点信息。默认存储在从库数据目录下,也可将配置信息写入到表中:master_info_repository = TABLE
  • relay-log.info:记录⽂件复制进度,下⼀个事件从什么位置开始。默认存储在从库数据目录下,也可以手工定义:relay_log_info_repository = TABLE

线程

主库:Binlog_dump_Thread,作用是用来接收从库请求,并将binlog投递给从库。显示正在运行线程:show processlist;

从库:

  • IO线程:请求binlog,接收binlog
  • SQL线程:回放relay日志

原理

  1. S:change master to信息写入到master.info,执行start slave;启动IO线程和SQL线程
  2. S:IO线程读取master.info信息,获取主库信息连接主库
  3. M:分配DUMP线程,专门和IO线程通信
  4. S:IO线程根据master.info记录的binlog文件名和position号,请求主库新日志
  5. M:DUMP线程接收请求,截取日志,返回给IO线程
  6. S:IO线程将收到日志存储到TCP/IP缓存,立即返回ACK给主库,主库工作完成
  7. S:IO线程将缓存数据,存储到relay-log日志文件,并更新master.info,IO线程工作结束
  8. S:SQL线程读取relay-log.info,获取上次执行到的位置点
  9. S:SQL线程向后执行新的relay-log,再次更新relay-log.info

小细节:
S:参数relay_log_purge=ON,会定期删除用用过的relay-log
M:DUMP线程会实时监控主库binlog变化,如果有新变化,发信号给从库,IO线程再请求

主从监控

主库方面:

  • show processlist;
  • show slave hosts;

从库方面:

  • show slave status \G

MHA

全称:Master High Availability,是Perl语言写的MySQL故障切换方案,故障切换时间10-30s。

MHA由node和manager组成;

  • node:所有数据库机器都要部署,master是一个node,slave也是一个node
  • manager:相当于server,会对node进行管理,配置检查,binlog和relay-log获取,执行切换任务等。可以单独部署在server上(tj),单独部署可以管理多套主从架构。也可以部署在某个slave上,如果部署在slave上,那么该slave就无法被升级为主库

部署MHA高可用框架

配置关键程序软连接:

ln -s /app/database/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
ln -s /app/database/mysql/bin/mysql /usr/bin/mysql

配置各节点互信:

rm -rf /root/.ssh
ssh-keygen
cd /root/.ssh
mv id_rsa.pub authorized_keys
scp -r /root/.ssh 10.0.0.52:/root 
scp -r /root/.ssh 10.0.0.53:/root

各节点安装Node:

yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm

安装Manager:

yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm

创建MHA专用监控管理用户:grant all privileges on . to mha@'10.0.0.%' identified by 'mha';

Atlas

Atlas中间件是由奇虎360基于MySQL官方中间件mysql-proxy二次开发实现,能够对数据库进行读写分离、分库分表配置,配合MHA架构进行高可用环境搭建有较好效果。

MyCAT

分布式架构

MySQL
Theme Jasmine by Kent Liao