【MySQL】数据库之MHA高可用

这篇具有很好参考价值的文章主要介绍了【MySQL】数据库之MHA高可用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、MHA

1、什么是MHA

2、MHA 的组成

3、MHA的特点

4、MHA的工作原理

二、有哪些数据库集群高可用方案

三、实操:一主两从部署MHA

1、完成主从复制

步骤一:完成所有MySQL的配置文件修改

步骤二:完成所有MySQL的主从授权,以及mha的账号授权

步骤三:主查看master状态,从完成与主对接,启动从节点,查看从的状态,验证IO和SQL线程的状态是否为yes

步骤四:验证主从复制

步骤五:将从节点都改为只读状态

2、所有服务器配置MHA的node组件

步骤一:完成所有节点(三台mysql和manager)安装epel源和依赖环境

步骤二:完成所有服务器部署mha-node组件

3、在MHA manager服务器配置manager组件

步骤一:安装manager组件

4、完成所有所有服务器ssh免密登录

5、完成在 manager 节点上配置 MHA

步骤一:复制相关脚本到/usr/local/bin 目录

步骤二:使用master_ip_failover脚本来管理 VIP 和故障切换,修改该脚本

步骤三:创建 MHA 软件目录并拷贝配置文件,这里使用mysql_mha.conf配置文件来管理 mysql 节点服务器,#创建相关目录(所有节点)

步骤四:给主配置一个vip 

步骤五:完成ssh和集群的健康检查,最后启动mha 

6、故障切换实验

步骤一:先关闭主的mysqld服务

步骤二:查看故障切换有哪些内容

步骤三:修复master

重新启动旧master的mysqld服务,重新做主从

修改manager的配置文件


一、MHA

1、什么是MHA

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

MHA的出现是为了解决MySQL的单点故障,MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。MHA能在故障切换过程中最大程度上保证数据的一致性,已达到真正意义上的高可用。

2、MHA 的组成

●MHA Node(数据节点)
MHA Node 运行在每台 MySQL 服务器上。(注意是每一台!!包含所有的MySQL节点和manager节点)

●MHA Manager(管理节点)
MHA Manager 可以单独部署在一台独立的机器上,管理多个 master-slave 集群;也可以部署在一台 slave 节点上。
MHA Manager 会定时探测集群中的 master 节点。当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master, 然后将所有其他的 slave 重新指向新的 master。整个故障转移过程对应用程序完全透明。

3、MHA的特点

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

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

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

4、MHA的工作原理

实际就是manager的工作过程

manager会周期性探测master的状态,一旦发现master故障以后,会根据默认,将目前收到最新数据的从节点指定为新的master,所有的其他从节点指向新的master,同时VIP从原来的主漂移到新的主。这些对客户端来说都是透明的

【MySQL】数据库之MHA高可用,数据库,mysql

二、有哪些数据库集群高可用方案

有keepalived(单主)、MHA(单主)、MMM(单主)以及MySQL cluster(多主)

所有的高可用都是在主从复制的基础上进行。

keepalived可以完成主备切换,但是不能完成读写分离

MMM的工作模式:

支持双主故障切换和双主日常管理,MMM也是用perl语言开发,主要用来监控和管理MySQL的双主复制。虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个 Slave 的 read 负载均衡。

三、实操:一主两从部署MHA

1、完成主从复制

步骤一:完成所有MySQL的配置文件修改

【MySQL】数据库之MHA高可用,数据库,mysql

【MySQL】数据库之MHA高可用,数据库,mysql 【MySQL】数据库之MHA高可用,数据库,mysql

server-id = 3
log-bin=mysql_bin
binlog_format=mixed
log-slave-updates=true
relay-log=relay-log-bin
relay-log-index=relay-slave-bin.index

server-id = 3 ##所有服务器的server-id都不相同
log-bin=mysql_bin ##开启二进制日志
binlog_format=mixed ##设置二进制日志的格式为mixed
log-slave-updates=true ##slave 从 master 复制的数据会写入二进制日志文件里
relay-log=relay-log-bin ##中继日志开启
relay-log-index=relay-slave-bin.index ##中继日志的索引文件

步骤二:完成所有MySQL的主从授权,以及mha的账号授权

【MySQL】数据库之MHA高可用,数据库,mysql

mysql> grant replication slave on *.* to 'myslave'@'192.168.20.%' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> grant all on *.* to 'manager'@'192.168.20.%' identified by 'manager123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> grant all on *.* to 'manager'@'mysql1' identified by 'manager123';
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> grant all on *.* to 'manager'@'mysql2' identified by 'manager123';
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> grant all on *.* to 'manager'@'mysql3' identified by 'manager123';
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> flush privileges;

