• 1210、MHA集群


    总结之前数据存储架构的优缺点:

    1、主从结构存储数据

    **优点:**实现了的数据的自动备份

    **缺点:**主服务器和从服务器 都有单点故障的问题

    2、数据读写分离

    优点: 减轻单台服务器的访问压力;同时实现数据的备份

    缺点: 读写分离服务器 主数据库 从数据库 都存在单点故障问题

    3、分库分表

    **优点:**解决大量并发存储数据的 存储压力问题和 存储空间问题

    缺点: 分片存储服务器有单点故障问题; 没有数据备份的功能

    MHA集群

    (mysql高可用集群) 解决服务的单点故障问题和 数据的自动备份

    一、概述

    1、MHA软件介绍

    MHA(Master High Availability)
    由日本DeNA公司youshimaton开发
    是一套优秀的实现MySQL高可用的解决方案
    数据库的自动故障切换操作能做到在0~30秒之内完成
    MHA能确保在故障切换过程中最大限度保证数据的一致性,以达到真正意义上的高可用
    
    • 1
    • 2
    • 3
    • 4
    • 5

    软件有2部分组成

    ​ **1.管理端软件(管理节点):**安装管理集群主机上的软件

    --管理所有数据库服务器;
    --可以单独部署在一台独立的机器上;
    --也可以部署在某台数据库服务器上。
    
    • 1
    • 2
    • 3

    ​ **2.数据端软件(数据节点):**安装在数据库服务器上的软件

    --存储数据的mysql服务器;
    --运出在每台mysql服务器上。
    
    • 1
    • 2

    2、MHA集群架构

    在这里插入图片描述

    至少3台数据库服务器做集群才能真正实现高可用

    角色1 数据库服务器(3台)

    准备3台新的数据库服务器 
    配置IP地址  192.168.4.51/52/53 ;
    管理员root ,密码123456
    
    • 1
    • 2
    • 3

    角色2 管理主机(1台)

    准备1台新的服务器IP地址  192.168.4.57  
    不需要有数据库服务(有的话把数据库服务停止即可)
    
    • 1
    • 2

    角色3

    客户端(1台) 
    使用50主机做客户端 ,有连接命令mysql 即可(安装mariadb即可)
    
    • 1
    • 2

    集群VIP地址

    192.168.4.100 		 
    
    • 1

    需要软件

    把mha-soft-student目录拷贝到  主机51、52、53、57的/root 目录下
    
    • 1

    3、MHA集群的工作过程

    由Manager定时探测集群中的master节点;
    当master故障时,Manager自动将拥有最新数据的slave提升为新的master;
    (如果有多个从的话,剩下的从会自动更新为新主服务器的从主机)
    
    
    • 1
    • 2
    • 3
    • 4

    4、拓扑结构

    IP规划:

    IP地址主从同步角色集群角色主机名
    192.168.4.5客户端client50
    192.168.4.51主库主服务器host51
    192.168.4.52从库备用服务器host52
    192.168.4.53从库备用服务器host53
    192.168.4.57管理主机mgm57
    192.168.4.100VIP地址

    拓扑图:

    主机总台数5台,角色如下:

    –客户机:1台

    –数据库服务器:3台

    –管理主机:1台

    在这里插入图片描述

    二、部署MHA集群

    配置MHA集群,具体步骤如下:

    1、集群环境准备

    (在3台数据库服务器都要做的配置)

    1.1 公共配置

    (3台数据库服务器都要配置)

    #启用binlog日志

    #开启半同步复制模式

    #禁止删除本机的中继日志文件

    #重启数据库服务

    #添加从服务器拷贝sql命令时连接使用的用户

    #配置数据库器host51
    [root@host51 ~]# vim /etc/my.cnf			
    [mysqld]
    plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
    rpl_semi_sync_master_enabled=1
    rpl_semi_sync_slave_enabled=1
    relay_log_purge=0
    server_id=51
    log_bin=master51
    :wq
    [root@host51 ~]# mysql -uroot -p123456
    mysql> grant replication slave on *.* to repluser@"%" Identified by "123456";
    mysql> exit;
    
    
    #配置数据库器host52
    [root@host52 ~]# vim /etc/my.cnf	
    [mysqld]
    plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
    rpl_semi_sync_master_enabled=1
    rpl_semi_sync_slave_enabled=1
    relay_log_purge=0
    server_id=52
    log_bin=master52
    :wq
    [root@host52 ~]# mysql -uroot -p123456
    mysql> grant replication slave on *.* to repluser@"%" Identified by "123456";
    mysql> exit;
    
    
    
    #配置数据库器host53	
    [root@host53 ~]# vim /etc/my.cnf	
    [mysqld]
    plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
    rpl_semi_sync_master_enabled=1
    rpl_semi_sync_slave_enabled=1
    relay_log_purge=0
    server_id=53
    log_bin=master53
    :wq
    [root@host53 ~]# mysql -uroot -p123456
    mysql> grant replication slave on *.* to repluser@"%" Identified by "123456";
    mysql> exit;	
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    1.2 配置ssh免密登录

    1.所有数据库服务器之间可以彼此免密登录

    第1步:配置host51 免密登录host52和host53
    [root@host51 ~]# ssh-keygen  遇到提示就回车
    [root@host51 ~]# ssh-copy-id root@192.168.4.52
    [root@host51 ~]# ssh-copy-id root@192.168.4.53	
    						
    第2步:配置host52 免密登录host51和host53
    [root@host52 ~]# ssh-keygen  遇到提示就回车
    [root@host52 ~]# ssh-copy-id root@192.168.4.51
    [root@host52 ~]# ssh-copy-id root@192.168.4.53	
    
    第3步:配置host53 免密登录host51和host52
    [root@host53 ~]# ssh-keygen  遇到提示就回车
    [root@host53 ~]# ssh-copy-id root@192.168.4.51
    [root@host53 ~]# ssh-copy-id root@192.168.4.52	
    							
    第4步:测试免密登录
    [root@host51 ~]# ssh 192.168.4.53
    [root@host51 ~]# ssh 192.168.4.52
    
    [root@host52 ~]# ssh 192.168.4.53
    [root@host52 ~]# ssh 192.168.4.51
    
    [root@host53 ~]# ssh 192.168.4.52
    [root@host53 ~]# ssh 192.168.4.51
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    2.管理主机可以免密登录所有数据库服务器(数据库服务器不需要免密登录管理主机)

    [root@mgm57 ~]# ssh-keygen
    [root@mgm57 ~]# ssh-copy-id  root@192.168.4.51
    [root@mgm57 ~]# ssh-copy-id  root@192.168.4.52
    [root@mgm57 ~]# ssh-copy-id  root@192.168.4.53	
    
    [root@mgm57 ~]# ssh  192.168.4.51
    [root@mgm57 ~]# ssh  192.168.4.52
    [root@mgm57 ~]# ssh  192.168.4.53	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1.3 配置MySQL 一主多从 同步结构

    说明: 主机host52 和 host53 分别做host51 的从服务器

    #配置主数据库服务器 192.168.4.51
    1 启用binlog日志  (公共配置已经配置了)
    2 用户授权(公共配置已经配置了)
    3 查看日志信息
    [root@host51 ~]# mysql -uroot -p123456 -e 'show master status'
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +-----------------+----------+--------------+------------------+-------------------+
    | File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +-----------------+----------+--------------+------------------+-------------------+
    | master51.000001 |      441 |              |                  |                   |
    +-----------------+----------+--------------+------------------+-------------------+
    [root@host51 ~]# 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    #配置从数据库服务器 192.168.4.52
    1 指定server_id  并重启数据库服务 (公共配置已经做了)
    2 确保数据一致(如果一样就不用做了)
    3 指定主服务器信息
    [root@host52 ~]# mysql -uroot -p123456
    mysql> change master to  master_host="192.168.4.51",master_user="repluser",
    master_password="123456",master_log_file="master51.000001",master_log_pos=441;
    
    4 启动slave进程 
     MySQL>start slave;
    
    
    5 查看状态 (IO线程和 SQL线程都是yes状态)
    mysql> show slave status \G
    			Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    #配置从数据库服务器 192.168.4.53
    1 指定server_id  并重启数据库服务(公共配置已经做了)
    2 确保数据一致(如果一样就不用做了)
    3 指定主服务器信息
    [root@host53 ~]# mysql -uroot -p123456
    mysql> change master to  master_host="192.168.4.51",master_user="repluser",
    master_password="123456",master_log_file="master51.000001",master_log_pos=441;
    
    4 启动slave进程  
    MySQL>start slave;
    5 查看状态 (IO线程和 SQL线程都是yes状态)
    mysql> show slave status \G
    			Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2、配置管理主机 192.168.4.57

    2.1安装软件

    #安装依赖软件

    cd mha-soft-student/
    yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
    yum -y install perl-*.rpm
    yum -y install  perl-ExtUtils-*   perl-CPAN*
    
    • 1
    • 2
    • 3
    • 4

    #安装提供管理命令软件

    tar -xf mha4mysql-manager-0.56.tar.gz 
    cd mha4mysql-manager-0.56/						
    [root@mgm57 mha4mysql-manager-0.56]# perl Makefile.PL  
    *** Module::AutoInstall version 1.03
    *** Checking for Perl dependencies...
    [Core Features]
    - DBI                   ...loaded. (1.627)
    - DBD::mysql            ...loaded. (4.023)
    - Time::HiRes           ...loaded. (1.9725)
    - Config::Tiny          ...loaded. (2.14)
    - Log::Dispatch         ...loaded. (2.41)
    - Parallel::ForkManager ...loaded. (1.18)
    - MHA::NodeConst        ...loaded. (0.56)
    *** Module::AutoInstall configuration finished.
    Checking if your kit is complete...
    Looks good
    Writing Makefile for mha4mysql::manager
    Writing MYMETA.yml and MYMETA.json
    [root@mgm57 mha4mysql-manager-0.56]#  make   && make  install   
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    2.2 了解相关管理命令
    [root@mgm57 mha4mysql-manager-0.56]# masterha_  按2次tab键列出所有命令
    masterha_check_repl       masterha_conf_host        masterha_master_switch    
    masterha_check_ssh        masterha_manager          masterha_secondary_check  
    masterha_check_status     masterha_master_monitor   masterha_stop             
    [root@mgm57 mha4mysql-manager-0.56]#
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    2.3 创建并编辑管理服务的主配置文件 (!!!重要!!!)
    1 创建工作目录  
    [root@mgm57 ~]# mkdir /etc/mha
    
    2 拷贝模板文件创建主配置文件
    [root@mgm57 mha-soft-student]# cd  mha4mysql-manager-0.56
    [root@mgm57 mha4mysql-manager-0.56]# cp samples/conf/app1.cnf  /etc/mha/
    
    3 编辑主配置文件
    说明:模版文件是个半成品 需要根据环境准备完善
    [root@mgm57 ~]# vim /etc/mha/app1.cnf	(没有第4台数据库服务器所有把[server4]删除)					
    [server default]
    manager_workdir=/etc/mha
    manager_log=/etc/mha/manager.log
    master_ip_failover_script=/etc/mha/master_ip_failover
    
    ssh_user=root
    ssh_port=22
    
    repl_user=repluser
    repl_password=123456
    
    user=plj
    password=123456
    
    #定义监视的数据库服务器
    [server1]
    hostname=192.168.4.51
    port=3306
    candidate_master=1
    
    [server2]
    hostname=192.168.4.52
    port=3306
    candidate_master=1
    
    [server3]
    hostname=192.168.4.53
    port=3306
    candidate_master=1
    :wq
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    2.4 创建故障切换脚本

    创建脚本并指定vip地址部署在哪块网卡上

    [root@mgm57 mha-soft-student]# cp master_ip_failover  /etc/mha/
    [root@mgm57 mha-soft-student]# chmod +x /etc/mha/master_ip_failover 
    
    [root@mgm57 mha-soft-student]# vim +35 /etc/mha/master_ip_failover 
    my $vip = '192.168.4.100/24';  # Virtual IP
    my $key = "1";
    my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
    my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
    :wq
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3、配置数据库服务器

    说明:要保证3台数据库都有ifconfig 命令

    ]# which ifconfig  || yum -y install net-tools
    /usr/sbin/ifconfig
    
    • 1
    • 2
    3.1 把故障切换脚本里指定的vip地址

    配置在当前主从结构种的主数据库服务器Host51 主机上

    [root@host51 ~]# ifconfig  eth0:1 192.168.4.100/24
    [root@host51 ~]# ifconfig  eth0:1
    eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.4.100  netmask 255.255.255.0  broadcast 192.168.4.255
            ether 52:54:00:98:33:28  txqueuelen 1000  (Ethernet)
    
    [root@host51 ~]#			
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    3.2安装软件

    (3台数据库器软件都要安装)

    #先安装依赖
    [root@host51 ~]# cd mha-soft-student/
    [root@host51 mha-soft-student]# yum -y install perl-*.rpm
    
    #在安装主软件
    [root@host51 mha-soft-student]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm		
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    3.3 添加监控用户

    只需在master服务器添加在slave服务器查看

    [root@host51 ~]# mysql -uroot -p123456
    mysql> grant all on *.*  to plj@"%"  identified by "123456";
    mysql> exit;
    
    [root@host52 ~]# mysql -uroot -p123456 -e 'select user from mysql.user where user="plj"'
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +------+
    | user |
    +------+
    | plj  |
    +------+
    [root@host52 ~]# 
    
    [root@host53 ~]# mysql -uroot -p123456 -e 'select user from mysql.user where user="plj"'
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +------+
    | user |
    +------+
    | plj  |
    +------+
    [root@host52 ~]# 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    三、测试配置

    1、测试集群环境

    1.1 测试配置

    测试ssh配置

    ]#  masterha_check_ssh  --conf=/etc/mha/app1.cnf
    
    • 1

    测试主从同步配置:

    ]# masterha_check_repl --conf=/etc/mha/app1.cnf
    
    • 1
    1.2 启动管理服务

    使用masterha_manager命令

    –remove_dead_master_conf # 删除宕机主库的配置

    –ignore_last_failover # 忽略xxx.health文件

    ]# masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover]# nohup masterha_manager --conf=/etc/mha/app1.cnf     --ignore_last_failover 2> /dev/null &
    
    
    • 1
    • 2
    • 3
    • 4

    查看状态:masterha_check_status

    ]# masterha_check_status  --conf=/etc/mha/app1.cnf
    
    • 1

    停止服务:masterha_stop

    ]# masterha_stop  --conf=/etc/mha/app1.cnf
    
    • 1

    2、测试高可用

    2.1 模拟主服务器故障

    模拟故障的方法:

    —停止mysql服务

    —关机

    ]# systemctl stop mysqld
    }# shutdown -h now
    
    • 1
    • 2
    2.2 客户端访问集群

    在从服务器查看vip地址

    ]# ifconfig eth0:1
    
    • 1

    客户端连接vip地址,访问集群

    ]# mysql -h  -u  -p 
    
    • 1

    3、修复故障服务器

    配置数据库服务器:

    –启动mysql服务;

    –与主服务器数据一致;

    –指定主服务器信息;

    –启动slave进程;

    –查看状态信息。

    配置管理服务器:

    –修改主配置文件;

    –测试集群环境;

    –重启管理服务;

    –查看服务状态。

    例子:

    1、在管理主机mgm57如下测试:
    1) 测试ssh免密登录配置
    [root@mgm57 ~]# masterha_check_ssh  --conf=/etc/mha/app1.cnf				
    Sat Nov 20 16:31:08 2021 - [info] All SSH connection tests passed successfully.  #成功提示
    				
    2)测试主从同步配置
    [root@mgm57 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf
    MySQL Replication Health is OK.   #成功提示
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    排错思路

    ssh 测试失败: 公共解决办法

    **第一步 :**在 51-53 、57删除错误的密码对和公钥 rm -rf /root/.ssh

    **第二步:**然后把环境准备中的 ssh 免密登录重新配置一遍;

    ​ 配置3台数据库服务器之间密码登录;

    ​ 配置管理主机57 能够免密登录 3台数据库服务器.

    主从同步配置失败的解决办法

    第一步: 在52 和 53本机查看 slave 进程的状态, 如果io 和 sql 线程 ,不同时是yes 需要执行如下操作(2台都执行

    首先执行 stop slave; 停止有错误的 slave 进程

    然后重新使用change master to 指定主服务器的信息;

    然后执行 start slave;

    查看状态 show slave status \G

    如果2个从服务器都是 io 和 sql 线程 yes

    在 51 主机查看是否有 slave 状态 show slave status \G

    然后执行stop slave;

    如果以上都没有问题 检查 app1.cnf 编写

    2、启动管理服务(192.168.4.57)

    **说明:**2个测试都成功了 管理服务才能启动成功

    [root@mgm57 ~]# 
    nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf  \
    --ignore_last_failover 2> /dev/null &
    
    
    
    [root@mgm57 ~]# jobs
    [1]+  运行中               nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &
    [root@mgm57 ~]# 
    
    
    
    [root@mgm57 ~]# masterha_check_status  --conf=/etc/mha/app1.cnf;
    app1 (pid:1977) is running(0:PING_OK), master:192.168.4.51
    [root@mgm57 ~]# 
    
    
    
    [root@host51 ~]# ifconfig  eth0:1
    eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.4.100  netmask 255.255.255.0  broadcast 192.168.4.255
            ether 52:54:00:98:33:28  txqueuelen 1000  (Ethernet)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    3、测试集群的高可用功能,具体操作如下

    1.客户端host50 连接VIP地址访问数据库服务

    #主数据库服务器host51 添加客户端连接使用的用户 2台从服务器会自动同步用户
    mysql> create database db1;
    mysql> create table db1.a(id int);
    mysql> grant select ,insert on db1.* to yaya@"%" identified by "123456";
    
    • 1
    • 2
    • 3
    • 4
    #客户端使用用户连接服务
    [root@host50 ~]# mysql -h192.168.4.100 -uyaya -p123456
    insert into db1.a values (8888);
    select  * from 	db1.a;
    
    • 1
    • 2
    • 3
    • 4

    2.停止host51主机的数据库服务

    [root@host51 ~]# systemctl  stop  mysqld
    
    • 1

    3.客户端host50 依然可以连接VIP地址访问数据库服务

    [root@host50 ~]# mysql -h192.168.4.100 -uyaya -p123456
    mysql> insert into db1.a values (9999);
    Query OK, 1 row affected (0.07 sec)
    
    mysql> select  * from  db1.a;
    +------+
    | id   |
    +------+
    | 8888 |
    | 9999 |
    +------+
    2 rows in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    4.在host52 或 host53 主机查看vip地址 (谁有vip谁就是新的主数据库服务器)

    [root@host52 ~]# ifconfig  eth0:1
    eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.4.100  netmask 255.255.255.0  broadcast 192.168.4.255
            ether 52:54:00:c9:96:10  txqueuelen 1000  (Ethernet)
    
    [root@host52 ~]# 	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5.在剩下的另一台数据库服务器查看主服务器IP地址(自动做新主服务器的slave主机)

    [root@host53 ~]# mysql -uroot -p123456 -e 'show slave status\G' | grep -i yes
    mysql: [Warning] Using a password on the command line interface can be insecure.
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    [root@host53 ~]# 
    
    
    
    [root@host53 ~]# mysql -uroot -p123456 -e 'show slave status\G' | grep -i "master_host"
    mysql: [Warning] Using a password on the command line interface can be insecure.
                      Master_Host: 192.168.4.52
    [root@host53 ~]# 		
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    6.查看app1.cnf配置文件 (发现没有[server1]的配置了 仅剩 [server2] 和 [server3] )

    [root@mgm57 ~]# grep "server1" /etc/mha/app1.cnf 
    [root@mgm57 ~]# 
    [root@mgm57 ~]# grep "server2" /etc/mha/app1.cnf 
    [server2]
    [root@mgm57 ~]# grep "server3" /etc/mha/app1.cnf 
    [server3]
    [root@mgm57 ~]# 		
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    7.查看管理服务的状态,并启动管理服务 再次查看状态 (会监视新的主数据库服务器)

    [root@mgm57 ~]# masterha_check_status  --conf=/etc/mha/app1.cnf;
    [root@mgm57 ~]# nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &
    [1] 2527
    
    [root@mgm57 ~]# jobs
    [1]+  运行中               nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &
    [root@mgm57 ~]# 
    [root@mgm57 ~]# masterha_check_status  --conf=/etc/mha/app1.cnf;
    app1 (pid:2527) is running(0:PING_OK), master:192.168.4.52   #监视新的主数据库服务器52
    [root@mgm57 ~]#
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    4、修复宕机的51数据库服务器

    **第一步:**把192.168.4.51 配置为 当前 master服务器 52的slave主机,

    具体操作如下:

    [root@host51 ~]#systemctl  start  mysqld
    [root@host52 ~]# mysqldump -uroot -p123456  --master-data  -B db1 > /root/db1.sql
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    [root@host52 ~]# scp /root/db1.sql  192.168.4.51:/root/
    db1.sql                                                              100% 2073   210.9KB/s   00:00    
    [root@host52 ~]#
    
    
    [root@host51 ~]# mysql -uroot -p123456  < /root/db1.sql 
    [root@host51 ~]# grep master52 /root/db1.sql 
    CHANGE MASTER TO MASTER_LOG_FILE='master52.000001', MASTER_LOG_POS=1676;
    [root@host51 ~]#
    [root@host51 ~]# mysql -uroot -p123456
    mysql> change master to master_host="192.168.4.52" , master_user="repluser" , master_password="123456" , master_log_file="master52.000001" , master_log_pos=1676 ;
    Query OK, 0 rows affected, 2 warnings (0.12 sec)
    
    mysql> start slave;
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> show slave status \G
                Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    mysql> exit;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    **第二步 :**把51主机添加到集群里

    具体配置如下:

    [root@host57 ~]# jobs
    [1]+  运行中               nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &
    [root@host57 ~]# 
    
    [root@host57 ~]# vim /etc/mha/app1.cnf  #把51主机添加到配置文件里 
    [server1]
    hostname=192.168.4.51
    port=3306
    candidate_master=1
    :wq
    
    masterha_secondary_check  masterha_stop             
    [root@host57 ~]# masterha_stop --conf=/etc/mha/app1.cnf
    Stopped app1 successfully.
    [1]+  退出 1                nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null
    [root@host57 ~]# 
    
    [root@host57 ~]# nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &
    [1] 3618
    
    [root@host57 ~]# jobs
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    MHA集群缺点总结:

    ​ 必须要有vip地址

    ​ 宕机的主服务器需要手动添加到集群里,还需要手动同步宕机期间的数据

    ​ 管理服务发现主服务器宕机后,会调用故障切换脚本,

    ​ 把vip地址部署在新的主数据库服务器上。管理服务会

    ​ 自动停止,需要手动启动管理服务器,才能监视新的主数据服务器

    ​ 故障切换期间会有数据丢失的情况

    [root@host57 ~]#

    [root@host57 ~]# vim /etc/mha/app1.cnf #把51主机添加到配置文件里
    [server1]
    hostname=192.168.4.51
    port=3306
    candidate_master=1
    :wq

    masterha_secondary_check masterha_stop
    [root@host57 ~]# masterha_stop --conf=/etc/mha/app1.cnf
    Stopped app1 successfully.
    [1]+ 退出 1 nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null
    [root@host57 ~]#

    [root@host57 ~]# nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &
    [1] 3618

    [root@host57 ~]# jobs

    
    #### **MHA集群缺点总结:**
    
    ​    必须要有vip地址
    
    ​    宕机的主服务器需要手动添加到集群里,还需要手动同步宕机期间的数据
    
    ​    管理服务发现主服务器宕机后,会调用故障切换脚本,
    
    ​    把vip地址部署在新的主数据库服务器上。管理服务会
    
    ​    自动停止,需要手动启动管理服务器,才能监视新的主数据服务器
    
    ​    故障切换期间会有数据丢失的情况
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    如何基于原名称批量重命名(格式化)文件(夹)名
    java绘制标注框,注册字体
    如何在 C# 程序中注入恶意 DLL?
    智慧工地大数据管理,真是细节到极致了
    java中Date类之GMT、UTC
    基于ssm的课程思政资源众包系统的设计与实现毕业设计源码020838
    PCB板的元素组成
    PHP常见的SQL防注入方法
    【区间 DP】运用区间 DP 解决古老原题
    XLSX.utils.sheet_to_json()解析excel,给空的单元格赋值为空字符串
  • 原文地址:https://blog.csdn.net/weixin_56619848/article/details/126837030