前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql 高可用集群 MHA 搭建实例

Mysql 高可用集群 MHA 搭建实例

作者头像
dys
发布2018-04-03 17:51:29
1.8K0
发布2018-04-03 17:51:29
举报
文章被收录于专栏:性能与架构性能与架构

之前的文章中介绍了 MHA 的功能和原理,MHA 主要是通过对 master 自动进行故障转移,来保证集群的高可用,下面就实际搭建一下 MHA 环境

目标

搭建完成 MHA 环境,然后模拟 master 故障,验证是否正确切换成了新的 master

搭建过程

例如有4台服务器

host1 作为 master

host2 和 host3 作为 slave

host4 作为 MHA 的管理节点

思路

搭建好一主二从的复制结构

配置各个服务器间的 SSH 免登陆

在各个服务器中都安装 mha-node,在 host4 上安装 mha-manager,并编写 mha 配置文件

使用 MHA 提供的脚本对 SSH 免登陆的配置、集群的复制状态进行验证,看是否正确

如果验证通过,启动 manager

最后,测试一下,把 master 停掉,看是否自动选出了新的 master

详细过程

因为资源有限,现在使用3台服务器进行搭建

192.168.31.204 作为 master

192.168.31.168 作为 slave1

192.168.31.101 作为 slave2,同时把 MHA manager 也安装到这台服务器

1搭建复制环境

Mysql 主从复制的配置方式可以参考以前的一篇文章

2配置 SSH 免登陆

在每台服务器上都执行以下命令

ssh-keygen

(执行后会有多个输入提示,不用输入任何内容,全部直接回车即可)

ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@192.168.31.204

ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@192.168.31.168

ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@192.168.31.101

3安装 MHA-node

在每台服务器上都执行以下命令

yum -y install perl-DBD-MySQL ncftp perl-DBI.x86

rpm -ivh mha4mysql-node-0.57-0.el7.noarch.rpm

4安装 MHA-manager

在 slave2(192.168.31.101)上执行命令

yum install epel-release-7-5.noarch

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

rpm -ivh mha4mysql-manager-0.57-0.el7.noarch.rpm

注意:这两步的安装方式为centos 系统,在其他系统中,需要自己调整安装方法

5创建 MHA 配置文件

配置文件需要我们新建,位置可以自定义

vi /etc/mha/mha.cnf

[server default]

# 需要在 master 中创建这个用户

# mysql> grant ALL PRIVILEGES on *.* to mha@"%" Identified by "111111";

user=mha

password=111111

# 在各台服务器上创建目录 /home/mha

manager_workdir=/home/mha

# 日志位置

manager_log=/home/mha/manager.log

remote_workdir=/home/mha

ssh_user=root

# 配置主从复制时创建的复制用户

repl_user=repli

repl_password=111111

ping_interval=1

# 在 master 上查询日志目录

# mysql> show variables like 'log_bin_basename%';

# 取此变量值的目录,例如值为 /data/mysql/mysql-bin,需要的是 /data/mysql

master_binlog_dir=/data/mysql

[server1]

hostname=192.168.31.204

# 说明此服务器作为 master 候选服务器

candidate_master=1

[server2]

hostname=192.168.31.168

candidate_master=1

[server3]

hostname=192.168.31.101

# 此服务器不作为 master 候选服务器,因为 manager 在这台服务器上

no_master=1

6SSH 有效性验证

masterha_check_ssh --conf=/etc/mha/mha.cnf

7集群复制的有效性验证

masterha_check_repl --conf=/etc/mha/mha.cnf

验证成功的话会自动识别出所有服务器和主从状况

在验证时,我遇到过这个错误:Can't exec "mysqlbinlog" ......

解决方法是在所有服务器上执行:

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

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

注意:蓝色位置,需要根据自己环境修改路径

8启动 manager

启动

nohup masterha_manager --conf=/etc/mha/mha.cnf &

状态检查

masterha_check_status --conf=/etc/mha/mha.cnf

故障转移验证

验证的方式是先停掉 master,因为之前的配置文件中,把 slave1 作为了候选人,那么就到 slave2 上查看 master 的 IP 是否变为了 slave1 的 IP

1停掉 master

在 master(192.168.31.204) 上把 mysql 停掉

2查看 MHA 日志

上面的配置文件中指定了日志位置为 /home/mha/manager.log

cat /home/mha/manager.log

从日志信息中可以看到 master failover 已经成功了,并可以看出故障转移的大体流程

3检查 slave2 的复制

登陆 slave2(192.168.31.101) 的Mysql,查看 slave 状态

mysql> show slave status \G;

可以看到 master 的 IP 现在为 .168,初始状态时,master 为 .204.168 是 slave1 的IP,说明 MHA 已经把 slave1 提升为了新的 master,IO线程和SQL线程也正确运行,MHA 搭建成功

MHA 安装包下载地址

https://72003f4c60f5cc941cd1c7d448fc3c99e0aebaa8.googledrive.com/host/0B1lu97m8-haWeHdGWXp0YVVUSlk/

MHA 资料

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 思路
  • 详细过程
  • 1搭建复制环境
  • 2配置 SSH 免登陆
  • 3安装 MHA-node
  • 4安装 MHA-manager
  • 5创建 MHA 配置文件
  • 6SSH 有效性验证
  • 7集群复制的有效性验证
  • 8启动 manager
  • 1停掉 master
  • 2查看 MHA 日志
  • 3检查 slave2 的复制
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档