一、配置主从同步

 

1. 本例中主从ip及端口

Master:10.1.5.8:3306

Slave1:10.1.5.9:3306 (候选master)

Slave2:10.1.5.195:3306

2. Slave配置参数

log-bin = MySQL-bin

log-bin-index = mysql-bin.index

read_only=1

relay_log_purge=0  #(一主一丛不需要此项,两从及以上建议开次参数,防止切换为成主库的从库自动删除中继日志后,无法给其他从库应用这部分日志)

3. 配置主从同步

步骤略。

4. 其他建议

可切换成主库的从库,建议配置成半同步。

详细的主从配置见:

http://blog.csdn.net/lichangzai/article/details/50423906

二、配置ssh公钥互信

 

1. 本例中manager节点和node节点ip

manager:10.1.5.8

node1:10.1.5.8

node2:10.1.5.9

node3:10.1.5.195

注:manager节点可以安装独立的服务器上,本例为了节省机器,manager安装在了主库(10.1.5.8)上.

2. 配置manager和node各节点间的root用户的ssh公钥互信

详细配置见:“配置ssh免密码连入”章节

http://blog.csdn.net/lichangzai/article/details/8206834

三、安装 MHA 包

 

1. 下载MHA安装包

下载网址:

https://code.google.com/p/mysql-master-ha/wiki/Downloads?tm=2

下载rpm包或tarall均可,建议用rpm包,因为安装简单。

2. 安装 MHA Node

在manager和node的所有节点均需安装MHA Node。

rpm安装方式:

# yum install perl-DBD-MySQL

# rpm -ivh mha4mysql-node-0.56-0.el5.noarch.rpm

tarall的安装方式:

tar -zxfmha4mysql-node-0.56.tar.gz

cd mha4mysql-node-0.56

perl Makefile.PL

make

make install

3. 安装 MHA Manager

# yum install perl-DBD-MySQLperl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager

# rpm -ivh mha4mysql-node-0.56-0.el5.noarch.rpm

# rpm -ivh mha4mysql-manager-0.56-0.el5.noarch.rpm

注:

上面有些包需要先安装附加软件包(EPEL)才能使用yum安装,

安装EPEL源详细见:“yum安装”章节

http://blog.csdn.net/lichangzai/article/details/39272469

MHA Manager另一种安装方式:

MHA Manager 0.56 tarball源码安装

tar -zxf mha4mysql-manager-0.56.tar.gz

cd mha4mysql-manager-0.56

perl Makefile.PL

make

make install

四、MHA Manager 端配置

 

各参数含义:https://code.google.com/p/mysql-master-ha/wiki/Parameters#no_master

MHA Manager端配置,建议使用root操作系统用户执行,因为涉及到vip 启停。

mkdir -p /etc/masterha/app1

vi /etc/masterha/app1/app1.cnf 

[server default]

manager_workdir=/etc/masterha/app1

manager_log=/etc/masterha/app1/manager.log

user=root

password=root

ssh_user=root

repl_user=repl_user

repl_password=licz

#ping_interval=10

#master_ip_failover_script=/etc/masterha/app1/master_ip_failover #master failover时执行,不配置vip时不用配

#shutdown_script=/etc/masterha/power_manager

#report_script=/etc/masterha/app1/send_report  #master failover时执行,可选

#master_ip_online_change_script=/etc/masterha/app1/master_ip_online_change #masterswitchover时执行,不配置vip时不用配

[server1]

hostname=10.1.5.8

port=3306

master_binlog_dir=/var/lib/mysql

candidate_master=1

check_repl_delay=0

[server2]

hostname=10.1.5.9

port=3306

master_binlog_dir=/var/lib/mysql

candidate_master=1  #如果候选master有延迟的话,relay日志超过100m,failover切换不能成功,加上此参数后会忽略延迟日志大小。

check_repl_delay=0

[server3]

hostname=10.1.5.195

port=3306

master_binlog_dir=/var/lib/mysql

ignore_fail=1  #如果这个节点挂了,mha将不可用,加上这个参数,slave挂了一样可以用

no_master=1  #从不将这台主机转换为master

2. 检查SSH配置

masterha_check_ssh --conf=/etc/masterha/app1/app1.cnf

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

Tue Jan  5 17:16:40 2016 - [warning] Globalconfiguration file /etc/masterha_default.cnf not found. Skipping.

