LAMP架构之9——MySQL高可用切换(MHA)

目录

一、MySQL高可用切换(MHA)

1、实验环境:将上一实验中的“组复制”结构改成“一主两从”的结构。

2、在server4中安装MHA软件(server4作为MHA管理端)

3、master端和slave端安装的软件包主要是一些二进制程序/工具:

4、MHA管理端的配置文件(在server4中设置)

5、创建本机mha的配置文件及目录,并生成配置文件

 6、修改配置文件

7、脚本检查——两个脚本检查mha是否配置完成(检查通过证明环境配置成功)

8、MHA管理集群节点的master切换——手动切换

9、MHA管理集群节点的master切换——自动切换

10、MHA管理集群节点的master切换——脚本执行(VIP漂移)

本章总结:


一、MySQL高可用切换(MHA)

1、实验环境:将上一实验中的“组复制”结构改成“一主两从”的结构。

设置master:

停止mysql——>清除环境——>更改配置文件——>初始化——>启动mysql——>修改密码——>创建用户并设置密码(如下)——>查看状态

grant replication slave on *.* to repl@'%' identified by 'westos';   #添加授权并设置密码

设置slave:

配置文件更改如下(和master的配置文件大同小异)

其余步骤如上,更改完密码后的步骤有所不同。需要设置要跟随的master服务器并启动slave。

mysql> change master to master_host='172.25.254.1', master_user='repl', master_password='westos', master_auto_position=1;            #设置master信息
mysql> start slave;                                    #启动slave
mysql> show slave status\G;                            #查看slave状态

2、在server4中安装MHA软件(server4作为MHA管理端)

先下载相关的安装包,解压后安装MHA管理端软件(其他软件为依赖性),同时一起安装了。

注意:MHA在工作时要求管理端可以免密连接所有受控端,所以还需要做一个免密认证。

受控端需要安装“node”节点的软件,通过scp方式发送给所有受控端并安装。

3、master端和slave端安装的软件包主要是一些二进制程序/工具:

4、MHA管理端的配置文件(在server4中设置)

mha安装好以后,默认是没有配置文件的。可以从之前解压的那个软件包里找到模板。

如下图所示:</root/mha/mha4mysql-manager-0.58/samples/conf>下的两个配置文件的模板,一个是全局配置模板,即对集群中所有的主从结构都生效;另一个是局部配置模板,只对特定的主从结构生效。

5、创建本机mha的配置文件及目录,并生成配置文件

 6、修改配置文件</etc/mha/app1.conf>

[server default]
user=root                        #用户的远程登录用户
password=westos
ssh_user=root                    #免密认证用户身份
repl_user=repl                   #登录的数据库及密码
repl_password=westos
master_binlog_dir=/data/mysql    #源码编译的数据库位置
remote_workdir=/tmp              #远程工作路径
secondary_check_script= masterha_secondary_check -s 172.25.254.2 -s 172.25.254.3
           #指定的两个地址一般应为集群外的其他集群地址。此语句用于和受控集群失俩联时寻找的主机
ping_interval=3                  #每隔3秒钟对集群节点作一次监测,看网络状如是否健康。

# master_ip_failover_script= /script/masterha/master_ip_failover
# shutdown_script= /script/masterha/power_manager
# report_script= /script/masterha/send_report
# master_ip_online_change_script= /script/masterha/master_ip_online_change

manager_workdir=/etc/mha          #要管理的数据目录
manager_log=/etc/mha/manager.log         #日志文件

[server1]
hostname=172.25.254.1            
candidate_master=1                #设置此节点为master

[server2]
hostname=172.25.254.2
candidate_master=1                #设置此节点为备用master(只有当主节点挂了才会生效)
check_repl_delay=0                  #设置为0表示不管此节点落后主节点多少,都会等这个节点

[server3]
hostname=172.25.254.3
no_master=1                        #设置此节点只能作为slave

7、脚本检查——两个脚本检查mha是否配置完成(检查通过证明环境配置成功)

masterha_check_ssh --conf=/etc/mha/app1.conf         #检查免密是否通过

检查免密认证时是否通过,出现如下错误。由此可知,不仅MHA管理器要对节点免密访问,集群节点之间也要做到免密认证!!!

直接复制公钥和密钥。

由于之前server4和server1/2/3之间都经过免密认证,所以server4的“钥匙”和server1/2/3的“锁”是一对,因此只要将server4的“钥匙”再发放给server1/2/3就可以实现所有主机之间的免密认证。

再次运行脚本检查,检查没有错误了。

masterha_check_repl --conf=/etc/mha/app1.conf         #监测数据库主从之间的配置是否到位

错误表示,server4通过root身份远程连接节点的数据库时认证失败。这是因为mysql数据库中对远程登录的root用户身份没有授权。因此下一步需要授权访问。

 在master中添加授权(在任何节点都可以此操作)。

grant all on *.* to root@'%' identified by 'westos';        #添加授权
flush privileges;                                           #刷新

在MHA中重新检查,检查通过!!!

8、MHA管理集群节点的master切换——手动切换

情况一:当前的master正常运行时。

