MHA群集管理

环境:

192.168.205.37: as MHA server
192.168.205.47: as Master server
192.168.205.57: as Slave1 server
192.168.205.67: as Slave2 server

版本:

OS: centos 7 1810 with mini install
mariadb-server 5.5.60
mha4mysql-manager-0.56-0.el6.noarch.rpm
mha4mysql-node-0.56-0.el6.noarch.rpm

目地:

MHA使用perl脚本写的程序,当主节点down时如果从节点复制没有完成时,当他成为主节点后,它需要尝试将主节点的二进制日志复制到新的主节点,从而保证数据的完整性,所以它需要sshkey验证。我们使用一台做为管理节点,其中三个为数据库节点,一主两从,模拟主节点down机,看从是如何被提升为主节点的。

安装数据库

  1. 安装mariadb使用如下脚本:

    [[email protected] data]#cat maridb_yum.sh
    #!/bin/bash
    ID=`ip a show dev eth0 | sed -r ‘3!d;[email protected](.*inet)(.*)(/.*)@\[email protected]‘ | cut -d. -f4`
    rpm -q mariadb-server ||yum install -y mariadb-server
    [ -d /data/mysql ] || mkdir -p /data/mysql
    [ -d /data/logs ] || mkdir -p /data/logs
    chown mysql:mysql /data/{mysql,logs}
    sed -i ‘[email protected]=/var/lib/[email protected]=/data/[email protected]‘ /etc/my.cnf
    grep "log-bin" /etc/my.cnf || sed -i ‘/\[mysqld\]/a log-bin=/data/logs/bin‘ /etc/my.cnf
    grep "innodb_file_per_table" /etc/my.cnf || sed -i ‘/\[mysqld\]/a innodb_file_per_table = on‘ /etc/my.cnf
    grep "skip_name_resolve" /etc/my.cnf || sed -i ‘/\[mysqld\]/a skip_name_resolve = on‘ /etc/my.cnf
    grep "server-id" /etc/my.cnf || sed -i "/\[mysqld\]/a server-id=$ID" /etc/my.cnf
    service mariadb restart
  2. 修改两个从节点的配置文件
    [[email protected] data]#vi /etc/my.cnf
    [mysqld]
    read_only
    relay_log_purge=0     #不删除中继日志
  3. 建立主节点的复制位置和帐号
    MariaDB [(none)]> show master logs;
    +------------+-----------+
    | Log_name   | File_size |
    +------------+-----------+
    | bin.000001 |     30373 |
    | bin.000002 |   1038814 |
    | bin.000003 |       245 |
    +------------+-----------+
    3 rows in set (0.00 sec)
    
    MariaDB [(none)]> grant replication slave on *.* to [email protected]‘192.168.205.%‘ identified by ‘centos‘;
    Query OK, 0 rows affected (0.00 sec)
    MariaDB [(none)]> grant all on *.* to [email protected]‘192.168.205.%‘ identified by ‘centos‘;
    Query OK, 0 rows affected (0.00 sec)
  4. 配置从节点的change master to并启动线程
    MariaDB [(none)]> CHANGE MASTER TO
        ->   MASTER_HOST=‘192.168.205.47‘,
        ->   MASTER_USER=‘repluser‘,
        ->   MASTER_PASSWORD=‘centos‘,
        ->   MASTER_PORT=3306,
        ->   MASTER_LOG_FILE=‘bin.000003‘,
        ->   MASTER_LOG_POS=245;
    Query OK, 0 rows affected (0.01 sec)
    
    MariaDB [(none)]> start slave;
    Query OK, 0 rows affected (0.00 sec)
    MariaDB [(none)]> show slave status\G
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.205.47
                      Master_User: repluser
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: bin.000003
              Read_Master_Log_Pos: 401
                   Relay_Log_File: mariadb-relay-bin.000002
                    Relay_Log_Pos: 679
            Relay_Master_Log_File: bin.000003
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes

    MHA实现

  5. 安装包,mha依赖epel源,我们要把epel起用
    [[email protected] ~]#yum install mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-node-0.56-0.el6.noarch.rpm 
  6. 在所有的sql节点上安装node包
    [[email protected] ~]#yum install mha4mysql-node-0.56-0.el6.noarch.rpm
    [[email protected] data]#yum install mha4mysql-node-0.56-0.el6.noarch.rpm
    [[email protected] data]#yum install mha4mysql-node-0.56-0.el6.noarch.rpm 
  7. 配置ssh key 验证
    [[email protected] ~]#ssh-keygen
    [[email protected] ~]#ssh-copy-id 192.168.205.37
    [[email protected] ~]#cat .ssh/authorized_keys
    [[email protected] ~]#scp -r .ssh 192.168.205.47:/root/
    [[email protected] ~]#scp -r .ssh 192.168.205.57:/root/
    [[email protected] ~]#scp -r .ssh 192.168.205.67:/root/
  8. 生成配置MHA文件
    [[email protected] ~]#mkdir /etc/mha
    [[email protected] ~]#vim /etc/mha/app1.cnf
    [server default]
    master_binlog_dir=/data/logs/
    user=mhauser
    password=centos
    manager_workdir=/data/mastermha/app1/
    manager_log=/data/mastermha/app1/manager.log
    remote_workdir=/data/mastermha/app1/
    ssh_user=root
    repl_user=repluser
    repl_password=centos
    ping_interval=1
    [server1]
    hostname=192.168.205.47
    candidate_master=1
    [server2]
    hostname=192.168.205.57
    [server3]
    hostname=192.168.205.67
    candidate_master=1
  9. 启动之前进行检查ssh,repl复制是否准备好
    [[email protected] ~]#masterha_check_ssh --conf=/etc/mha/app1.cnf
    [[email protected] ~]#masterha_check_repl --conf=/etc/mha/app1.cnf
  10. 起动进程,此进程前台运行,当主节点失败时切换完成后它会终止,所以要想持续要重启进程
    [[email protected] ~]#masterha_manager --conf=/etc/mha/app1.cnf
    Mon Aug 12 23:33:22 2019 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
    Mon Aug 12 23:33:22 2019 - [info] Reading application default configuration from /etc/mha/app1.cnf..
    Mon Aug 12 23:33:22 2019 - [info] Reading server configuration from /etc/mha/app1.cnf..

    测试

  11. 我们模拟一个正在写入操作时,主节点down, 看服务器能不能正常切换并不能复制丢失的数据
    MariaDB [(none)]> use test;
    Database changed
    MariaDB [test]> create table testlog (id int auto_increment primary key,name char(10),age int default 20);
    
    Query OK, 0 rows affected (0.01 sec)
    
    MariaDB [test]>
    MariaDB [test]> delimiter $$
    MariaDB [test]>
    MariaDB [test]> create procedure  sp_testlog()
        -> begin
        -> declare i int;
        -> set i = 1;
        -> while i <= 100000
        -> do  insert into testlog(name,age) values (concat(‘wang‘,i),i);
        -> set i = i +1;
        -> end while;
        -> end$$
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [test]>
    MariaDB [test]> delimiter ;
    MariaDB [test]> call sp_testlog;
  12. 正在写入数据时我们及时关闭47服务器,MHA检测到节点,并响应,成功提升其它的为主后退出程序。
    [[email protected] ~]#masterha_manager --conf=/etc/mha/app1.cnf
    Mon Aug 12 23:33:22 2019 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
    Mon Aug 12 23:33:22 2019 - [info] Reading application default configuration from /etc/mha/app1.cnf..
    Mon Aug 12 23:33:22 2019 - [info] Reading server configuration from /etc/mha/app1.cnf..
    Mon Aug 12 23:45:16 2019 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
    Mon Aug 12 23:45:16 2019 - [info] Reading application default configuration from /etc/mha/app1.cnf..
    Mon Aug 12 23:45:16 2019 - [info] Reading server configuration from /etc/mha/app1.cnf..
    [[email protected] ~]#
  13. 我们可以查看日志看一下发生的情况,slave2提升为主
    [[email protected] data]#cat mastermha/app1/manager.log
    ----- Failover Report -----
    
    app1: MySQL Master failover 192.168.205.47(192.168.205.47:3306) to 192.168.205.67(192.168.205.67:3306) succeeded
    
    Master 192.168.205.47(192.168.205.47:3306) is down!
    
    Check MHA Manager logs at MHA:/data/mastermha/app1/manager.log for details.
    
    Started automated(non-interactive) failover.
    The latest slave 192.168.205.57(192.168.205.57:3306) has all relay logs for recovery.
    Selected 192.168.205.67(192.168.205.67:3306) as a new master.
    192.168.205.67(192.168.205.67:3306): OK: Applying all logs succeeded.
    192.168.205.57(192.168.205.57:3306): This host has the latest relay log events.
    Generating relay diff files from the latest slave succeeded.
    192.168.205.57(192.168.205.57:3306): OK: Applying all logs succeeded. Slave started, replicating from 192.168.205.67(192.168.205.67:3306)
    192.168.205.67(192.168.205.67:3306): Resetting slave info succeeded.
    Master failover to 192.168.205.67(192.168.205.67:3306) completed successfully.
  14. 我们来核实一下,在slave2上看一下slave的状态,发现已经没了,因为它是主
    MariaDB [(none)]> show slave status\G
    Empty set (0.00 sec)
  15. 检查一下slave1,发现主节点指向了slave2
    MariaDB [test]> show slave status\G
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.205.67
                      Master_User: repluser
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: bin.000005
              Read_Master_Log_Pos: 245
                   Relay_Log_File: mariadb-relay-bin.000002
                    Relay_Log_Pos: 523
            Relay_Master_Log_File: bin.000005
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
  16. 在新主节点上看一下是否将read_only off掉,发现是,但不要忘记改回配置文件,如果重启的话又会变成read_only
    MariaDB [(none)]> show variables like ‘read_only‘;
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | read_only     | OFF   |
    +---------------+-------+
    1 row in set (0.00 sec)