步骤三:主查看master状态,从完成与主对接,启动从节点,查看从的状态,验证IO和SQL线程的状态是否为yes

show master status;

【MySQL】数据库之MHA高可用,数据库,mysql

mysql> change master to master_host='192.168.20.15',master_user='myslave',master_port=3306,master_password='abc123',master_log_file='mysql_bin.000001',master_log_pos=1761;

mysql> start slave;

【MySQL】数据库之MHA高可用,数据库,mysql

mysql> show slave status\G;

【MySQL】数据库之MHA高可用,数据库,mysql

步骤四:验证主从复制

【MySQL】数据库之MHA高可用,数据库,mysql

【MySQL】数据库之MHA高可用,数据库,mysql

步骤五:将从节点都改为只读状态

【MySQL】数据库之MHA高可用,数据库,mysql

set global read_only=1;

2、所有服务器配置MHA的node组件

步骤一:完成所有节点(三台mysql和manager)安装epel源和依赖环境

yum install epel-release --nogpgcheck -y

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

步骤二:完成所有服务器部署mha-node组件

cd /opt
tar zxvf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
perl Makefile.PL
make && make install

【MySQL】数据库之MHA高可用,数据库,mysql

3、在MHA manager服务器配置manager组件

步骤一:安装manager组件

cd /opt
tar zxvf mha4mysql-manager-0.57.tar.gz
cd mha4mysql-manager-0.57
perl Makefile.PL
make && make install

【MySQL】数据库之MHA高可用,数据库,mysql

4、完成所有所有服务器ssh免密登录

ssh-keygen -t rsa

ssh-copy-id 192.168.20.15
ssh-copy-id 192.168.20.16
ssh-copy-id 192.168.20.17
ssh-copy-id 192.168.20.7

【MySQL】数据库之MHA高可用,数据库,mysql

5、完成在 manager 节点上配置 MHA

步骤一:复制相关脚本到/usr/local/bin 目录

cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/bin

【MySQL】数据库之MHA高可用,数据库,mysql

步骤二:使用master_ip_failover脚本来管理 VIP 和故障切换,修改该脚本

cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin

【MySQL】数据库之MHA高可用,数据库,mysql

vim /usr/local/bin/master_ip_failover
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
 
use Getopt::Long;
 
my (
    $command, $orig_master_host, $orig_master_ip,$ssh_user,
    $orig_master_port, $new_master_host, $new_master_ip,$new_master_port,
    $orig_master_ssh_port,$new_master_ssh_port,$new_master_user,$new_master_password
);
 
# 这里定义的虚拟IP配置要注意,这个ip必须要与你自己的集群在同一个网段,否则无效
my $vip = '192.168.20.100/24';
my $key = '1';
# 这里的网卡名称 “ens33” 需要根据你机器的网卡名称进行修改
# 如果多台机器直接的网卡名称不统一,有两种方式,一个是改脚本,二是把网卡名称修改成统一
# 我这边实际情况是修改成统一的网卡名称
my $ssh_start_vip = "sudo /sbin/ifconfig ens33:$key $vip";
my $ssh_stop_vip = "sudo /sbin/ifconfig ens33:$key down";
my $ssh_Bcast_arp= "sudo /sbin/arping -I ens33 -c 3 -A $vip";

GetOptions(
    'command=s'          => \$command,
    'ssh_user=s'         => \$ssh_user,
    'orig_master_host=s' => \$orig_master_host,
    'orig_master_ip=s'   => \$orig_master_ip,
    'orig_master_port=i' => \$orig_master_port,
    'orig_master_ssh_port=i' => \$orig_master_ssh_port,
    'new_master_host=s'  => \$new_master_host,
    'new_master_ip=s'    => \$new_master_ip,
    'new_master_port=i'  => \$new_master_port,
    'new_master_ssh_port' => \$new_master_ssh_port,
    'new_master_user' => \$new_master_user,
    'new_master_password' => \$new_master_password
 
);
 
exit &main();
 
sub main {
    $ssh_user = defined $ssh_user ? $ssh_user : 'root';
    print "\n\nIN SCRIPT TEST====$ssh_user|$ssh_stop_vip==$ssh_user|$ssh_start_vip===\n\n";
 
    if ( $command eq "stop" || $command eq "stopssh" ) {
 
        my $exit_code = 1;
        eval {
            print "Disabling the VIP on old master: $orig_master_host \n";
            &stop_vip();
            $exit_code = 0;
        };
        if ($@) {
            warn "Got Error: $@\n";
            exit $exit_code;
        }
        exit $exit_code;
    }
    elsif ( $command eq "start" ) {
 
        my $exit_code = 10;
        eval {
            print "Enabling the VIP - $vip on the new master - $new_master_host \n";
            &start_vip();
        &start_arp();
            $exit_code = 0;
        };
        if ($@) {
            warn $@;
            exit $exit_code;
        }
        exit $exit_code;
    }
    elsif ( $command eq "status" ) {
        print "Checking the Status of the script.. OK \n";
        exit 0;
    }
    else {
        &usage();
        exit 1;
    }
}
 
