MHA 安装手册

MHA软件由两部分组成,Manager工具包和Node工具包,具体的说明如下。

Manager工具包主要包括以下几个工具:

masterha_check_ssh              检查MHA的SSH配置状况
masterha_check_repl             检查MySQL复制状况
masterha_manger                 启动MHA
masterha_check_status           检测当前MHA运行状态
masterha_master_monitor         检测master是否宕机
masterha_master_switch          控制故障转移(自动或者手动)
masterha_conf_host              添加或删除配置的server信息

Node工具包(这些工具通常由MHA Manager的脚本触发,无需人为操作)主要包括以下几个工具:

save_binary_logs                保存和复制master的二进制日志
apply_diff_relay_logs           识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog              去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs                清除中继日志(不会阻塞SQL线程)

1.部署MHA

接下来部署MHA,具体的搭建环境如下(所有操作系统均为centos 6.2 64bit,不是必须,server03和server04是server02的从,):

角色                    ip地址          主机名          server_id              类型
Monitor host            10.10.10.155    db-manager      -                      监控复制组
Master                  10.10.10.156    db-master   1                      写入
Candicate master        10.10.10.157    db-slave01      2                      读
Slave                   10.10.10.158    db-slave02      3                      读

其中master对外提供写服务,备选master(实际的slave,主机名server03)提供读服务,
slave也提供相关的读服务,一旦master宕机,将会把备选master提升为新的master,slave指向新的master

(1)在所有节点安装MHA node所需的perl模块(DBD:mysql),安装脚本如下:(run this shell )cat install.sh #!/bin/bashwget http://xrl.us/cpanm --no-check-certificatemv cpanm /usr/binchmod 755 /usr/bin/cpanmcat > /root/list << EOFinstall DBD::mysqlEOFfor package in `cat /root/list`docpanm $packagedone    如果有安装epel源,也可以使用yum安装安装以下perl 支持包yum install perl-DBD-MySQL -yyum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker -yyum install gettext-devel -yyum install perl-CPAN -y在所有的节点安装mha node:tar xf mha4mysql-node-0.56.tar.gzcd mha4mysql-node-0.56perl Makefile.PLmake && make install安装完成后,会生成node 所需的工具包[root@bd-slave02 mha4mysql-node-0.56]# ll /usr/local/bin
总用量 44
-r-xr-xr-x 1 root root 16367 1月  31 11:33 apply_diff_relay_logs
-r-xr-xr-x 1 root root  4807 1月  31 11:33 filter_mysqlbinlog
-r-xr-xr-x 1 root root  8261 1月  31 11:33 purge_relay_logs
-r-xr-xr-x 1 root root  7525 1月  31 11:33 save_binary_logs2.安装MHA ManagerMHA Manager中主要包括了几个管理员的命令行工具,例如master_manger,master_master_switch等。MHA Manger也依赖于perl模块,具体如下:(1)安装MHA Node软件包之前需要安装依赖。我这里使用yum完成,没有epel源的可以使用上面提到的脚本(epel源安装也简单)。注意:在MHA Manager的主机也是需要安装MHA Node。rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install perl-DBD-MySQL -y
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y安装MHA Manager软件包:[root@bd-master download]# tar xf mha4mysql-manager-0.56.tar.gz
[root@bd-master download]# cd mha4mysql-manager-0.56/
[root@bd-master mha4mysql-manager-0.56]# perl Makefile.PL
*** Module::AutoInstall version 1.03
*** Checking for Perl dependencies...
[Core Features]
- DBI                   ...loaded. (1.627)
- DBD::mysql            ...loaded. (4.023)
- Time::HiRes           ...loaded. (1.9725)
- Config::Tiny          ...loaded. (2.14)
- Log::Dispatch         ...loaded. (2.41)
- Parallel::ForkManager ...loaded. (1.18)
- MHA::NodeConst        ...missing.     (注意: 在manager 节点,也需要安装node ,安装完后,再回来安装manager cefp )
==> Auto-install the 1 mandatory module(s) from CPAN? [y] y安装完成后,会生成以下文件[root@bd-master mha4mysql-manager-0.56]# ll /usr/local/bin
总用量 84
-r-xr-xr-x 1 root root 16367 1月  31 11:46 apply_diff_relay_logs
-r-xr-xr-x 1 root root  4807 1月  31 11:46 filter_mysqlbinlog
-r-xr-xr-x 1 root root  1995 1月  31 11:47 masterha_check_repl
-r-xr-xr-x 1 root root  1779 1月  31 11:47 masterha_check_ssh
-r-xr-xr-x 1 root root  1865 1月  31 11:47 masterha_check_status
-r-xr-xr-x 1 root root  3201 1月  31 11:47 masterha_conf_host
-r-xr-xr-x 1 root root  2517 1月  31 11:47 masterha_manager
-r-xr-xr-x 1 root root  2165 1月  31 11:47 masterha_master_monitor
-r-xr-xr-x 1 root root  2373 1月  31 11:47 masterha_master_switch
-r-xr-xr-x 1 root root  5171 1月  31 11:47 masterha_secondary_check
-r-xr-xr-x 1 root root  1739 1月  31 11:47 masterha_stop
-r-xr-xr-x 1 root root  8261 1月  31 11:46 purge_relay_logs
-r-xr-xr-x 1 root root  7525 1月  31 11:46 save_binary_logs
[root@bd-master mha4mysql-manager-0.56]# 拷贝脚本到/usr/local/bin
[root@bd-master mha4mysql-manager-0.56]# ll samples/scripts
总用量 32
-rwxr-xr-x 1 4984 users  3648 4月   1 2014 master_ip_failover
-rwxr-xr-x 1 4984 users  9870 4月   1 2014 master_ip_online_change
-rwxr-xr-x 1 4984 users 11867 4月   1 2014 power_manager
-rwxr-xr-x 1 4984 users  1360 4月   1 2014 send_report
[root@bd-master mha4mysql-manager-0.56]# cp samples/scripts/* /usr/local/bin
[root@bd-master mha4mysql-manager-0.56]# 3.配置SSH登录无密码验证(节抄自以前配置oracle rac) 设置SSH,1).在主节点RAC1上以grid,oracle用户身份生成用户的公匙和私匙# su - oracle$ mkdir ~/.ssh$ ssh-keygen -t rsa$ ssh-keygen -t dsa2).在副节点RAC2上执行相同的操作,确保通信无阻# ping rac1-eth0# ping rac1-eth1# su - oracle$ mkdir ~/.ssh$ ssh-keygen -t rsa$ ssh-keygen -t dsa3).在主节点RAC1上oracle用户执行以下操作$ touch ~/.ssh/authorized_keys $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys#将RAC2的加入$ ssh rac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys$ ssh rac2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys$ scp ~/.ssh/authorized_keys rac2:~/.ssh/authorized_keys4).主节点RAC1上执行检验操作$ ssh rac1 date$ ssh rac2 date$ ssh rac1-private date$ ssh rac2-private date5).在副节点RAC2上执行检验操作$ ssh rac1 date$ ssh rac2 date$ ssh rac1-private date$ ssh rac2-private date4.编译安装mysql 主从架构见mysql 主从架构安装.log5.配置半同步首先加载插件因用户需执行INSTALL PLUGIN, SET GLOBAL, STOP SLAVE和START SLAVE操作,所以用户需有SUPER权限。主:mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';从:mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';查看插件是否加载成功有两种方式1. mysql> show plugins;rpl_semi_sync_master       | ACTIVE   | REPLICATION        | semisync_master.so | GPL  2. mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS  WHERE PLUGIN_NAME LIKE '%semi%';+----------------------+---------------+| PLUGIN_NAME          | PLUGIN_STATUS |+----------------------+---------------+| rpl_semi_sync_master | ACTIVE        |+----------------------+---------------+1 row in set (0.00 sec)启动半同步复制在安装完插件后,半同步复制默认是关闭的,这时需设置参数来开启半同步主:mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;从:mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;以上的启动方式是在命令行操作,也可写在配置文件中。主:plugin-load=rpl_semi_sync_master=semisync_master.sorpl_semi_sync_master_enabled=1rpl_semi_sync_master_timeout=1000从:plugin-load=rpl_semi_sync_slave=semisync_slave.sorpl_semi_sync_slave_enabled=1在有的高可用架构下,master和slave需同时启动,以便在切换后能继续使用半同步复制plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"rpl-semi-sync-master-enabled = 1rpl-semi-sync-slave-enabled = 1重启从上的IO线程mysql> STOP SLAVE IO_THREAD;mysql> START SLAVE IO_THREAD;如果没有重启,则默认还是异步复制,重启后,slave会在master上注册为半同步复制的slave角色。这时候,主的error.log中会打印如下信息:2016-08-05T10:03:40.104327Z 5 [Note] While initializing dump thread for slave with UUID <ce9aaf22-5af6-11e6-850b-000c2988bad2>, found a zombie dump thread with the same UUID. Master is killing the zombie dump thread(4).2016-08-05T10:03:40.111175Z 4 [Note] Stop asynchronous binlog_dump to slave (server_id: 2)2016-08-05T10:03:40.119037Z 5 [Note] Start binlog_dump to master_thread_id(5) slave_server(2), pos(mysql-bin.000003, 621)2016-08-05T10:03:40.119099Z 5 [Note] Start semi-sync binlog_dump to slave (server_id: 2), pos(mysql-bin.000003, 621)查看半同步是否在运行主:mysql> show status like 'Rpl_semi_sync_master_status';+-----------------------------+-------+| Variable_name               | Value |+-----------------------------+-------+| Rpl_semi_sync_master_status | ON    |+-----------------------------+-------+1 row in set (0.00 sec)从:mysql> show status like 'Rpl_semi_sync_slave_status';+----------------------------+-------+| Variable_name              | Value |+----------------------------+-------+| Rpl_semi_sync_slave_status | ON    |+----------------------------+-------+1 row in set (0.20 sec)这两个变量常用来监控主从是否运行在半同步复制模式下。6.配置MHA5.1 配置文件修改创建MHA的工作目录,并且创建相关配置文件(在软件包解压后的目录里面有样例配置文件)。# mkdir -p /etc/masterha# cp mha4mysql-manager-0.53/samples/conf/app1.cnf #配置文件[root@bd-master ~]# cat /etc/masterhamasterha/             masterha_default.cnf  [root@bd-master ~]# cat /etc/masterha/app1.cnf [server default]manager_workdir=/var/log/masterha/app1manager_log=/var/log/masterha/app1/manager.logmaster_binlog_dir=/data/mysqlmaster_ip_failover_script= /usr/local/bin/master_ip_failovermaster_ip_online_change_script= /usr/local/bin/master_ip_online_changeuser=monitorpassword=monitor_passwordping_interval=1remote_workdir=/tmprepl_user=replrepl_password=repl_passwordreport_script=/usr/local/bin/send_reportsecondary_check_script= /usr/local/bin/masterha_secondary_check -s server03 -s server02shutdown_script=""ssh_user=root[server1]hostname=10.10.10.156port=3301[server2]hostname=10.10.10.157port=3301candidate_master=1check_repl_delay=0[server3]hostname=10.10.10.158port=33015.2设置relay log 清除方式(在每个slave)#mysql -uroot -p -e 'set global relay_log_purge=0'MHA节点中包含了pure_relay_logs命令工具,它可以为中继日志创建硬链接,执行SET GLOBAL relay_log_purge=1,等待几秒钟以便SQL线程切换到新的中继日志,再执行SET GLOBAL relay_log_purge=0。5.3 设置定时清理relay 脚本# mkdir /data/masterha/log -p# mkdir /opt/shell# cat /opt/shell/purge_relay_log.sh #!/bin/bashuser=monitorpasswd=monitor_passwordport=3301log_dir='/data/masterha/log'work_dir='/data'purge='/usr/local/bin/purge_relay_logs'if [ ! -d $log_dir ]thenmkdir $log_dir -pfi$purge --user=$user --password=$passwd --disable_relay_log_purge --port=$port --workdir=$work_dir >> $log_dir/purge_relay_logs.log 2>&1#定期#crontab -l0 4 * * * /bin/bash /opt/shell/purge_relay_log.sh(这里我使用了monitor 用户,注意权限问题,)5.4 检查
5.4.1 检查MHA Manger到所有MHA Node的SSH连接状态:masterha_check_ssh --conf=/etc/masterha/app1.cnf 5.4.2 通过masterha_check_repl脚本查看整个集群的状态masterha_check_repl --conf=/etc/masterha/app1.cnf5.4.3 检查MHA Manager的状态:masterha_check_status --conf=/etc/masterha/app1.cnf6.开启MHA Manager监控# nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &  再次检查一下启动状态:masterha_check_status --conf=/etc/masterha/app1.cnf关闭监控masterha_stop --conf=/etc/masterha/app1.cnf7. VIP 配置7. keepalived方式管理虚拟ip,keepalived配置方法如下:7.1 下载软件进行并进行安装(db-master,db-slave01 两台都要安装,备选master:db-slave01,在没有切换以前是slave):# wget http://www.keepalived.org/software/keepalived-1.2.12.tar.gz# tar xf keepalived-1.2.12.tar.gz           # cd keepalived-1.2.12# ./configure --prefix=/usr/local/keepalived# make &&  make install# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/# mkdir /etc/keepalived# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/7.2 配置keepalived的配置文件,在master上配置 (db-master)8.

参考URL:

https://www.cnblogs.com/gomysql/p/3675429.html

VIP 配置MHA

http://blog.itpub.net/29416434/viewspace-2062533/

MySQL MHA 安装相关推荐

  1. mysql mha 安装_MySQL高可用方案 MHA之一MHA安装

    MHA0.58安装 MHA(Master High Availability)由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点). 管理节点 mha4mysql-manag ...

  2. MySQL MHA 高可用架构

    2019独角兽企业重金招聘Python工程师标准>>> MySQL MHA   项目的地址:https://code.google.com/p/mysql-master-ha/,这个 ...

  3. MySQL服务MySQL+MHA高可用服务集群搭建

    MySQL MHA MySQL MHA 一.MHA概念 1.MHA 的组成 2.MHA 的特点 二.搭建MySQL+MHA 1.所有服务器,关闭系统防火墙和安全机制 2.修改 master(192.1 ...

  4. 高可用MySQL MHA介绍

    MySQL MHA介绍 MHA简介 MHA是一位日本MySQL大牛用Perl写一套MySQL故障切换方案,来保证数据库系统的高可用,在宕机的事件内(通常10-30秒),完成故障转意,部署MHA,可避免 ...

  5. Step By Step 搭建 MySql MHA 集群

    关于MHA    MHA(Master High Availability)是一款开源的mysql高可用程序,目前在mysql高可用方面是一个相对成熟的解决方案.MHA 搭建的前提是MySQL集群中已 ...

  6. MySQL MHA 搭建测试

    一:背景介绍 MHA(Master HA)是一款开源的MySQL的高可用工具,能在MySQL主从复制的基础上,实现自动化主服务器故障转移.虽然MHA试图从宕机的主服务器上保存二进制日志,但并不是总是可 ...

  7. 阴沟翻船之 MYSQL MHA 故障 SSH timeout 与 Binlog not found

    MYSQL MHA 的安装估计很多地方都是自动化安装的了,流水线方式.个人安装的MHA 的集群虽然没有几百台,但基本上已经突破了三位数,按理说安装应该是不会出什么奇怪的事情,但实际上每天都有新鲜事. ...

  8. Mysql MHA搭建

    . 目录 机器配置 安装Docker Docker安装和启动Mysql8.0.26 搭建Mysql一主二从 设置三台机器免密访问 安装MHA 搭建问题记录 问题1 MHA验证主从复制报错Access ...

  9. MySQL MHA高可用集群部署及故障切换(图文详解)

    文章目录 MySQL MHA 一.MHA概念 1.MHA 的组成 2.MHA 的特点 二.搭建MySQL+MHA 实验思路 实验环境.安装包 1.所有服务器,关闭系统防火墙和安全机制 2.修改 mas ...

最新文章

  1. 【深度学习笔记】深度学习中关于epoch
  2. java实现十进制与二进制之间的转换
  3. EVM反编译软件Porosity的使用-mac
  4. Debug shell: Syntax error: “(“ unexpected
  5. XGB 调参基本方法
  6. ubuntu18.04安装nextcloud以及相关配置
  7. SAP Spartacus里的product carousel控件
  8. 使用 .NET CLI 构建项目脚手架
  9. 【Python学习】 - sklearn学习 - 自带数据集sklearn.datasets.x
  10. 小米手机将终结卡顿?未来所有机型将升级新MIUI
  11. bytebuf池_PooledByteBuf内存池-------这个我现在不太懂
  12. poj 2594 Treasure Exploration 最小路径覆盖
  13. #import和@class 的区别
  14. Leslie 模型预测
  15. Ubuntu 16.04 利用Sakurafrp工具管理多节点多隧道ID 实现 ssh 内网穿透
  16. 【html5插入透明Webm视频】
  17. 边缘计算是什么 优点
  18. 电力电子应用技术_应用于电气自动化驱动与控制的电力电子技术展示
  19. 【每日最爱一句】2013.07.31
  20. win7怎么装python_如何在win7上面安装python的包

热门文章

  1. 改进 网站资源探测工具(添加代理)
  2. 28个MongoDB经典面试题
  3. pimg src=http://img.blog.csdn.net/20150823142545135?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQ...
  4. Ubuntu学习——第一篇
  5. 低碳生活:充电电池及充电器
  6. Session id的存储
  7. spring boot Filter过滤器的简单使用
  8. 创建第一个Django项目
  9. 剑指offer试题(PHP篇一)
  10. shell讲解-小案例