本文内容参考:http://www.ttlsa.com/mysql/step-one-by-one-deploy-mysql-mha-cluster/

MySQL MHA 高可用集群

环境:

Linux: centos 6.6

MySQL: 5.5.49

MHA: mha4mysql-manager-0.56-0.el6.noarch.rpm(管理端) 以及 mha4mysql-node-0.56-0.el6.noarch.rpm(节点) 192.168.178.128

MySQL主从环境:

Master: 192.168.178.130:3306

Slave: 192.168.178.130:3307

    192.168.178.130:3308

    192.168.178.130:3309

一、配置MySQL多实例:

1)编译安装MySQL   

tar xf mysql-5.5.32.tar.gz
cd mysql-5.5.32
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32 -DMYSQL_DATADIR=/application/mysql-5.5.32/data -DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii -DENABLED_LOCAL_INFILE=ON -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITHOUT_PARTITION_STORAGE_ENGINE=1 -DWITH_FAST_MUTEXES=1 -DWITH_ZLIB=bundled -DENABLED_LOCAL_INFILE=1 -DWITH_READLINE=1 -DWITH_EMBEDDED_SERVER=1 -DWITH_DEBUG=0
make
make install

2)配置多实例

* 上传配置文件   

mkdir /data/{3306,3307}/data -p
unzip data.zip
mkdir /data/{3306,3307}/data -p
ln -s /application/mysql-5.5.32/ /application/mysq
find /data -type f -name "mysql"|xargs chmod +x
chown -R mysql.mysql /data

* 初始化并启动数据库

cd /application/mysql
./scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/data/3306/data --user=mysql
./scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data --user=mysql
/data/3306/mysql start
lsof -i:3306
mysql -S /data/3306/mysql.sock
/data/3307/mysql start
lsof -i:3307
mysql -S /data/3307/mysql.sock

3)配置MySQL主从

*开启binlog,确保主从server-id不同

[root@mysql 3306]# grep log-bin my.cnf
log-bin = /data/3306/mysql-bin
[root@mysql 3306]# grep server-id my.cnf
server-id = 1

*登录主库授权从库登录用户

mysql> grant replication slave on *.* to 'rep'@'%' identified by 'oldboy123';
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

* 从库导出数据

mysql> flush table with read lock;  锁表
Query OK, 0 rows affected (0.00 sec)
mysql> show master status;
+------------------+----------+--------
| mysql-bin.000001 | 476 |
+------------------+----------+--------
[root@mysql ~]# mysqldump -uroot -poldboy123 -S /data/3306/mysql.sock -A -B --events >/opt/mysql_bak.sql
mysql> unlock tables; 解锁

* 将数据恢复到从库 

[root@mysql opt]# mysql -uroot -poldboy456 -S /data/3307/mysql.sock < mysql_bak.sql
[root@mysql opt]# mysql -uroot -poldboy456 -S /data/3307/mysql.sock -e "show databases;"

* 配置用户及位置信息(slave上执行) 

CHANGE MASTER TO
MASTER_HOST='192.168.160.138',
MASTER_PORT=3307,
MASTER_USER='slave',
MASTER_PASSWORD='',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;

* 开启同步开关

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0

下面这一步一定要做,否则在使用masterha_check_repl检查主从复制情况的时候会报错

# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
# ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql

首选需要确保MySQL主从配置成功

二、配置MHA

需要用到的两个软件:

mha4mysql-manager-0.56-0.el6.noarch.rpm   (MHA管理端)

mha4mysql-node-0.56-0.el6.noarch.rpm (node)

MHA管理服务器上安装:

mha4mysql-manager-0.56-0.el6.noarch.rpm   (MHA管理端)

mha4mysql-node-0.56-0.el6.noarch.rpm (node)

管理端

# yum install perl-DBD-MySQL
# yum install perl-Config-Tiny
# yum install perl-Log-Dispatch
# yum install perl-Parallel-ForkManager
# yum install -y rrdtool perl-rrdtool rrdtool-devel perl-Params-Validate
# yum install -y perl-Time-HiRes
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm --nodeps --force
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm --nodeps --force

