Chinaunix首页 | 论坛 | 博客
  • 博客访问: 679378
  • 博文数量: 125
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 962
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-14 10:20
个人简介

我是一只小白兔~

文章分类

全部博文(125)

文章存档

2017年(16)

2016年(108)

2014年(1)

我的朋友

分类: Mysql/postgreSQL

2016-05-23 14:07:10

一、总概

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.在主机231232中/root/.ssh/下 执行
cat id_rsa.pub >> authorized_keys //导入公钥到/root/.ssh/authorized_keys文件中 3.测试201无密登录到231232 ssh 192.168.1.231 ssh 192.168.1.232 [node--231232]
重复执行上面的步骤。
通过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,并监控日志文件

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

六、

阅读(1956) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~