gtid mysql failover_Keepalived + MySQLfailover + GTIDs 高可用

架构图

10.1.1.207    mysql master + keepalived

10.1.1.206    mysql slave ( backup master ) + keepalived

10.1.1.208    mysql slave

10.1.1.210    mysqlfailover ( monitor )

10.1.1.211    VIP

3c07d363b14925318da39dd76028b34e.png

mysql-failover

配置基于GTIDs的主从

本实验在GTIDs主从的基础上进行,GTIDs配置步骤省略。但不懂的可以参考如下步骤配置 比较简单

1. 修改Master配置文件

vim /etc/my.cnf

添加以下内容

gtid-mode=on                    -- 启动gtid模式

enforce_gtid_consistency        -- 强制gtid一致性 5.6.9之前的版本为disable-gtid-unsafe-statement

log-bin                            -- master和slave都必须启用binlog

log-slave-updates                -- 必须使用

1

2

3

4

5

6

vim /etc/my.cnf

添加以下内容

gtid-mode=on                    -- 启动gtid模式

enforce_gtid_consistency        -- 强制gtid一致性 5.6.9之前的版本为disable-gtid-unsafe-statement

log-bin                            -- master和slave都必须启用binlog

log-slave-updates                -- 必须使用

2. 启动所有MySQL

-- 先启动Master 再启动slave

service mysql start

3.配置slave

-- slave下执行

change master to

master_host='master_ip',

master_port=3306,

master_user='repl',

master_password='redhat',

master_auto_position=1;            -- 表示基于GTIDs的主从 MySQL自动判断从哪开始同步 基于GTIDs的主从已经不需要手动指定编号了

start slave;                    -- 启动slave;

1

2

3

4

5

6

7

8

change master to

master_host='master_ip',

master_port=3306,

master_user='repl',

master_password='redhat',

master_auto_position=1;            -- 表示基于GTIDs的主从 MySQL自动判断从哪开始同步 基于GTIDs的主从已经不需要手动指定编号了

start slave;                    -- 启动slave;

开启master与备用master之间的主从半同步

-- 情景

大家都知道,mysql5.7以前的主从经常会发生延迟(据说5.7彻底解决了主从延迟),试想一下,如果master故障了,要升slave(备用master)为master,但此slave的数据严重延迟于master,甚至是连binlog都还没读过来的那种。那么此时如果数据往这个新master上写,数据肯定会出现混乱。这可是悲剧大事。解决方法如下

-- MySQL半同步复制

开启半同步后,在master提交一个写事务之后,master会block这个事务,直到备用master确认已经接受到了该复制事件,这时master才向应用程序确认提交成功。否则超时中断半同步,直到重新满足条件开启。

在master提交事务之后,而slave未来得及接收复制事件,这时候master crash的话,应用程序会切换到slave上,并重新发起事务,这正好是我们所需要的,满足高可用的初衷。但是这里存在一个缺陷,那就是在master恢复之后,原来的事务已经提交,这时候复制会出现问题。

解决办法:在原来的master恢复之后数据重做(推荐),或者跳过重复数据错误。

-- 模块默认在MYSQL_INSTALL_PATH/lib/plugin/semisync*.so

1. 在master与备用master上开启半同步

-- 安装半同步模块和临时开启半同步 -- 在master与备用master上操作

mysql> install plugin rpl_semi_sync_master SONAME 'semisync_master.so';

mysql> install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';

1

2

mysql>install plugin rpl_semi_sync_masterSONAME 'semisync_master.so';

mysql> install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';

-- 在master上启用半同步

mysql> set global rpl_semi_sync_master_enabled = 1;          -- 开启为master角色

mysql> set global rpl_semi_sync_master_timeout = 1000;     -- 配置

1

2

mysql>set global rpl_semi_sync_master_enabled = 1;     --开启为master角色

mysql> set global rpl_semi_sync_master_timeout = 1000;  -- 配置

(rpl_semi_sync_master_timeout=1000)表示主库在某次事务中,如果等待时间超过1000毫秒,那么则降级为普通模式,不再等待备库。如果主库再次探测到,备库恢复了,则会自动再次回到Semi-sync状态。建议把半同步跑在高速网络环境中

-- 在备用master上启用半同步

mysql> stop slave;                                                                    -- 先停止主从 不然即使执行开启半同步命令也没效果

mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;         -- 开启为slave角色

mysql> start slave;

1

2

3

mysql> stop slave;                                  --先停止主从不然即使执行开启半同步命令也没效果

mysql>SET GLOBAL rpl_semi_sync_slave_enabled = 1;    --开启为slave角色

mysql> start slave;

-- 修改 master与备用master 配置文件 下次启动生效

vim /etc/my.cnf

添加一下内容

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000

rpl_semi_sync_slave_enabled=1

1

2

3

4

5

vim/etc/my.cnf

添加一下内容

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000

rpl_semi_sync_slave_enabled=1

-- 查看半同步状态

show status like '%semi_sync%';

master上

Rpl_semi_sync_master_clients               | 1                                 -- 有一个slave(备用master)开启半同步

Rpl_semi_sync_master_status                | ON                             -- 已开启成功

备用master上

Rpl_semi_sync_slave_status                 | ON                                -- 已开启成功

1

2

3

4

5

6

7

8

show status like '%semi_sync%';

master上

Rpl_semi_sync_master_clients               | 1                --有一个slave(备用master)开启半同步

Rpl_semi_sync_master_status                | ON              --已开启成功

备用master上

Rpl_semi_sync_slave_status                 | ON                --已开启成功

安装配置MySQLfailover

在monitor监控机上

-- 安装 使用mysql官方yum源安装

yum install -y mysql-utilities.noarch                               -- 安装mysqlfailover

yum install -y mysql                                                         -- 安装mysql客户端

-- 在所有mysql上给mysqlfailover监控机授权 -- 在master上操作即可 因为会自动同步

mysal> grant create,insert,drop,select,super,replication slave,reload on *.* to 'replm'@'10.1.1.210' identified by 'replm' with grant option;

1

mysal>grant create,insert,drop,select,super,replication slave,reload on *.* to 'replm'@'10.1.1.210' identified by 'replm' with grant option;

-- 修改所有mysql配置

vim /etc/my.cnf

添加以下配置

report_host=10.1.1.210                                                        -- 只读参数 指定报告主机为10.1.1.210(mysqlfailover monitor)

master_info_repository=TABLE                                          -- 把master.info的信息 保存到数据库里面 mysqlfailover必须 原本默认保存到文件

relay_log_info_repository=TABLE                                       -- 把relay_log信息保存到数据库里面 mysqlfailover必须 原本默认保存到文件

1

2

3

4

5

vim/etc/my.cnf

添加以下配置

report_host=10.1.1.210                            --只读参数指定报告主机为10.1.1.210(m

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值