• ADADADADAD

    mysql MHA 高可用架构部署[ mysql数据库 ]

    mysql数据库 时间:2024-12-03 12:11:17

    作者:文/会员上传

    简介:

    MHA简介:即Master High Availability Manager and Tools for MySQL,是日本的一位MySQL专家采用Perl语言编写的一个脚本管理工具,该工具仅适用于MySQL Replication(二层)环境,目的

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    MHA简介:即Master High Availability Manager and Tools for MySQL,是日本的一位MySQL专家采用Perl语言编写的一个脚本管理工具,

    该工具仅适用于MySQL Replication(二层)环境,目的在于维持Master主库的高可用性。

    在 MySQL 故障切换过程中,MHA 能做到 0~30 秒之内自动完成数据库的故障

    切换操作,并且在进行故障切换的过程中,MHA 能最大程度上保证数据库的一致性,以达到

    真正意义上的高可用。

    MHA 由两部分组成:MHA Manager(管理节点)和 MHA Node(数据节点)。MHA Manager

    可以独立部署在一台独立的机器上管理多个Master-Slave集群,也可以部署在一台Slave上。

    当 Master 出现故障是,它可以自动将最新数据的 Slave 提升为新的 Master,然后将所有其他

    的 Slave 重新指向新的 Master。整个故障转移过程对应用程序是完全透明的。

    整体环境介绍:master1 :192.168.9.25master2 : 192.168.9.26slave1 :192.168.9.29slave2 :192.168.9.30manager 节点: 192.168.9.27lvs1: 192.168.9.27lvs2 : 192.168.9.28整体搭建流程思路:所有的mysql服务器上都要安装node软件,在manager管理服务器(9.27)上安装manager和node节点。然后所有的mysql数据里要创建mha管理用户,这里我起名字叫 admin
    下面演示具体搭建过程:
    一:9.27管理节点部署,安装node和manager软件,只要安装上既可以了,不用开启首先上传node和manager软件安装镜像(我硬盘里有)

    [root@lvs-a~]#rpm -ivhhttp://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm (6.5系统)

    [root@lvs-a~]##rpm -ivhhttp://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm(5.8)


    [root@lvs-a~]# ls /etc/yum.repos.d/

    base.repo epel.repo epel-testing.repo rhel-debuginfo.repo

    [root@lvs-a~]# yum -y install perl-DBD-MySQLncftp

    [root@lvs-atarbag]# tar -zxf mha4mysql-node-0.56..tar.gz -C /usr/local ## node软件解压

    [root@lvs-atarbag]# cd /usr/local/mha4mysql-node-0.56

    [root@lvs-atarbag]# perl Makefile.PL

    [root@lvs-atarbag]# make && make install## node安装

    [root@lvs-atarbag]# yum -y install perl-Config-Tiny perl-Params-Validate perl-Log-Dispatch perl-Parallel-ForkManager

    [root@lvs-atarbag]# tar -zxf mha4mysql-manager-0.56.tar.gz -C /usr/local/

    [root@lvs-atarbag]# cd /usr/local/mha4mysql-manager-0.56##manager软件安装

    [root@lvs-amha4mysql-manager-0.56]# perl Makefile.PL

    [root@lvs-amha4mysql-manager-0.56]# make && make install

    二:9.25主节点部署,只安装node即可

    [root@master1~]#rpm-ivhhttp://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
    [root@master1~]#ls/etc/yum.repos.d/
    base.repoepel.repoepel-testing.reporhel-debuginfo.repo
    [root@master1~]#yum-yinstallperl-DBD-MySQLncftp
    [root@master1tarbag]#tar-zxfmha4mysql-node-0.56..tar.gz-C/usr/local
    [root@master1tarbag]#cd/usr/local/mha4mysql-node-0.56
    [root@master1mha4mysql-node-0.56]#perlMakefile.PL
    [root@master1mha4mysql-node-0.56]#make&&makeinstall
    [root@master1mha4mysql-node-0.56]#ln-s/usr/local/mysql/bin/* /usr/local/bin/

    安装mysql软件 具体过程略过,参考:MySQL 主从同步复制架构搭建文档

    创建mha管理账号
    Mysql>grantallon*.*to'admin'@'%'identifiedby'123456';
    Mysql>flushprivileges;
    创建mysql主从管理账号
    Mysql>grantreplication slaveon*.*to'repl'@'%'identifiedby'123456';
    Mysql>flushprivileges;


    三、9.26主备节点部署(步骤同主库一样)

    [root@master2~]#rpm-ivhhttp://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
    [root@master2~]#ls/etc/yum.repos.d/
    base.repoepel.repoepel-testing.reporhel-debuginfo.repo
    [root@master2~]#yum-yinstallperl-DBD-MySQLncftp
    [root@master2tarbag]#tar-zxfmha4mysql-node-0.56..tar.gz -C/usr/local
    [root@master2tarbag]#cd/usr/local/mha4mysql-node-0.56
    [root@master2mha4mysql-node-0.56]#perlMakefile.PL
    [root@master2mha4mysql-node-0.56]#make&&makeinstall
    [root@master2mha4mysql-node-0.56]#ln-s/usr/local/mysql/bin/*/usr/local/bin/
    创建mha管理账号 其实可以不建立的,因为开始之前你要做让master1去恢复别的mysql,只要master1上有即可。
    Mysql>grantallon*.*to'admin'@'%'identifiedby'123456';
    Mysql>flushprivileges;
    创建mysql主从管理账号
    Mysql>grantreplicationslaveon*.*to'repl'@'%'identifiedby'123456';
    Mysql>flushprivileges;

    四:9.29 从节点部署

    [root@slave1~]#rpm-ivhhttp://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
    [root@slave1~]#ls/etc/yum.repos.d/
    base.repoepel.repoepel-testing.reporhel-debuginfo.repo
    [root@slave1~]#yum-yinstallperl-DBD-MySQLncftp
    [root@slave1tarbag]#tar-zxfmha4mysql-node-0.56..tar.gz-C/usr/local
    [root@slave1tarbag]#cd/usr/local/mha4mysql-node-0.56
    [root@slave1mha4mysql-node-0.56]#perlMakefile.PL
    [root@slave1mha4mysql-node-0.56]#make&&makeinstall
    [root@slave1mha4mysql-node-0.56]#ln-s/usr/local/mysql/bin/*/usr/local/bin/
    创建mha管理账号
    Mysql>grantallon*.*to'admin'@'%'identifiedby'123456';
    Mysql>flushprivileges;

    五:9.30从库操作参考9.29.


    六:至此需要安装的软件,已经基本完成,下面具体展示如何配置manager管理节点,mha上层可以通过keepalive部署VIP,程序连接数据库使用VIP,从而实现后台数据库的故障切换透明化。

    [root@lvs-a~]#mkdir-p /etc/masterha

    [root@lvs-a~]#mkdir -p /masterha/app1

    [root@lvs-amha4mysql-manager-0.56]#cp samples/conf/* /etc/masterha/

    [root@lvs-a~]#cat/etc/masterha/app1.cnf
    [serverdefault]
    manager_workdir=/masterha/app1
    manager_log=/masterha/app1/manager.log
    user=admin
    password=123456
    ssh_user=root
    repl_user=repl
    repl_password=123456
    ping_interval=1 #每秒ping一次
    shutdown_script=""
    master_ip_failover_script="/usr/local/bin/master_ip_failover"   ##这个脚本接下来会创建         
    master_ip_online_change_script=""
    report_script=""
    [server1]
    hostname=192.168.9.26
    master_binlog_dir=/mysql/data/log
    candidate_master=1              ##主库要有这个参数
    [server2]
    hostname=192.168.9.25
    master_binlog_dir=/mysql/data/log
    candidate_master=1
    [server3]
    hostname=192.168.9.29
    master_binlog_dir=/data/log
    [server4]
    hostname=192.168.9.30
    master_binlog_dir=/data/log/ #对应路径

    [root@lvs-au01]#cat/usr/local/bin/master_ip_failover  
    #!/bin/bash
    #--------------第一部分:变量及函数定义-----------------#
    ###BeginVariablesdefine###
    ssh_port=22
    cmd=/sbin/ifconfig
    vip=192.168.9.232
    device=eth0:0
    netmk=255.255.255.0
    start_vip="${cmd}${device}${vip}netmask${netmk}up"
    stop_vip="${cmd}${device}${vip}netmask${netmk}down"
    ###EndVariablesdefine###

    ###BeginStatusFunciont###
    status()
    {
    exit0
    }
    ###EndStatusFunciont###

    ###BeginStopOrStopsshFunciont###
    stop()
    {
    exit0
    }
    ###EndStopOrStopsshFunciont###

    ###BeginStartFunciont###
    start()
    {
    /usr/bin/ssh-p${ssh_port}${ssh_user}@${orig_master_host}""${stop_vip}""
    /usr/bin/ssh-p${ssh_port}${ssh_user}@${new_master_host}""${start_vip}""
    exit0
    }
    ###EndStartFunciont###
    #--------------第一部分:变量及函数定义-----------------#

    #--------------第二部分:命令行参数-----------------#
    ###BeginGetTheCommand-LineParameters###
    ###evalset--"`getopt-a-q-on-lcommand::,ssh_user:,orig_master_host:,orig_master_ip:,orig_master_port:,new_master_host:,new_master_ip:,new_master_port:,new_master_user:,new_master_password:--"$@"`"
    evalset--"`getopt-a-q-on-lcommand::,ssh_user:,orig_master_host:,orig_master_ip:,new_master_host:,new_master_ip:--"$@"`"

    if[$?!=0];thenecho"Terminating...">&2;exit1;fi

    whiletrue
    do
    case"$1"in
    --command)
    command="${2}";
    shift;;
    --ssh_user)
    ssh_user="${2}";
    shift;;
    --orig_master_host)
    orig_master_host="${2}";
    shift;;
    --orig_master_ip)
    orig_master_ip="${2}";
    shift;;
    --new_master_host)
    new_master_host="${2}";
    shift;;
    --new_master_ip)
    new_master_ip="${2}";
    shift;;
    --)
    shift;
    break;;
    esac
    shift
    done
    ###EndGetTheCommand-LineParameters###
    #--------------第二部分:命令行参数-----------------#

    #--------------第三部分:函数调用-----------------#
    if["${command}"=="status"];
    then
    status;
    fi
    if["${command}"=="stop"]||["${command}"=="stopssh"];
    then
    stop;
    fi
    if["${command}"=="start"];
    then
    start;
    fi
    七:建立互信,注意要涵盖所有服务器。下面仅展示一个服务器的。

    [root@lvs-a~]#ssh-keygen -t rsa

    [root@lvs-a~]#ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.9.25

    [root@lvs-a~]#ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.9.26

    [root@lvs-a~]#ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.9.29

    [root@lvs-a~]#ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.9.30

    八:检查mha配置是否正确。

    1.检查ssh是否配置成功

    [root@lvs-a~]#masterha_check_ssh --conf=/etc/masterha/app1.cnf

    最后显示如下字段说明成功:

    Tue Jun 30 01:58:05 2015 - [info] All SSH connection tests passed successfully.

    2.检查mysql主从复制状态是否成功

    [root@lvs-a~]#masterha_check_repl --conf=/etc/masterha/app1.cnf

    最后出现MySQL Replication Health is OK.字段说明成功。

    3. 启动管理节点进程

    [root@lvs-a~]#nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log < /dev/null 2>&1 &

    [1] 10085

    4.检查mha主从状态

    [root@lvs-a~]#masterha_check_status --conf=/etc/masterha/app1.cnf

    显示如下

    app1 (pid:10085) is running(0:PING_OK), master:192.168.153.147

    5. 停止mha

    [root@lvs-a~]#masterha_stop --conf=/etc/masterha/app1.cnf

    九:安装lvs+keepalived的具体过程参考,文档LVS+keepalived的安装部署 http://blog.itpub.net/29654823/viewspace-1844282/

    十:验证环境的正确性:

    关闭现在的主(9.25),vip9.232 会自动飘向主备(9.26),从而实现了主的高可用,这时候,manger(9.27)进程也就死了,需要手动起来。





    mysql MHA 高可用架构部署.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: mhamysql可用