主从复制的方式
MySQL 5.6
开始主从复制有两种方式:基于日志(binlog
)和 基于 GTID
(全局事务标示符)。
本文只涉及基于日志 binlog
的 主从配置。
主从复制的流程
MySQL
同步操作通过 3
个线程实现,其基本步骤如下:
- 主服务器 将数据的更新记录到 二进制日志(
Binary log
)中,用于记录二进制日志事件,这一步由 主库线程 完成; - 从库 将 主库 的 二进制日志 复制到本地的 中继日志(
Relay log
),这一步由 从库I/O
线程 完成; - 从库 读取 中继日志 中的 事件,将其重放到数据中,这一步由 从库
SQL
线程 完成。
基于Docker的MySQL主从集群搭建
环境
分别在master和slave服务器中创建mysql的映射目录:
配置文件
在master服务器中创建配置
my.cnf
配置文件内容如下:在slave服务器中创建配置
my.cnf
配置文件内容如下:
执行完以上命令后,master
和slave
服务器的工作目录下应有以下文件和目录:
启动
在master服务器中启动master节点
在slave服务器中启动slave节点:
在master节点建立rep账号
执行以下命令,进入master
容器,并执行mysql
命令,连接master数据库。(默认密码已通过环境变量配置为root
)
连接数据库后,首先创建一个用于同步的账号rep
, 密码为123456
。slave
节点的ip为192.168.64.132
:
创建完rep
账户后,顺便执行show master status
命令,记录下查询到的信息。后面配置slave
时将会使用到。
配置slave
在slava
节点执行以下命令,进入slave
容器,并执行mysql
命令,连接slave数据库。(默认密码已通过环境变量配置为root
)
接着执行以下sql语句,配置slave的master:
注意,以上信息,请根据之前查询到的master status来配置。
接着,激活slave:
最后,查询slave状态:
当Slave_IO_Running
和Slave_SQL_Running
都为YES
的时候就表示主从同步设置成功了。
至此,我们的Mysql 主从集群已经启动完成。
Keepalived
介绍
Keekpalived工作原理:通过vrrp协议实现
master在工作状态会不断群发一个广播包(内涵优先参数)
其他路由收到收到广播后会和自己的优先参数作对比,如果优先参数小于自己则什么都不执行,如果优先参数大于自己则开启争抢机制
如果启动了争抢机制,他就会群发自己的优先参数,最终优先参数最小的称为master路由.
keepalived搭建
keepalived配置文件说明
keepalived启动成功后,VIP节点可以通过查看IP地址,可以看到配置的虚拟节点
Keepalived和MySQL主从组成高可用服务
按如上操作,安装好MySQL和keepalived
修改master节点的keepalived.conf
修改slave的keepalived.conf
4.在master和slave节点编写检测服务down后所要执行的脚本(添加/root/mysql/shutdown.sh)
给shutdown.sh执行权限
5.分别启动master和slave节点的mysql,以及keepalived