原文地址:https://blog.51cto.com/127601/2428895

时间: 2024-08-28 17:40:30

MHA群集管理的相关文章

vSphere部署系列之09——HA和DRS群集管理

群集(Cluster)是将多台物理主机组织起来,群集管理其中所有主机的资源,形成一个大的资源池.群集中的所有的虚拟机可在池中的任意主机上自由移动,并且群集可做到快速扩容和HA故障冗余.群集的前提条件是要有共享存储,所有虚拟机及其配置文件必须驻留在共享存储器上. 在前面的博文章节中,已搭建了比较基础的实验环境,实现了vCenter对ESXi主机的管理,网络管理.共享存储管理.在这种情况下,各物理主机之间的计算资源(CPU.内存)是完全独立的,在某台主机出现问题时,虚拟机的运行得不到保障. 为了达到

记一次AD域域管理员密码更改导致某系统群集管理器故障排查解决过程

环境描述 某公司有一套系统,2台Windows2003系统,采用自带的群集管理器功能实现双机热备功能,正常情况下,服务器10.1.1.1承载中间件应用服务,服务器10.1.1.2承载数据库服务,仅当其中一台服务器故障时才会把资源切换至另一台. 系统名称 系统版本 IP地址 备注 S-EIP-APP Windows2003ENTSP2 10.1.1.1 采用Windows2003自带的群集管理器实现双机热备功能 S-EIP-DATA Windows2003ENTSP2 10.1.1.2 故障表现