Tue Jan  5 17:16:40 2016 - [info] Reading applicationdefault configuration from /etc/masterha/app1/app1.cnf..

Tue Jan  5 17:16:40 2016 - [info] Reading serverconfiguration from /etc/masterha/app1/app1.cnf..

Tue Jan  5 17:16:40 2016 - [info] Starting SSHconnection tests..

Tue Jan  5 17:16:41 2016 - [debug]

Tue Jan  5 17:16:40 2016 - [debug]  Connecting via SSH fromroot@10.1.5.8(10.1.5.8:22) to root@10.1.5.9(10.1.5.9:22)..

Tue Jan  5 17:16:40 2016 - [debug]   ok.

Tue Jan  5 17:16:40 2016 - [debug]  Connecting via SSH fromroot@10.1.5.8(10.1.5.8:22) to root@10.1.5.195(10.1.5.195:22)..

......

Tue Jan  5 17:16:41 2016 - [debug]  Connecting via SSH fromroot@10.1.5.195(10.1.5.195:22) to root@10.1.5.9(10.1.5.9:22)..

Tue Jan  5 17:16:41 2016 - [debug]   ok.

Tue Jan  5 17:16:41 2016 - [info] All SSH connectiontests passed successfully.

成功!

3. 检查MHA配置

masterha_check_repl --conf=/etc/masterha/app1/app1.cnf

masterha_check_repl --conf=/etc/masterha/app1/app1.cnf

Tue Jan  5 10:50:16 2016 - [warning] Globalconfiguration file /etc/masterha_default.cnf not found. Skipping.

Tue Jan  5 10:50:16 2016 - [info] Reading applicationdefault configuration from /etc/masterha/app1/app1.cnf..

Tue Jan  5 10:50:16 2016 - [info] Reading serverconfiguration from /etc/masterha/app1/app1.cnf..

Tue Jan  5 10:50:16 2016 - [info] MHA::MasterMonitorversion 0.56.

Tue Jan  5 10:50:16 2016 - [info] GTID failover mode =0

Tue Jan  5 10:50:16 2016 - [info] Dead Servers:

Tue Jan  5 10:50:16 2016 - [info] Alive Servers:

Tue Jan  5 10:50:16 2016 - [info]   10.1.5.8(10.1.5.8:3306)

Tue Jan  5 10:50:16 2016 - [info]   10.1.5.9(10.1.5.9:3306)

Tue Jan  5 10:50:16 2016 - [info]   10.1.5.195(10.1.5.195:3306)

Tue Jan  5 10:50:16 2016 - [info] Alive Slaves:

Tue Jan  5 10:50:16 2016 - [info]   10.1.5.9(10.1.5.9:3306)  Version=5.6.28-log (oldest major versionbetween slaves) log-bin:enabled

.......

Tue Jan  5 13:34:16 2016 - [info] Slaves settingscheck done.

Tue Jan  5 13:34:16 2016 - [info]

10.1.5.8(10.1.5.8:3306)(current master)

+--10.1.5.9(10.1.5.9:3306)

+--10.1.5.195(10.1.5.195:3306)

Tue Jan  5 13:34:16 2016 - [info] Checking replicationhealth on 10.1.5.9..

Tue Jan  5 13:34:16 2016 - [info]  ok.

Tue Jan  5 13:34:16 2016 - [info] Checking replicationhealth on 10.1.5.195..

Tue Jan  5 13:34:16 2016 - [info]  ok.

Tue Jan  5 13:34:16 2016 - [warning]master_ip_failover_script is not defined.

Tue Jan  5 13:34:16 2016 - [warning] shutdown_scriptis not defined.

Tue Jan  5 13:34:16 2016 - [info] Got exit code 0 (Notmaster dead).

MySQL Replication Health is OK.

成功!

注意:期间可能会遇到一些问题,可见另一文章的问题总结:

4. MHA Manager 端日常主要操作步骤

① 检查是否有下列文件,有则删除。

发生主从切换后,MHAmanager服务会自动停掉,且在manager_workdir目录下面生成文件app1.failover.complete,若要启动MHA,必须先确保无此文件)

# ll /etc/masterha/app1/app1.failover.complete

# ll /etc/masterha/app1/app1.failover.error

② 检查MHA当前置:

# masterha_check_repl --conf=/etc/masterha/app1/app1.cnf