在node节点上

yum install perl-DBD-MySQL
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm --nodeps --force

在所有MySQL的实例上授权MHA管理账号

mysql> grant all privileges on *.* to mha@'%' identified by '';

在管理端创建MHA的工作目录和日志目录

mkdir /etc/masterha/ -p
/var/log/masterha/app1/ -p

编辑配置文件/etc/masterha/app1.cnf

[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log
user=mha #MHA的授权管理用户
password=123456
ssh_user=root
repl_user=slave #MySQL主从实例授权的用户
repl_password=123
ping_interval=1
shutdown_script=""
master_ip_online_change_script=""
report_script="" [server1]
hostname=192.168.178.130
port=3306
candidate_master=1 #可以成为master
master_binlog_dir="/data/3306" #binlog目录 [server2]
hostname=192.168.178.130
port=3307
candidate_master=1 #可以成为master
master_binlog_dir="/data/3307" [server3]
hostname=192.168.178.130
port=3308
master_binlog_dir=/data/3308
no_master=1 #不能成为master [server4]
hostname=192.168.178.130
port=3309
master_binlog_dir=/data/3309
no_master=1 #不能成为master

检验MHA各种配置信息:

masterha_check_ssh --conf=/etc/masterha/app1.cnf    #检查SSH互认是否成功
masterha_check_repl --conf=/etc/masterha/app1.cnf  #检查MySQL主从复制是否成功
masterha_manager --conf=/etc/masterha/app1.cnf &

观察日志:

Sat Aug 27 10:33:04 2016 - [info]
db2 (current master)
+--db1
+--db3
+--db4 Sat Aug 27 10:33:04 2016 - [warning] master_ip_failover_script is not defined.
Sat Aug 27 10:33:04 2016 - [warning] shutdown_script is not defined.
Sat Aug 27 10:33:04 2016 - [info] Set master ping interval 1 seconds.
Sat Aug 27 10:33:04 2016 - [warning] secondary_check_script is not defined. It is highly recommended setting it to check master reachability from two or more routes.
Sat Aug 27 10:33:04 2016 - [info] Starting ping health check on (192.168.178.130:3306)..
Sat Aug 27 10:33:04 2016 - [info] Ping succeeded, sleeping until it doesn't respond..

故障测试:

stop 3306实例,看日志主库是否切换到3307实例上

Started automated(non-interactive) failover.
The latest slave 192.168.178.130(192.168.178.130:3307) has all relay logs for recovery.
Selected 192.168.178.130(192.168.178.130:3307) as a new master.
192.168.178.130(192.168.178.130:3307): OK: Applying all logs succeeded.
192.168.178.130(192.168.178.130:3309): This host has the latest relay log events.
192.168.178.130(192.168.178.130:3308): This host has the latest relay log events.
Generating relay diff files from the latest slave succeeded.
192.168.178.130(192.168.178.130:3309): OK: Applying all logs succeeded. Slave started, replicating from 192.168.178.130(192.168.178.1
30:3307)
192.168.178.130(192.168.178.130:3308): OK: Applying all logs succeeded. Slave started, replicating from 192.168.178.130(192.168.178.1
30:3307)
192.168.178.130(192.168.178.130:3307): Resetting slave info succeeded.
Master failover to 192.168.178.130(192.168.178.130:3307) completed successfully.

说明切换成功!!!

此篇文档有点乱,在搭建的过程中要根据自己的配置信息及日志信息,一步一步的解决问题直至一切OK!!!

搭建MySQL MHA高可用的更多相关文章

  1. (转)基于keepalived搭建MySQL的高可用集群

    基于keepalived搭建MySQL的高可用集群  原文:http://www.cnblogs.com/ivictor/p/5522383.html MySQL的高可用方案一般有如下几种: keep ...

  2. MySQL MHA 高可用集群部署及故障切换

    MySQL MHA 高可用集群部署及故障切换 1.概念 2.搭建MySQL + MHA 1.概念: a)MHA概念 : MHA(MasterHigh Availability)是一套优秀的MySQL高 ...

  3. Oracle Compute云快速搭建MySQL Keepalived高可用架构

    最近有个客户在测试Oracle Compute云,他们的应用需要使用MySQL数据库,由于是企业级应用一定要考虑高可用架构,因此有需求要在Oracle Compute云上搭建MySQL高可用集群.客户 ...

  4. 基于keepalived搭建MySQL的高可用集群

    MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...

  5. Mysql MHA高可用集群架构

    ** 记得之前发过一篇文章,名字叫<浅析MySQL高可用架构>,之后一直有很多小伙伴在公众号后台或其它渠道问我,何时有相关的深入配置管理文章出来,因此,民工哥,也将对前面的各类架构逐一进行 ...

  6. MySQL MHA高可用集群部署及故障切换

    一.MHA概念MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件.MHA 的出现就是解决MySQL 单点的问题.MySQL故障切换过程中 ...

  7. MySQL集群搭建(5)-MHA高可用架构

    1 概述 1.1 MHA 简介 MHA - Master High Availability 是由 Perl 实现的一款高可用程序,出现故障时,MHA 以最小的停机时间(通常10-30秒)执行 mas ...

  8. MySQL mha 高可用集群搭建

    [mha] MHA作为MySQL故障切换和主从提升的高可用软件,在故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一 ...

  9. mysql mha高可用架构的安装

    MMM无法全然地保证数据的一致性,所以MMM适用于对数据的一致性要求不是非常高.可是又想最大程度的保证业务可用性的场景对于那些对数据一致性要求非常高的业务,非常不建议採用MMM的这样的高可用性架构.那 ...