sub start_vip() {
    `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
sub stop_vip() {
    `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}
 
sub start_arp() {
    `ssh $ssh_user\@$new_master_host \" $ssh_Bcast_arp \"`;
}
sub usage {
    print
    "Usage: master_ip_failover --command=start|stop|stopssh|status --ssh_user=user --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}

步骤三:创建 MHA 软件目录并拷贝配置文件,这里使用mysql_mha.conf配置文件来管理 mysql 节点服务器,#创建相关目录(所有节点)

【MySQL】数据库之MHA高可用,数据库,mysql

[root@localhost /opt]#mkdir -p /opt/mysql-mha/mha-node
[root@localhost /opt]#mkdir -p /opt/mysql-mha/mha

【MySQL】数据库之MHA高可用,数据库,mysql

vim /opt/mysql-mha/mysql_mha.cnf
[server default]
manager_log=/opt/mysql-mha/manager.log
manager_workdir=/opt/mysql-mha/mha
master_binlog_dir=/usr/local/mysql/data
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
user=manager
password=manager123
ping_interval=1
port=3306
remote_workdir=/opt/mysql-mha/mha-node
repl_password=abc123
repl_user=myslave
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.20.16 -s 192.168.20.17
shutdown_script=""
ssh_user=root

[server1]
hostname=192.168.20.15
port=3306

[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.20.16
port=3306

[server3]
hostname=192.168.20.17
port=3306

步骤四:给主配置一个vip 

[root@mysql1 /opt]#ifconfig ens33:1 192.168.20.100/24

【MySQL】数据库之MHA高可用,数据库,mysql

步骤五:完成ssh和集群的健康检查,最后启动mha 

[root@localhost /usr/local/bin]#masterha_check_ssh -conf=/opt/mysql-mha/mysql_mha.cnf

【MySQL】数据库之MHA高可用,数据库,mysql

[root@localhost /usr/local/bin]#masterha_check_repl -conf=/opt/mysql-mha/mysql_mha.cnf

【MySQL】数据库之MHA高可用,数据库,mysql

masterha_check_ssh -conf=/opt/mysql-mha/mysql_mha.cnf ##ssh检查
masterha_check_repl -conf=/opt/mysql-mha/mysql_mha.cnf ##集群检查

##在 manager 节点上启动 MHA
nohup masterha_manager \
--conf=/opt/mysql-mha/mysql_mha.cnf \
--remove_dead_master_conf \
--ignore_last_failover < /dev/null > /var/log/mha_manager.log 2>&1 &


##查看 MHA 状态,可以看到当前的 master 是 mysql1 节点。
masterha_check_status --conf=/opt/mysql-mha/mysql_mha.cnf

cat /opt/mysql-mha/manager.log | grep "current master"

【MySQL】数据库之MHA高可用,数据库,mysql

6、故障切换实验

步骤一:先关闭主的mysqld服务

[root@mysql1 /opt]#systemctl stop mysqld

【MySQL】数据库之MHA高可用,数据库,mysql

步骤二:查看故障切换有哪些内容

【MySQL】数据库之MHA高可用,数据库,mysql

【MySQL】数据库之MHA高可用,数据库,mysql 【MySQL】数据库之MHA高可用,数据库,mysql

【MySQL】数据库之MHA高可用,数据库,mysql

总结:
故障切换后,
1、MHA 进程会退出;
2、HMA 会自动修改 配置文件内容,将宕机的 mysql1 节点删除
3、VIP会漂移到新的master上
4、从节点的状态可以查看 指向新的master

步骤三:修复master

重新启动旧master的mysqld服务,重新做主从

ps:如果说master宕机以后有数据写入,那么还需要先完成数据一致再做主从!!!

[root@mysql1 /opt]#systemctl restart mysqld
[root@mysql1 /opt]#mysql -uroot -pabc123

mysql> change master to master_host='192.168.20.16',master_user='myslave',master_password='abc123',master_log_file='mysql_bin.000001',master_log_pos=3087;

mysql> start slave;

mysql> show slave status\G;

【MySQL】数据库之MHA高可用,数据库,mysql

针对数据不一致问题:需要先将主进行只读锁定,然后用mysqldump完成全量备份 给从以后 再从做一次全量备份恢复,最后当数据一致以后,再重新做主从复制 

修改manager的配置文件

【MySQL】数据库之MHA高可用,数据库,mysql

[server default]
manager_log=/opt/mysql-mha/manager.log
manager_workdir=/opt/mysql-mha/mha
master_binlog_dir=/usr/local/mysql/data
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
user=manager
password=manager123
ping_interval=1
port=3306
remote_workdir=/opt/mysql-mha/mha-node
repl_password=abc123
repl_user=myslave
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.20.15 -s 192.168.20.17
shutdown_script=""
ssh_user=root

[server1]
hostname=192.168.20.15
port=3306

[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.20.16
port=3306

[server3]
hostname=192.168.20.17
port=3306

【MySQL】数据库之MHA高可用,数据库,mysql

【MySQL】数据库之MHA高可用,数据库,mysql

【MySQL】数据库之MHA高可用,数据库,mysql 【MySQL】数据库之MHA高可用,数据库,mysql文章来源地址https://www.toymoban.com/news/detail-782746.html

到了这里,关于【MySQL】数据库之MHA高可用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【微服务部署】九、使用Docker Compose搭建高可用双机热备MySQL数据库

      通常,一般业务我们使用云服务器提供的数据库,无论是MySQL数据库还是其他数据库,云服务厂商都提供了主备功能,我们不需要自己配置处理。而如果需要我们自己搭建数据库,那么考虑到数据的高可用性、故障恢复和扩展性,必须做数据备份配置。 一、MySQL 的多种数

    2024年02月07日
    浏览(33)
  • MySQL----MHA高可用

    MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。

    2024年02月12日
    浏览(28)
  • MySQL高可用MHA

    MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。

    2024年02月12日
    浏览(24)
  • MySQL--MHA高可用方案

            MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。  MHA Manager(管理节点)和 M

    2024年03月09日
    浏览(46)
  • MySQL-高可用MHA(二)

    目录 🍁通过keepalived方式 🍂安装keepalived 🍃防火墙策略 🍃keep配置文件 🍂MHA应用keepalived 🍃停止MHA 🍃启动MHA 🍃检查状态 🍃测试 🍁通过脚本实现VIP切换 🍂网卡环境配置 🍂MHA应用脚本 🍃停止MHA 🍃启动MHA 🍃检查状态 🍃测试     🦐博客主页:大虾好吃吗的博客    

    2023年04月17日
    浏览(35)
  • MySQL-MHA高可用(一)

    目录 🍁同步概念 🍁工作原理 🍃环境拓扑 🍁环境准备 🍂manager 🍂master1 🍂master2 🍂slave 🍃配置半同步复制 🍁master1 🍁master2 🍁slave 🍁查看状态 🍁创建用户并指定主从 🍂master1 🍂master2 🍂slave 🍃配置mysql-mha 🍁配置mha 🍁验证 🍂SSH 有效性验证 🍂集群复制的有效性验

    2023年04月19日
    浏览(21)
  • linux——mysql的高可用MHA

    目录 一、概述 一、概念 二、组成 三、特点 四、工作原理 二、案例 三、构建MHA 一、基础环境 二、ssh免密登录 三、主从复制 master slave1 四、MHA安装 一、环境 二、安装node 三、安装manager         MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制

    2024年02月12日
    浏览(24)
  • 【简单认识MySQL的MHA高可用配置】

    MHA(Master High Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。

    2024年02月15日
    浏览(28)
  • MySQL之MHA高可用配置及故障切换

    目录 一、MHA概念 1、MHA的组成  2、MHA的特点 3、主从复制有多少种复制方法 二、搭建MySql+MHA部署 1.Master、Slave1、Slave2 节点上安装 mysql 2.修改 Master、Slave1、Slave2 节点的 Mysql主配置文件/etc/my.cnf   3. 配置 mysql 一主两从 4、安装MHA所有组件  4.1 安装 MHA 软件 4.2 在所有服务

    2024年02月09日
    浏览(24)
  • Mysql 搭建MHA高可用架构,实现自动failover,完成主从切换

    目录 自动failover MHA: MHA 服务 项目:搭建Mysql主从复制、MHA高可用架构 实验项目IP地址配置: MHA下载地址 项目步骤:  一、修改主机名 二、编写一键安装mha node脚本和一键安装mha mangaer脚本,并执行安装 三、搭建Mysql主从复制集群(注意所有的Mysql主从复制机器都需要打开二

    2024年02月13日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包