③ 启动MHA:

# nohup masterha_manager --conf=/etc/masterha/app1/app1.cnf > /etc/masterha/app1/mha_manager.log 2>&1 &

当有slave 节点宕掉时,默认是启动不了的,加上 --ignore_fail_on_start 即使有节点宕掉也能启动MHA,如下:

# nohup masterha_manager --conf=/etc/masterha/app1/app1.cnf --ignore_fail_on_start >/etc/masterha/app1/mha_manager.log 2>&1 &

④ 检查状态:

# masterha_check_status --conf=/etc/masterha/app1/app1.cnf

⑤ 检查日志:

#tail -f /etc/masterha/app1/manager.log

⑥ 主从切换后续工作

主库切换后,把原主库修复成新从库,然后重新执行以上5步。原主库数据文件完整的情况下,可通过以下方式找出最后执行的CHANGE MASTER命令:

# grep "CHANGE MASTER TO MASTER" /etc/masterha/app1/manager.log | tail -1

CHANGE MASTER TO MASTER_HOST='10.1.5.9',MASTER_PORT=3306, MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=120,MASTER_USER='repl_user', MASTER_PASSWORD='xxx';

--最后启动新从库

# start slave;

# show slave status\G

五、Failover应用场景测试

 

自动failover测试

应用场景1:master dead后,MHA当时已经开启,候选Master库(Slave)会自动failover为Master.

--shutdown mysql master node

# service mysql stop

--check new master node

mysql> show master status\G;

*************************** 1.row ***************************

File: master-bin.000001

Position: 330

--check slave node

mysql> show slave status\G;

*************************** 1.row ***************************

Slave_IO_State: Waiting formaster to send event

Master_Host: 10.1.5.9

Master_User: repl_user

Master_Port: 3306

Connect_Retry: 60

Master_Log_File:master-bin.000001

--check manager.log

[root@host8 ~]# tail -100f  /etc/masterha/app1/manager.log

----- Failover Report -----

app1: MySQL Master failover10.1.5.8(10.1.5.8:3306) to 10.1.5.9(10.1.5.9:3306) succeeded

Master 10.1.5.8(10.1.5.8:3306)is down!

Check MHA Manager logs athost8.localdomain:/etc/masterha/app1/manager.log for details.

Startedautomated(non-interactive) failover.

The latest slave10.1.5.9(10.1.5.9:3306) has all relay logs for recovery.

Selected10.1.5.9(10.1.5.9:3306) as a new master.

10.1.5.9(10.1.5.9:3306): OK:Applying all logs succeeded.

10.1.5.195(10.1.5.195:3306): Thishost has the latest relay log events.

Generating relay diff filesfrom the latest slave succeeded.

10.1.5.195(10.1.5.195:3306):OK: Applying all logs succeeded. Slave started, replicating from10.1.5.9(10.1.5.9:3306)

10.1.5.9(10.1.5.9:3306):Resetting slave info succeeded.

Master failover to10.1.5.9(10.1.5.9:3306) completed successfully.

--最后把原主库修复成一个新的slave

grep "CHANGE MASTER TO MASTER"  /etc/masterha/app1/manager.log | tail -1

CHANGE MASTER TO MASTER_HOST='10.1.5.9',MASTER_PORT=3306, MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=120,MASTER_USER='repl_user', MASTER_PASSWORD='xxx';

mysql> CHANGE MASTER TO MASTER_HOST='10.1.5.9', MASTER_PORT=3306,MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=120,MASTER_USER='repl_user', MASTER_PASSWORD='licz';

Query OK, 0 rows affected, 2warnings (0.17 sec)

mysql> start slave;

mysql> show slave status\G;

*************************** 1.row ***************************

Slave_IO_State: Waiting formaster to send event

Master_Host: 10.1.5.9

Master_User: repl_user

手动Failover

应用场景2:master dead,但是当时MHA没有开启,可以通过手工failover。

1.检查是否有下列文件,有则删除。

# ll /etc/masterha/app1/app1.failover.complete

# ll /etc/masterha/app1/app1.failover.error

2. 如果MHA在运行,需先停止MHA:  masterha_stop--conf=/etc/masterha/app1/app1.cnf

3. 检查MHA当前置: masterha_check_repl --conf=/etc/masterha/app1/app1.cnf

4. 手动切换:masterha_master_switch--conf=/etc/masterha/app1/app1.cnf --master_state=dead --dead_master_host=10.1.5.9 --dead_master_port=3306

# 接以上的

以下为切换时指定了new_master_host和new_master_port,如果不指定new_master_host,则根据配置文件app1.cnf选出new_master_host,但new_master_port默认是3306。

# masterha_master_switch --conf=/etc/masterha/app1/app1.cnf --master_state=dead  --dead_master_host=10.1.5.9 --dead_master_port=3306  --new_master_host=10.1.5.8 --new_master_port=3306

六、Swithover 应用场景测试

 

Scheduled(Online) Master Switch(手动在线主库切换)

应用场景1:master和slave正常,MHA正常开启,维护操作时(例如更换新主机硬件、添加/删除列或主键)手动在线切换master到其他主机。

1. 如果MHA在运行,需先停止MHA

masterha_stop --conf=/etc/masterha/app1/app1.cnf

2. 检查MHA当前置

masterha_check_repl --conf=/etc/masterha/app1/app1.cnf

3. 手动切换

masterha_master_switch --master_state=alive --conf=/etc/masterha/app1/app1.cnf --orig_master_is_new_slave --running_updates_limit=3600 --interactive=0

注意:执行masterha_master_switch调用的不是master_ip_failover_script脚本,而是master_ip_online_change_script脚本,可把启动和停止VIP放到这个脚本中,如果没有配置VIP,则需要手动执行VIP切换,如下:

ssh  root@$orig_master_ip   /sbin/ifconfig  eth0:1 down

ssh  root@$new_master_ip   /sbin/ifconfig  eth0:1 10.1.5.21/24

以下为切换时指定了new_master_host和new_master_port,如果不指定new_master_host,则根据配置文件app1.cnf选出new_master_host,但new_master_port默认是3306。

masterha_master_switch --master_state=alive --conf=/etc/masterha/app1/app1.cnf --orig_master_is_new_slave --running_updates_limit=3600 --interactive=0--new_master_host=10.1.5.9 --new_master_port=3306

参数 --running_updates_limit 如果现在的master执行写操作的执行时间大于这个参数,或者任何一台slave的Seconds_Behind_Master大于这个参数,那么master switch将自动放弃。默认参数为1s

参数 --interactive=0 非交互切换,建议加上,可大大加快切换速度,加上后库不忙时大概3秒内切换完成。

七、定期删除中继日志

 

由于在第一步中,每个slave上设置了参数relay_log_purge=0,所以slave节点需要定期删除中继日志,建议每个slave节点删除中继日志的时间错开。

corntab -e

0 5 * * *  /usr/bin/purge_relay_logs --user=root--password=123456 --port=3306 --disable_relay_log_purge >> /var/lib/mysql/purge_relay.log  2>&1

删除中继日志可参考:https://code.google.com/p/mysql-master-ha/wiki/Requirements#Replication_user_must_exist_on_candidate_masters

--查看purge_relay_logs命令帮助

# purge_relay_logs -h

Option h is ambiguous (help,host)

Usage:

purge_relay_logs --user=root--password=rootpass --host=127.0.0.1

See online reference

(http://code.google.com/p/mysql-master-ha/wiki/Requirements#purge_relay_

logs_script) for details.

八、用VIP实现MHA的自动切换

 
 
 

通过配置配置MHA中的app1.cnf中的参数

配置MHA中的app1.cnf中的master_ip_failover_script和master_ip_online_change_script两个参数
参数中脚本的内容见:
http://blog.csdn.net/lichangzai/article/details/50503960

通过Keepalieved实现vip切换:

详细配置见文章:
http://blog.csdn.net/lichangzai/article/details/50484455

