Heim  >  Artikel  >  Datenbank  >  MYSQL + MHA +keepalive + VIP安装配置(二)--MHA的配置

MYSQL + MHA +keepalive + VIP安装配置(二)--MHA的配置

WBOY
WBOYOriginal
2016-06-01 13:14:181115Durchsuche

一、总概

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.201manager安装:mha4mysql-manager-0.54-0.el6.noarch.rpmmaster机:192.168.1.231 节点安装: mha4mysql-node-0.54-0.el6.noarch.rpmslave1机: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///复现到主机231shell> scp id_rsa.pub root@192.168.1.232:/root/.ssh///复现到主机2322.在主机231、232中/root/.ssh/下 执行cat id_rsa.pub >> authorized_keys//导入公钥到/root/.ssh/authorized_keys文件中3.测试201无密登录到231、232ssh 192.168.1.231ssh 192.168.1.232[node--231、232]重复执行上面的步骤。通过ssh测试任何两台主机间两两可以无密登录。

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

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

1、manager mha4mysql-manager软件安装

[manager--201]shell> yum install perlshell> yum install cpanshell> rpm -ivh mha4mysql-manager-0.53-0.el6.noarch.rpmerror:perl(Config::Tiny) is needed by mha4mysql-manager-0.53-0.noarchperl(Log::Dispatch) is needed by mha4mysql-manager-0.53-0.noarchperl(Log::Dispatch::File) is needed by mha4mysql-manager-0.53-0.noarchperl(Log::Dispatch::Screen) is needed by mha4mysql-manager-0.53-0.noarchperl(Parallel::ForkManager) is needed by mha4mysql-manager-0.53-0.noarchperl(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<br>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<br>

再安装

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

五、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/app1manager_log=/masterha/app1/manager.logremote_workdir=/masterha/app1ssh_user=root//ssh免密钥登录的帐号名repl_user=sunney //mysql复制帐号,用来在主从机之间同步二进制日志等repl_password=sunney //mysql密码ping_interval=1//ping间隔,用来检测master是否正常[server1]hostname=192.168.1.231#ssh_port=9999master_binlog_dir=/var/lib/mysql //mysql数据库目录不同的安装方式目录不一样candidate_master=1 //master机宕掉后,优先启用这台作为新master[server2]hostname=192.168.1.232#ssh_port=9999master_binlog_dir=/var/lib/mysqlcandidate_master=1

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

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

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

Wed Apr23 22:10:01 2014 - [debug] ok.Wed Apr23 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.232Thu 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 succeededMaster 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上执行<br>shell>service mysql start //数据库启动<br>shell>mysql -usunney -psunneymysql> 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安装配置。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn