设为首页 加入收藏

TOP

MySQL高可用系列之MHA(一)(八)
2015-07-24 12:09:16 来源: 作者: 【 】 浏览:91
Tags:MySQL 可用 系列 MHA
host指向新的Master(node2)

mysql> use test;
Database changed
mysql> select * from student;
+------+--------+
| s_id | s_name |
+------+--------+
| 1 | aaa |
+------+--------+
1 row in set (0.00 sec)

mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.3.28 (这里指向了新的master:node2)
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000005
Read_Master_Log_Pos: 520069
Relay_Log_File: mysql-relay-bin.000002
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 520069
Relay_Log_Space: 409
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 28
1 row in set (0.00 sec)

从中可以看到,当MHA监控到Master实例故障时,自动恢复了Master与Slave以及Slaves之间的差异日志,然后从两个Slave实例中选择node2充当新的Master,并将另一个Slave实例node2重新指向到新的Master实例node2开始复制,组成新的MySQL Replication结构。而原来的Master则被排除在新的MySQL Replication结构之外,即使其恢复正常,也不会被自动加入。

4.手动Master故障切换

开启MHA后,自动启动监控功能,当监测到Master故障时,自动实现切换。
另外,在没有开启MHA的情况下,我们还可以执行交互式的手动切换、非交互式的自动切换,及在线切换Master到不同主机等操作,这些都是通过masterha_master_switch命令工具实现的。
该命令用法如下:

[root@mmm appl]# /usr/bin/masterha_master_switch --help
Usage:
# For master failover

masterha_master_switch --master_state=dead
--global_conf=/etc/masterha_default.cnf
--conf=/usr/local/masterha/conf/app1.cnf --dead_master_host=host1

# For online master switch

masterha_master_switch --master_state=alive
--global_conf=/etc/masterha_default.cnf
--conf=/usr/local/masterha/conf/app1.cnf

See online reference
(http://code.google.com/p/mysql-master-ha/wiki/masterha_master_switch)
for details.

从中可以看到,该命令有# For master failover、# For online master switch两个用法,区别在于前者需要指定Master的状态为dead,后者需要指定Master的状态为alive。

下面通过两个示例来体会一下:

》 For master failover
现在的Master为node2,手动停止mysqld实例
[root@node2 ~]# service mysql stop
Shutting down MySQL... [ OK ]
下面手动执行Master故障切换,这个切换过程是交互式的,期间需要输入指令来确认;另外,由于MHA没有启动,也就不会自动监控Master实例状态,所以需要指定master_state为dead,并且指定dead master的host、ip、port等信息,如下:

[root@mmm ~]# /usr/bin/masterha_master_switch --master_state=dead --conf=/etc/appl.cnf --dead_master_host=node2

》 For online master switch
这个功能是指Master实例运行正常,但出于运维工作(比如:更换硬件等),需要将其上的Master切换到另一主机上。
切换过程都一样,期间也需要交互,只不过指定master_state=alive即可,如下:
# /usr/bin/masterha_master_switch --master_state=alive --conf=/etc/appl.cnf
通过这两个示例,我们知道,不管是自动Master故障切换,还是手动交互式Master切换,以及在线切换Master到另外主机,其切换过程和步骤都是一样的。

至此MHA成功搭建完毕,该小节告一段落,通过前面的学习,我们了解了MHA这一高可用工具的Master故障切换功能及实现原理,但若在实际生产环境中采用它,还存在许多问题,需要进一步的改进与配置。我们先来探讨一下上面这套环境中存在的问题,及MHA提供的解决办法。

问题: 前端应用连接问题

理论上来说,后端数据库故障切换,对前端应用应该是透明的;也就是说:当Master从一台主机切换到另一台主机上时,前端应用不需要做任何额外的操作,主要体现为数据库连接串变化。

对于这个问题,通常有两种解决方案:一是引入VIP,当数据库切换时,VIP随之切换;常用的HA软件中,大多是采用VIP实现的,比如Oracle RAC,

首页 上一页 5 6 7 8 下一页 尾页 8/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇mysql数据库备份mysqldump 下一篇mysql启动和关闭外键约束的方法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: