MySQL架构

16次阅读
没有评论

共计 2265 个字符,预计需要花费 6 分钟才能阅读完成。

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

主从复制

实例准备:两台以上 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

分布式架构

正文完
post-qrcode
 0
三毛
版权声明:本站原创文章,由 三毛 于2024-02-22发表,共计2265字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)