MySQL学习笔记-MHA安装配置的更多相关文章

  1. Entity Framework with MySQL 学习笔记一(安装)

    声明 :  数据库是Mysql,本人的程度只到会写sql语句(不会储蓄过程), c# 会基本的ADO.NET数据库访问,LINQ基础. 这篇只做个人学习|温习作用. 新手可以参考,也请高手指正错误, ...

  2. MySQL学习笔记01-MYSQL安装

    一 MySQL简介 MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司. MySQL 最流行的关系型数据库管理系统. MySQL分为企业版和社区版. ...

  3. Node.js 学习笔记 (一) 安装配置

    Node.js 安装配置 本安装教程以Node.js v4.4.3 LTS(长期支持版本)版本为例 Window 上安装Node.js 你可以采用以下两种方式来安装. 1.Windows 安装包(.m ...

  4. Hadoop学习笔记: 安装配置Hive

    1. 在官网http://hive.apache.org/下载所需要版本的Hive,以下我们就以hive 2.1.0版为例. 2. 将下载好的压缩包放到指定文件夹解压,tar -zxvf apache ...

  5. MySql学习笔记(1)-安装

    一.安装环境 操作系统:win7 64ibt MySql版本:5.7.10.0 二.安装过程 1.点击Add 2.选择需要安装的组件 3.Excute 4.Next 5.Next 6.进入服务器配置 ...

  6. Hadoop学习笔记: 安装配置Hadoop

    安装前的一些环境配置: 1. 给用户添加sudo权限,输入su - 进入root账号,然后输入visudo,进入编辑模式,找到这一行:"root ALL=(ALL) ALL"在下面 ...

  7. [Freescale]E9学习笔记-LTIB安装配置

    转自:http://blog.csdn.net/girlkoo/article/details/44535979 LTIB: Linux Target Image Builder Freescale提 ...

  8. blfs(systemd版本)学习笔记-编译安装配置dhcpcd

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! dhcpcd项目地址:http://www.linuxfromscratch.org/blfs/view/stable-syst ...

  9. blfs(systemv版本)学习笔记-编译安装配置dhcpcd

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! dhcpcd项目地址:http://www.linuxfromscratch.org/blfs/view/8.3/basicne ...

随机推荐

  1. 三个线程abc顺序执行

    1.使用synchronized悲观锁(秋招阿里的一个笔试题,应该写的比较复杂,然后就没有然后了o(╥﹏╥)o) public class ThreadThreadp { private int fl ...

  2. 阿里云ECS服务器活动99元一年(2019年 Hi拼团,拼着买,更划算)

    2019年10月22日更新,阿里云推荐有礼活动:ECS突发性能T6-低至99元/年赶紧上车~ 低价高性能,拼着买更划算 点我参加活动>> 购买前领取阿里云幸运券,更有可能享受折上折的优惠. ...

  3. Docker容器中用户权限管理

    在Linux系统中有一部分知识非常重要,就是关于权限的管理控制:Linux系统的权限管理是由uid和gid负责,Linux系统会检查创建进程的uid和gid,以确定它是否有足够的权限修改文件,而非是通 ...

  4. python面向对象学习笔记(一)

    粘贴一些自学过程中的笔记大纲,源文本在pycharm里面写的,有点乱整理一下,部分内容有待补充,书写不一定100%正确,全当数据备份了. 1.面向对象的特性 #你写代码时什么使用面向对象 #处理比较复 ...

  5. java类加载全过程

    引用:http://blog.csdn.net/haluoluo211/article/details/49908463 http://www.cnblogs.com/pengfeiliu/p/442 ...

  6. python中通过客户端IP拿到所在城市和当地天气信息—附带项目案例

    熟悉老一代QQ的小伙伴可能都知道,很早以前的QQ,鼠标滑到头像的位置,你的位置和IP会在详情页显示,那么这个是如何做到的呢?下面我们就来玩一玩这个东西 首先,需求分析: 1.拿到客户端IP 2.通过I ...

  7. [转帖]postgres csv日志和查看用户权限

    postgres csv日志和查看用户权限 最近在使用postgres 时遇到的2个问题,顺便记录一下查到的比较好的资料. 怀疑postgres在执行SQL时报错,程序日志中有无明确异常信息.通过查看 ...

  8. linux下jar命令(运行jar包)

    直接用java -jar xxx.jar,当退出或关闭shell时,程序就会停止掉.   普通方式启动应用: java -jar jarPackageName.jar 1>system.log ...

  9. Spring cloud的各类组件

    Spring cloud 的各类组件 1.注册中心 eureka 2.ribbon 3.feign 4.hystirx 断路器 5.高速缓存器 redis 6.断路器Dashboard监控仪表盘

  10. 少儿编程 | 02.Scratch编程环境

    上次课程介绍了Scratch的基本概念和一些特点,最后还给出了一些有趣的例子.本次课程介绍Scratch的两种编程环境以及在Scratch官网注册个人账号的步骤. Scratch 3.0的两种编程环境 ...