随机推荐

  1. spring 和 spring mvc

    spring3 http://jinnianshilongnian.iteye.com/blog/1482071 spring mvc http://jinnianshilongnian.iteye. ...

  2. android ImageView 中的ScaleType

    center :居中,不执行缩放 centerCrop:按原始比例缩放,裁剪中间部分 centerInside:按原始比例缩放,居中,不裁剪 fitCenter:居中缩放 fitStart:上对齐缩放 ...

  3. system verilog中的跳转操作

    在verilog中,使用disable声明来从执行流程中的某一点跳转到另一点.特别地,disable声明使执行流程跳转到标注名字的声明组末尾,或者一个任务的末尾. verilog中的disable命令 ...

  4. this关键字

    class Demothis关键字//哪个对象在调用this所在的函数,this就代表哪个对象.{ //当定义类中功能时,该函数内部要用到该函数的对象时,这时用this来表示这个对象. public ...

  5. WEBPACK简介

    Webpack 是一个强力的模块打包器. 所谓 包 (bundle) 就是一个 JavaScript 文件,它把一堆 资源 (assets) 合并在一起,以便它们可以在同一个文件请求中发回给客户端. ...

  6. Javascript BOM对象

    BOM是browser object model的缩写,简称浏览器对象模型. window对象(BOM的核心对象) 表示浏览器的一个实例,在浏览器中,window对象有着双重角色,它既是通过Javas ...

  7. 简单三个表之间关联 与 case when语句的应用

    select p.conttract_id,l.order_code,jz.cur_branch from wy_auto_workflow_log l,wg_pjhsb p,wg_jzmb jz w ...

  8. Gridview实现删除弹出提示信息

    实现方法: 双击GridView的OnRowDataBound事件: 在后台的GridView1_RowDataBound()方法添加代码,最后代码如下所示:       protected void ...

  9. 常用的sql数据库语句

    1.说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)法一:select * into b from a where 1 <>1法二:select top 0 * i ...

  10. java8之接口增强

    Java8是由oracle公司于2014年3月正式发布,它是继java5 以来最重要的发布版本.Java8包含了很多新的特性,可以简化开发,提升代码的可读性. Java8的一些重要新特性包括: l 接 ...