masterha_master_switch             
--conf=/etc/mha/app1.conf                     #读取的配置文件
--master_state=alive                          #如果现存的master活着的情况下
--new_master_host=172.25.254.2                #新master的IP
--new_master_port=3306                        #新master的端口
--orig_master_is_new_slave                    #原master变成slave
--running_updates_limit=10000                 #切换等待时间10000毫秒

执行后,一路“yes”到底。

执行过程中显示,原来的主从结构的master已经由server1转换为server2了

 检查节点状态

 情况二:当前的master出现故障时。

先停止上一步中server2设置的master。

masterha_master_switch 
--master_state=dead                             #当现存的msater挂掉时
--conf=/etc/mha/app1.conf                       #mha的配置文件
--dead_master_host=172.25.254.2                 #挂掉的master节点IP
--dead_master_port=3306                         #挂掉节点的端口
--new_master_host=172.25.254.1                  #新的master节点IP
--new_master_port=3306                          #新的master节点的端口
--ignore_last_failover                          #忽略最近的一次错误连接

 执行过程中显示,原来的主从结构的master已经故障了,且新的master转换为了server1

 检查节点状态

重新启用节点server2,启用后会自动连接当前的master

9、MHA管理集群节点的master切换——自动切换

第一步:用管理命令将读取配置文件并打入后台运行

masterha_manager --conf=/etc/mha/app1.conf  &

查看进程,masterha_manager进程已在后台运行,意味着正在监控集群中的节点。

监控的日志会存放在</etc/mha/manager.log>中。

第二步:关闭master节点并测试MHA性能

关闭master节点的mysql服务,MHA端会自动有反应

注意:上一步中执行完<masterha_manager>命令后,会在配置文件目录下生成一个“锁定文件”<app1.failover.complete>,这个“锁定文件”会影响自动切换,因此每次用完以后都要删除。

 下图表示:监控到master节点挂掉以后,已经重新切换到其他节点作为master了。同时此进程生效一次后就消失了,避免了频 繁切换master节点的问题。

查看日志</etc/mha/manager.conf>,日志中显示master节点已经从server1切换到server2上。

检查节点状态,在server2中已经查不到slave状态了,但是有master状态;server3中查看slave状态,其指向的master是server2.

10、MHA管理集群节点的master切换——脚本执行(VIP漂移)

因为master的IP如果发生改变,会对用户造成影响。因此需要设定VIP(虚拟IP),无论master如何改变,VIP始终指向最新的master。

在刚开始的哪个压缩包中有脚本的示例。

其中<master_ip_failover>是自动切换脚本,<master_ip_online_change>是手动切换脚本;<power_manager>是服务器电源管理脚本,<send_report>是节点故障时发送报警的脚本。

第一步:更改mha的配置文件

之前的配置文件中注释掉了这些脚本的路径,需要执行脚本时就把它们重新打开。脚本放在那里都可以,这里的脚本路径要写对。

第二步:下载脚本并添加可执行权限

自动切换的脚本:

脚本内容表示的是VIP地址设置为<172.25.254.100>,通过的网卡为<eth0>。

 手动切换的脚本:

脚本内容表示的是VIP地址设置为<172.25.254.100>,通过的网卡为<eth0>。

手动切换脚本:

第一步:向server2中添加虚拟IP 

由之前的实验可得,master节点已经切换到server2了。所以可以向server2中添加虚拟IP。

第二步:在客户端中测试

客户端通过虚拟IP可以访问mysql数据库

 第三步:手动切换master到server1

切换完成后,server2和server3的都成为了slave节点,都跟随server1.

第四步:客户端查看

客户端再次查看时,会短期报错,然后重新连接。重连结果也会正常访问mysql。

这是因为VIP已经从server2切换到了server1中

自动切换脚本:

第一步:先在server2或1中添加VIP

第二步:执行自动切换的命令并打入后台,命令如下:

masterha_manager --conf=/etc/mha/app1.conf &

 第三步:关闭目前的master

在上一步实验中,master已经切换到了server1中。因此本次要关闭server的master(产生master节点故障)。

第四步:查看MHA

由于MHA中存在自动执行的命令,并在后台运行,因此server1节点挂掉后,会自动切换到server2节点。查看日志可已看出,master已经成功切换到server2节点。 

第五步:查看server2状态

上一步master自动切换到server2以后,查看server2状态。不用再作其他配置,已经可以作为正常的master节点了。server3也正常指向server2节点作为master了。

第六步:查看VIP

此是VIP已经自动从server1漂移到了server2中。 

本章总结:

1、查询mysql中的模块/插件:

show plugins;

2、查询数据库中的线程

show processlist;          #显示数据库线程

 以下展现出来的两个线程,第一个是SQL线程,第二个是IO线程

 3、集群分类

MySQL异步复制:

MySQL半同步复制 :

 MySQL组复制协议:

 4、mysql组复制时的参数

 5、mysql的配置文件参数

永久设置:</etc.my.cnf>

group_replication_bootstrap_group=OFF;

临时设置:<mysql>内部

SET GLOBAL group_replication_bootstrap_group=OFF;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值