zoukankan      html  css  js  c++  java
  • MYSQL + MHA +keepalive + VIP安装配置(二)--MHA的配置

    一、总概

    1、MHA介绍

          MHA(Master High Availability)是自动的master故障转移和Slave提升的软件包.它是基于标准的MySQL复制(异步/半同步).
          MHA有两部分组成:MHA Manager(管理节点)和MHA Node(数据节点).
          MHA Manager可以单独部署在一台独立机器上管理多个master-slave集群,也可以部署在一台slave上.MHA Manager探测集群的node节点,当发现master出现故障的时候,它可以自动将具有最新数据的slave提升为新的master,然后将所有其 它的slave导向新的master上.整个故障转移过程对应用程序是透明的。
          MHA node运行在每台MySQL服务器上(master/slave/manager),它通过监控具备解析和清理logs功能的脚本来加快故障转移的。

    2、MHA工作原理

    -从宕机崩溃的master保存二进制日志事件(binlog events)。
    -识别含有最新更新的slave。
    -应用差异的中继日志(relay log)到其它slave。
    -应用从master保存的二进制日志事件(binlog events)。
    -提升一个slave为新master。
    -使其它的slave连接新的master进行复制。

    3、MHA工具包:

    (1)、 Manager工具:
    - masterha_check_ssh : 检查MHA的SSH配置。
    - masterha_check_repl : 检查MySQL复制。
    - masterha_manager : 启动MHA。
    - masterha_check_status : 检测当前MHA运行状态。
    - masterha_master_monitor : 监测master是否宕机。
    - masterha_master_switch : 控制故障转移(自动或手动)。
    - masterha_conf_host : 添加或删除配置的server信息。

    (2)、 Node工具(这些工具通常由MHA Manager的脚本触发,无需人手操作)。
    - save_binary_logs : 保存和复制master的二进制日志。
    - apply_diff_relay_logs : 识别差异的中继日志事件并应用于其它slave。
    - filter_mysqlbinlog : 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)。
    - purge_relay_logs : 清除中继日志(不会阻塞SQL线程)。

    二、主机部署

    manager机:192.168.1.201  manager安装:mha4mysql-manager-0.54-0.el6.noarch.rpm
    master机:192.168.1.231   节点安装: mha4mysql-node-0.54-0.el6.noarch.rpm
    slave1机:192.168.1.232(备用master) 节点安装:mha4mysql-node-0.54-0.el6.noarch.rpm

     三、首先用ssh-keygen实现三台主机之间相互免密钥登录

    [manager--201]
    1、生成证书
    shell> ssh-keygen -t rsa -b 2048  //一直按回车直接生成。
    shell> scp id_rsa.pub root@192.168.1.231:/root/.ssh/  //复现到主机231
    shell> scp id_rsa.pub root@192.168.1.232:/root/.ssh/  //复现到主机232
    2.在主机231、232中/root/.ssh/下 执行
    cat id_rsa.pub >> authorized_keys
    //导入公钥到/root/.ssh/authorized_keys文件中
    3.测试201无密登录到231、232
    ssh 192.168.1.231
    ssh 192.168.1.232
    [node--231、232]
    重复执行上面的步骤。
    通过ssh测试任何两台主机间两两可以无密登录。
    

     注意:如果不能实现任何两台主机间两两可以无密登录,后面的步骤会有问题。

    四、安装MHAmha4mysql-node,mha4mysql-manager 软件包

    1、manager mha4mysql-manager软件安装

    [manager--201]
    shell> yum install perl
    shell> yum install cpan
    shell> rpm -ivh mha4mysql-manager-0.53-0.el6.noarch.rpm
    error:
    perl(Config::Tiny) is needed by mha4mysql-manager-0.53-0.noarch
    perl(Log::Dispatch) is needed by mha4mysql-manager-0.53-0.noarch
    perl(Log::Dispatch::File) is needed by mha4mysql-manager-0.53-0.noarch
    perl(Log::Dispatch::Screen) is needed by mha4mysql-manager-0.53-0.noarch
    perl(Parallel::ForkManager) is needed by mha4mysql-manager-0.53-0.noarch
    perl(Time::HiRes) is needed by mha4mysql-manager-0.53-0.noarch

    说明有很多依赖包没有安装,解决方法:

    shell> wget ftp://ftp.muug.mb.ca/mirror/centos/5.10/os/x86_64/CentOS/perl-5.8.8-41.el5.x86_64.rpm 
    shell> wget ftp://ftp.muug.mb.ca/mirror/centos/6.5/os/x86_64/Packages/compat-db43-4.3.29-15.el6.x86_64.rpm 
    shell> wget http://downloads.naulinux.ru/pub/NauLinux/6x/i386/sites/School/RPMS/perl-Log-Dispatch-2.27-1.el6.noarch.rpm 
    shell> wget http://dl.fedoraproject.org/pub/epel/6/i386/perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm 
    shell> wget http://dl.fedoraproject.org/pub/epel/6/i386/perl-Mail-Sender-0.8.16-3.el6.noarch.rpm 
    shell> wget http://dl.fedoraproject.org/pub/epel/6/i386/perl-Mail-Sendmail-0.79-12.el6.noarch.rpm 
    shell> wget http://mirror.centos.org/centos/6/os/x86_64/Packages/perl-Time-HiRes-1.9721-136.el6.x86_64.rpm
    shell> rpm -ivh perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm perl-Log-Dispatch-2.27-1.el6.noarch.rpm perl-Mail-Sender-0.8.16-3.el6.noarch.rpm perl-Mail-Sendmail-0.79-12.el6.noarch.rpm perl-Time-HiRes-1.9721-136.el6.x86_64.rpm

    再安装

    shell> rpm -ivh mha4mysql-manager-0.53-0.el6.noarch.rpm

    2、node MHAmha4mysql-node软件安装

    shell>wget http://mirror.centos.org/centos/6/os/x86_64/Packages/perl-DBD-MySQL-4.013-3.el6.x86_64.rpm
    shell>rpm -ivh perl-DBD-MySQL-4.013-3.el6.x86_64.rpm
    shell>wget http://mysql-master-ha.googlecode.com/files/mha4mysql-node-0.54-0.el6.noarch.rpm
    shell>rpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm
    安装过程可能会报错(具体错误我没有记下)都是依赖包的问题,这么解决吧
    shell>yum install perl-MIME-Lite
         yum install perl-Params-Validate

    五、MHA的配置

    1、管理机manager上配置MHA文件

    shell> mkdir -p /masterha/app1    //创建目录
    shell> mkdir /etc/masterha        //创建目录
    shell> vi /etc/masterha/app1.cnf  //创建配置文件
    [server default]
    user=root                //linux用于管理mysql用戶名
    password=sunney          //linux用于管理mysql密码
    manager_workdir=/masterha/app1
    manager_log=/masterha/app1/manager.log
    remote_workdir=/masterha/app1
    ssh_user=root            //ssh免密钥登录的帐号名
    repl_user=sunney         //mysql复制帐号,用来在主从机之间同步二进制日志等
    repl_password=sunney     //mysql密码
    ping_interval=1          //ping间隔,用来检测master是否正常
    [server1]
    hostname=192.168.1.231
    #ssh_port=9999
    master_binlog_dir=/var/lib/mysql //mysql数据库目录不同的安装方式目录不一样
    candidate_master=1               //master机宕掉后,优先启用这台作为新master
    [server2]
    hostname=192.168.1.232
    #ssh_port=9999
    master_binlog_dir=/var/lib/mysql
    candidate_master=1

    2、masterha_check_ssh工具验证ssh信任登录是否成功

    [manager:201]
    shell> masterha_check_ssh --conf=/etc/masterha/app1.cnf

     注意:用ssh-keygen实现三台主机之间相互免密钥登录决定这一步是否成功。

    Wed Apr  23 22:10:01 2014 - [debug]   ok.
    Wed Apr  23 22:10:01 2014 - [info] All SSH connection tests passed successfully.

    成功!

    3、masterha_check_repl工具验证mysql复制是否成功

    [manager:201]
    shell> masterha_check_repl --conf=/etc/masterha/app1.cnf

     注意:上一篇文章中的master--slaver是否成功决定这一步是否成功。或是MHA文件配置的用户账号有关。

    Wed Apr 23 22:10:56 2014 - [info] Checking replication health on 192.168.1.232..
    Wed Apr 23 22:10:56 2014 - [info]  ok.
    Wed Apr 23 22:10:56 2014 - [warning] master_ip_failover_script is not defined.
    Wed Apr 23 22:10:56 2014 - [warning] shutdown_script is not defined.
    Wed Apr 23 22:10:56 2014 - [info] Got exit code 0 (Not master dead).
    
    MySQL Replication Health is OK.

    成功。

    4、启动MHA manager,并监控日志文件

    [manager:201]
    shell> nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log 2>&1 
    shell> tail -f /masterha/app1/manager.log  //这名最好在新窗口执行

    结果:

    Thu Apr 24 04:41:03 2014 - [info] Slaves settings check done.
    Thu Apr 24 04:41:03 2014 - [info] 
    192.168.1.231 (current master)
     +--192.168.1.232
    Thu Apr 24 04:41:03 2014 - [warning] master_ip_failover_script is not defined.
    Thu Apr 24 04:41:03 2014 - [warning] shutdown_script is not defined.
    Thu Apr 24 04:41:03 2014 - [info] Set master ping interval 1 seconds.
    Thu Apr 24 04:41:03 2014 - [warning] secondary_check_script is not defined. It is highly recommended setting it to check master reachability from two or more routes.
    Thu Apr 24 04:41:03 2014 - [info] Starting ping health check on 192.168.1.231(192.168.1.231:3306)..
    Thu Apr 24 04:41:03 2014 - [info] Ping(SELECT) succeeded, waiting until MySQL doesn't respond..

    5、测试master(231)宕机后,是否会自动切换

    [master--231]
    shell>service mysql stop
    [manager--201]
    shell>tail -f tail -f /masterha/app1/manager.log
    -----日志显示如下------
    -------- Failover Report -----
    
    app1: MySQL Master failover 192.168.1.231 to 192.168.1.232 succeeded
    
    Master 192.168.1.231 is down!
    
    Check MHA Manager logs at localhost.localdomain:/masterha/app1/manager.log for details.
    
    Started automated(non-interactive) failover.
    The latest slave 192.168.1.232(192.168.1.232:3306) has all relay logs for recovery.
    Selected 192.168.1.232 as a new master.
    192.168.1.232: OK: Applying all logs succeeded.
    Generating relay diff files from the latest slave succeeded.
    192.168.1.232: Resetting slave info succeeded.
    Master failover to 192.168.1.232(192.168.1.232:3306) completed successfully.

    6、故障转移后,用命令恢复原来的master

    (1)、在旧master上执行

    1.在旧master上执行
    shell>service mysql start //数据库启动
    shell>mysql -usunney -psunney mysql
    > reset master; mysql> change master to master_host='192.168.1.232', master_port=3306, master_user='sunney', master_password='sunney', master_log_file='mysql-bin.000031', master_log_pos=112; mysql> start slave; #暂时先把旧master变为slave

    (2)然后在manager节点上:

    shell> masterha_master_switch --master_state=alive --conf=/etc/masterha/app1.cnf

     过程中一直输入YES;

     这样的话mysql主从机进行了切换。可以测试一下数据在新的master(232)的表中新增数据后,在新slave(231)对应的表中是否已实现数据同步。

    六、MHA已完成配置并进行了测试。但如果是程序连接数据库并不会自动切换IP,那我们如何实现呢,请期待一篇keepalive + VIP安装配置。

  • 相关阅读:
    [git 学习篇]自己在github创建一个远程服务器创库
    [git 学习篇]远程创库
    [git 学习篇]删除文件
    [git 学习篇] git checkout 撤销修改
    [git 学习篇]git管理的是修改,并非文件
    log4net面面观之Repository
    log4net面面观之工作原理
    asp.net获取当前页面文件名,参数,域名等方法。统一session验证和权限验证的方法
    C#使用Log4Net记录日志
    SharePoint 2010中的客户端AJAX应用——ASP.NET AJAX模板
  • 原文地址:https://www.cnblogs.com/yuanermen/p/3726961.html
Copyright © 2011-2022 走看看