MHA高可用配置及故障切换(数据库管理与高可用)

(1)MHA解释

MHA(Master High Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。

MHA 的出现就是解决MySQL 单点的问题。

MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。

MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。

(2)MHA 组成部分

MHA Node(数据节点)

MHA Node 运行在每台 MySQL 服务器上。

MHA Manager(管理节点)

MHA Manager 可以单独部署在一台独立的机器上,管理多个 master-slave 集群;也可以部署在一台 slave 节点上。

MHA Manager 会定时探测集群中的 master 节点。当 master 出现故障时,它可以自动将最新数据的 slave

提升为新的 master, 然后将所有其他的 slave 重新指向新的 master。整个故障转移过程对应用程序完全透明。

(3)MHA 的优点

自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失

使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性

目前MHA支持一主多从架构,最少三台服务,即一主两从。

MHA由两部分构成:MHA Manager(管理节点)和MHA Node(数据节点)。在主从复制的MySQL集群中,MHA Manager负责监控主节点的健康状况,当主节点出现故障时,MHA Manager会自动选举出一个从节点升级为主节点,并协调其余从节点重新连接至新的主节点,实现无缝的故障转移。

实验环境:

五台机器;101 102 103 104 105

先把前面四个主机同步会话;开始实验前的配置;

再使用yum的方式安装mariadb-server mysql;

再去修改hosts文件;

vim /etc/hosts

把要作为Manager的主机101,断开会话同步功能;针对后面三个主机进行配置;

修改mysql的配置文件;vim /etc/my.cnf

注:relay-log-purge=0表示当SQL线程读取完中继日志里的条目信息之后,这个中继日志文件依然会保留,不会被清理掉,

relay-log-purge=1表示当SQL线程执行完中继日志里信息的重放之后,它会自动的把中继日志文件给清理掉,

如果说想让某一个从节点将来成为主,那就要长期的保存所有的中继日志文件。

修改完了之后,把同步会话关闭掉;然后单独修改103和104的server-id;

103:

104:

然后再开启同步会话功能,101除外;

然后启动三个主机的服务;

紧接着修改mysql的密码;

登录进去开始授权;

为三个主机授权;

grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by '123456';

再给Mha程序设置权限;

grant all privileges on *.* to 'mha'@'192.168.10.%' identified by 'manager';

再以名称进行授权;

然后更新;

只开启103和104的会话同步;开始构建最基础的主从架构;

先查询出102的状态;以102为master;103和104作为slave;

再开启该服务;及查询状态;

然后安装mha相应的包;将这个包拉到每一个服务器中;

之后再把yum仓库换成阿里的或者其他的;

复制以下语句到各个服务器中;

rm -rf /etc/yum.repos.d/*

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

yum clean all

再安装MHA所需的依赖环境;

yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN

注:MHA是用perl语言写的,

perl-DBD-MySQL   //perl针对于mysql数据库 perl-Config-Tiny    //从配置文件中提拿其中的值 perl-Log-Dispatch    //log-日志 perl-Parallel-ForkManager      //多线程管理 perl-ExtUtils-CBuilder       //扩展工具 perl-ExtUtils-MakeMaker perl-CPAN        //cpan perl中的数据库

解压node包;然后cd进入到解压目录下;

tar zxvf mha4mysql-node-0.57.tar.gz

然后进行配置;

perl Makefile.PL

然后编译及编译后安装;

make && make install

然后生成为每个服务器生成密钥对;实现远程登录无需密码验证的需求;

ssh-keygen -t rsa

然后关闭会话同步;

101的公钥给到102、103、104

102的公钥给到103、104

103的公钥给到102、104

104的公钥给到102、103

按照需求逐个主机进行发送公钥;

ssh-copy-id 192.168.10.102

然后将管理工具上传到manager服务器上;

.

对该软件包进行解压;

然后进入到解压目录,配置;编译;编译后安装;

然后把manager提供的脚本拷贝到/usr/local/bin下;

然后修改将该文件替换成写好的脚本;故障切换时用到的脚本;

将该文件删除掉;拉进入写好的脚本;

此时会发现该文件没有执行权;为该文件赋予执行权;

然后进入到/etc下;创建一个目录,

然后再次进入到manager提供的解压目录找一个配置文件拷贝到刚才创建的目录下;

然后打开该文件;首先将该文件清空;然后将写好的语句粘贴进入;

[server default]

manager_workdir=/var/log/masterha/app1

manager_log=/var/log/masterha/app1/manager.log

master_binlog_dir=/usr/local/mysql/data 

#master_binlog_dir=/var/lib/mysql

master_ip_failover_script= /usr/local/bin/master_ip_failover

master_ip_online_change_script= /usr/local/bin/master_ip_online_change

user=mha

password=manager

ping_interval=1

remote_workdir=/tmp

repl_user=myslave

repl_password=123456

secondary_check_script= /usr/local/bin/masterha_secondary_check -s 192.168.10.103 -s 192.168.10.104

shutdown_script=""

ssh_user=root

[server1]

hostname=192.168.10.102

port=3306

[server2]

hostname=192.168.10.103

port=3306

candidate_master=1

check_repl_delay=0

[server3]

hostname=192.168.10.104

port=3306

然后创建出文件中指定的目录;

然后修改该文件中的文件路径;由于是yum的方式安装的因此它二进制日志文件在/var/lib/mysql中;

然后保存退出;

开始测试;使用mha提供的脚本进行测试;

对指定文件中的所有参数进行测试;

最后应该提示测试全部通过的语句;

再使用提供的脚本测试主从复制架构是否搭建正确;

最后应该提示以下语句;

再创建vip文件中指定的IP地址;设置到主服务器上的ens33网卡上的子接口上;

会用该IP地址访问mysql服务;

然后启动manager;在manager主机上;也就是101;

nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover /var/log/masterha/app1/manager.log 2>&1 &

然后再使用提供的脚本查看ha的状态;

masterha_check_status --conf=/etc/masterha/app1.cnf

然后查看manager的日志;

masterha_check_status --conf=/etc/masterha/app1.cnf

然后打开准备好的客户端105;安装mysql的客户端进行故障模拟;试验是否能做到主备切换;

首先连接集群的地址;即192.168.10.200;

然后模拟故障;把主服务器关掉;

然后进入到manager服务器查看日志文件;

tailf /var/log/masterha/app1/manager.log

可以看出102服务器已经被103替换下去了;成为了新的master;slave104的master也变成了103;

此时master是103;但是如果102服务器修好了,且现在只有只读属性;如果要重新加入到主从架构中去;后续的工作还要继续下去;

首先查看master103的状态;

然后进入到102中;把mariadb服务给开启;

然后进入到mysql中修改配置信息;

change master to master_host='192.168.10.103',master_user='myslave',master_password='123456',master_log_file='master-bin.000003',master_log_pos=1271;

然后开启slave的身份;查看slave的状态;

再去设置只读属性;

set global read_only=1;

然后进入到master103中关闭slave的身份;即关闭slave的进程;

再重置slave的信息;

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值