防伪码:明日复明日,明日何其多。
生产环境中一台mysql主机存在单点故障,所以我们要确保mysql的高可用性,即两台MySQL
服务器如果其中有一台 MySQL 服务器挂掉后,另外一台能立马接替其进行工作。
MySQL 的高可用方案一般有如下几种:
keepalived+双主,MHA,PXC,MMM,Heartbeat+DRBD 等,比较常用的是 keepalived+双主,
MHA 和 PXC。
本节主要介绍了利用 keepalived 实现 MySQL 数据库 的高可用。
Keepalived+mysql双主来实现MySQL-HA,我们必须保证两台MySQL数据库的数据完全一样,
基本思路是两台 MySQL 互为主从关系(双主),通过 Keepalived 配置虚拟 IP,实现当其中的一
台 MySQL 数据库宕机后,应用能够自动切换到另外一台 MySQL数据库,保证系统的高可用。
拓扑环境
OS:centos6.5 x86_64
Mysql 版本:mysql 5.5.38
Keepalived: keepalived-1.2.20
Mysql-vip:192.168.12.1
Mysql-master1:192.168.12.128
Mysql-master2:192.168.12.129
一、配置两台 mysql 主主同步
该过程的第一部分就是 master 记录二进制日志。在每个事务更新数据完成之前,master 在
二日志记录这些改变。MySQL 将事务写入二进制日志。在事件写入二进制日志完成后,master
通知存储引擎提交事务。
下一步就是 slave 将 master 的 binary log 拷贝到它自己的中继日志。首先,slave 开始一个工
作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。
Binlog dump process 从 master 的二进制日志中读取事件,如果已经同步了 master,它会睡
眠并等待 master 产生新的事件。I/O 线程将这些事件写入中继日志。
SQL slave thread(SQL 从线程)处理该过程的最后一步。SQL 线程从中继日志读取事件,并
重放其中的事件而更新 slave 的数据,使其与 master 中的数据一致。只要该线程与 I/O 线程
保持一致,中继日志通常会位于 OS 的缓存中,所以中继日志的开销很小。
主主同步就是两台机器互为主从的关系,在任何一台机器上写入都会同步。
若 mysql 主机开启了防火墙,需要关闭防火墙或创建规则。
1、修改 MySQL 配置文件
两台 MySQL 均要开启 binlog 日志功能,开启方法:在 MySQL 配置文件[MySQLd]段中加上
log-bin=MySQL-bin 选项,两台 MySQL 的 server-ID 不能一样,默认情况下两台 MySQL 的
serverID 都是 1,需将其中一台修改为 2 即可。
master1 中有关复制的配置如下:
log-bin = mysql-bin
binlog_format = mixed
server-id = 1
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
auto-increment-increment = 2
auto-increment-offset = 1
重启 mysqld 服务
#service mysqld restart
master2 中有关复制的配置如下:
log-bin = mysql-bin
binlog_format = mixed
server-id = 2
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
auto-increment-increment = 2
auto-increment-offset = 2
重启 mysqld 服务
#service mysqld restart
注:master1 和 master2 只有 server-id 不同和 auto-increment-offset 不同。
mysql 中有自增长字段,在做数据库的主主同步时需要设置自增长的两个相关配置:
auto_increment_offset 和 auto_increment_increment。
auto-increment-increment 表示自增长字段每次递增的量,其默认值是 1。它的值应设为整个
结构中服务器的总数,本案例用到两台服务器,所以值设为 2。
auto-increment-offset 是用来设定数据库中自动增长的起点(即初始值),因为这两能服务器都
设定了一次自动增长值 2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步
时出现主键冲突,
注:可以在 my.cnf 文件中添加“binlog_do_db=数据库名”配置项(可以添加多个)来指定
要同步的数据库
2、将 master1 设为 master2 的主服务器
在 master1 主机上创建授权账户,允许在 master2(192.168.1.102)主机上连接
查看 master1 的当前 binlog 状态信息