MHA动态管理主从复制并结合zabbix完成监控

MHA节点:会通过监控到的master节点故障时,会提升其中用于最新数据的slave节点成为新的master节点,在此期间,MHA会通过其他从节点获取额外信息来避免一致性方面的问题.MHA还提供了master节点的在线切换功能,即按需切换master/slave节点. 注:不过,这个正常使用在centos6上面创建是没有问题的,但是要是centos7上面安装没什么问题,基本使用也可以,但是不知道在生产环境中的坑有没有,所以还望大家甄别. 实验环境:四台centos7 主机ip          

MHA 日常管理

MHA是众多使用MySQL数据库企业高可用的不二选择,它简单易用,功能强大,实现了基于MySQL replication架构的自动主从故障转移.本文主要描述MHA的日常相关操作,同时给出了关于MHA的相关连接,供大家参考. 一.MHA的主要脚本(perl)1.manager端masterha_check_ssh              检查MHA的SSH配置状况masterha_check_repl             检查MySQL复制状况masterha_manger         

MySQL MHA + Ifconfig管理vip

前期的安装步骤,还是参照:http://www.cnblogs.com/yiyuf/p/4104354.html进行,只需要把appxxx.cnf中定义的相关.sh脚本(如:master_ip_failover.sh,master_ip_onlie_change.sh) 进过测试的master_ip_failover.sh脚本如下,为了区别,该脚本命名为master_ip_failover_ifconfig.sh,其内容如下: #!/usr/bin/env perl # Copyright (C

kafka群集管理

Kafka版本 0.8.1-0.8.2 一.创建topic模板: /usr/hdp/2.2.0.0-2041/kafka/bin/kafka-topics.sh  --create  --zookeeper  IP:2181  --replication-factor  2 --partitions 30  --topic TEST 二.删除topic模板:(指定所有zookeeper server IP) /usr/hdp/2.2.0.0-2041/kafka/bin/kafka-run-cl

cluster maintain manager Software群集管理软件

1,ocfs2 2,crmsh(cluster management shell,)==crm shell [pacemaker OpenAIS,heartbeat,corosync,crmsh] 3,开源的ceph pk RedHat Gluster crm-moncorosync-cfgtool,corosync-objctl 4,(MySQL,MariaDB galera cluster)

MongoDB分片群集(实现分片服务启用、分片服务管理、单点故障模拟)

MongoDB分片概述 1.什么是分片 高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上. MongoDB分片是使用多个服务器存储数据的方法,以支持巨大的数据存储和对数据进行操作.分片技术可以满足MongoDB数据量大量增长的需求,当一台服务器存储量不够时,可以通过再外接一台分片服务器,使得数据库系统能够存储更多的数据 2.MongoDB分片优势 使用分片减少了每个分片需要处理的请

MySQL数据库---MHA高可用群集架构

MHA概述 日本DeNA公司youshimaton (现就职于Facebook公司) 开发 一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件 MHA的组成 MHA Manager (管理节点) MHA Node (数据节点) MHA特点 自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失 使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险 实验思路 1.MHA架构 (1)数据库安装 (2)一主两从 (3)MHA搭建 2.故障