实现环境
  centos6.7
  MYSQL5.6.36
  主:192.168.1.191
  从1:192.168.1.145
  从2:192.168.1.146
  监测:放在从2上 192.168.1.146
  虚拟IP:192.168.1.222

准备软件包:下载链接: https://pan.baidu.com/s/1jHYafcU 密码: irbv
  epel-release-6-8.noarch.rpm   (所有服务器上都要)

  mha4mysql-node-0.56-0.el6.noarch.rpm  (所有服务器上都要)

  mha4mysql-manager-0.56-0.el6.noarch.rpm   (监测服务器)

 

步骤

1.在主DB服务器上建立复制账号 (在Master上执行)
# mysql
mysql> CREATE USER 'repl'@'192.168.1.%' identified by '123456';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';

2.主服务器配置 (在Master上执行)
# vim /etc/my.cnf
----------------------------内容如下---------------------------------

[mysqld]

basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306

# binary logging #
log-bin = /data/mysql/log-bin
# replice #
server_id = 191
gtid_mode = on
enforce_gtid_consiste = on
log_slave_updates = on
----------------------------内容如上---------------------------------

3.从服务器配置 (在两个从服务器上执行)
# vim /etc/my.cnf
----------------------------内容如下----------------------------------

[mysqld]

basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306

# binary logging #
log-bin = /data/mysql/mysql-bin
# replice #
# server-id = 145    #选择对应的
# server-id = 146   #选择对应的
relay_log = /data/mysql/relay-bin
gtid_mode = on
enforce_gtid_consistency = on
log_slave_update = on
read_only = on
master_info_repository = TABLE
relay_log_info_repository = TABLE
----------------------------内容如上----------------------------------

4.重启所有的MYSQL (所有服务器上都执行)
  # service mysqld restart

5.备份主数据库(如果主从上的数据库版本一样,可以全备) (在Master上执行)
  # mysqldump --single-transaction --master-data=2 --triggers --routines --all-databases > full.sql

6.将主数据库备份传输到从数据库中 (在Master上执行)
  # scp /root/full.sql root@192.168.1.145:/root
  # scp /root/full.sql root@192.168.1.146:/root

7.将主数据库的备份导入到从数据库中 (在两个从上执行)
  # mysql -uroot -p < full.sql

8.初始复制链路 (在两个从上执行)
  # mysql
  mysql>
change master to
master_host='192.168.1.191',
master_user='repl',
master_password='123456',
master_auto_position=1;
  mysql>start slave;
  mysql>show slave status\G

以上全部操作为基于GTID的复制配置部分

##########################################################################

9.SSH配置(当前用户为root)(所有服务器上都执行)
# ssh-keygen           #全部按回车
# ssh-copy-id -i /root/.ssh/id_rsa '-p 22 192.168.1.191'
# ssh-copy-id -i /root/.ssh/id_rsa '-p 22 192.168.1.145'
# ssh-copy-id -i /root/.ssh/id_rsa '-p 22 192.168.1.146'

10.安装 mha4mysql-node-0.56-0.el6.noarch.rpm (所有服务器上都执行)
# rpm -ivh epel-release-6-8.noarch.rpm
# yum -y install perl-DBD-MySQL   ncftp
# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

11.安装 mha4mysql-manager-0.56-0.el6.noarch.rpm (监测服务器上执行)
# yum -y  install  perl-Config-Tiny.noarch   perl-Time-HiRes   perl-Parallel-ForkManager    perl-Log-Dispatch-Perl.noarch
# rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm

12.创建MHA工作目录及数据库账号
# mkdir -p /home/mysql_mha #创建MHA的工作目录 (所有服务器上都执行)
# mysql
mysql> grant all privileges on *.*  to mha@'192.168.1.%'identified by '123456'; (只在主数据库上执行,可以同步到其他服务器上)
mysql> show grants for mha@'192.168.1.%' ;  #检查创建结果(所有服务器上都执行)

13.配置mha的配置文件 (监测服务器上执行)
# mkdir -p /etc/mha
# touch /etc/mha/mysql_mha.cnf
# vim /etc/mha/mysql_mha.cnf
----------------------------内容如下----------------------------------
[server default]
user=mha
password=123456
manager_workdir=/home/mysql_mha             #MHA工作目录
manager_log=/home/mysql_mha/manager.log   #MHA管理日志
remote_workdir=/home/mysql_mha               #MHA远程工作目录
ssh_user=root                    #ssh时的用户
repl_user=repl
repl_password=123456
ping_interval=1
master_binlog_dir=/data/mysql    #对应修改
master_ip_failover_script=/usr/bin/master_ip_failover  
secondary_check_script=/usr/bin/masterha_secondary_check -s 192.168.1.191 -s 192.168.1.145 -s 192.168.1.146

[server1]
hostname=192.168.1.191
candidate_master=1
[server2]
hostname=192.168.1.145
candidate_master=1
[server3]
hostname=192.168.1.146
no_master=1          #不参入选举

----------------------------内容如上----------------------------------

14.创建master_ip_failover脚本,用于自动切换 (监测服务器上执行)
# touch /usr/bin/master_ip_failover
# chomd 777 /usr/bin/master_ip_failover
# vim /usr/bin/master_ip_failover
----------------------------内容如下----------------------------------(脚本是在网上找的,亲测能用)
#!/usr/bin/env perl
use strict;
use warnings FATAL =>'all';

use Getopt::Long;

my (
$command, $ssh_user, $orig_master_host, $orig_master_ip,
$orig_master_port, $new_master_host, $new_master_ip, $new_master_port
);

my $vip = '192.168.1.222/24';   #对应修改虚拟IP就可以了
my $key = "1";
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
my $exit_code = 0;

GetOptions(
'command=s' => \$command,
'ssh_user=s' => \$ssh_user,
'orig_master_host=s' => \$orig_master_host,
'orig_master_ip=s' => \$orig_master_ip,
'orig_master_port=i' => \$orig_master_port,
'new_master_host=s' => \$new_master_host,
'new_master_ip=s' => \$new_master_ip,
'new_master_port=i' => \$new_master_port,
);

exit &main();

sub main {

#print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";

if ( $command eq "stop" || $command eq "stopssh" ) {

# $orig_master_host, $orig_master_ip, $orig_master_port are passed.
# If you manage master ip address at global catalog database,
# invalidate orig_master_ip here.
my $exit_code = 1;
eval {
print "\n\n\n***************************************************************\n";
print "Disabling the VIP - $vip on old master: $orig_master_host\n";
print "***************************************************************\n\n\n\n";
&stop_vip();
$exit_code = 0;
};
if ($@) {
warn "Got Error: $@\n";
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "start" ) {

# all arguments are passed.
# If you manage master ip address at global catalog database,
# activate new_master_ip here.
# You can also grant write access (create user, set read_only=0, etc) here.
my $exit_code = 10;
eval {
print "\n\n\n***************************************************************\n";
print "Enabling the VIP - $vip on new master: $new_master_host \n";
print "***************************************************************\n\n\n\n";
&start_vip();
$exit_code = 0;
};
if ($@) {
warn $@;
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "status" ) {
print "Checking the Status of the script.. OK \n";
`ssh $ssh_user\@$orig_master_host \" $ssh_start_vip \"`;
exit 0;
}
else {
&usage();
exit 1;
}
}

# A simple system call that enable the VIP on the new master
sub start_vip() {
`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
# A simple system call that disable the VIP on the old_master
sub stop_vip() {
`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}

sub usage {
print
"Usage: master_ip_failover –command=start|stop|stopssh|status –orig_master_host=host –orig_master_ip=ip –orig_master_port=po
rt –new_master_host=host –new_master_ip=ip –new_master_port=port\n";
}
----------------------------内容如上----------------------------------

15.检查相关配置并启动MHA(监测服务器上执行)
# masterha_check_ssh --conf=/etc/mha/mysql_mha.cnf
# masterha_check_repl --conf=/etc/mha/mysql_mha.cnf
# nohup masterha_manager --conf=/etc/mha/mysql_mha.cnf    &      #后台启动

16.配置虚拟IP (在Master上执行)
# ip addr
# ifconfig eth0:1  192.168.1.222/24
# ip addr

17.测试能否自动转移
# service mysqld stop (在Master上执行)
# ip addr (在Master上执行)
# ip addr (在从1上执行)

如果192.168.1.222成功的从192.168.1.191 飘移到192.168.1.146上就成功了。

以上操作步骤为本人实操记录,实验成功实现了VIP 飘移。

Mysql MHA(GTID)配置(实操)的更多相关文章

  1. Docker安装MySql完整教程、实操

    docker:官网 docker:镜像官网:        镜像官网可以所有应用,选择安装环境:会给出安装命令,例如:docker pull redis 默认拉取最新的版本(指定版本:docker p ...

  2. MySQL MHA安装配置

    1.环境规划 192.168.12.131 node01 192.168.12.132 node02 192.168.12.133 node03 2.环境准备 一主两从GTID,略. 3.配置关键程序 ...

  3. Mysql集群搭建-实操

    集群安装--准备工作 官网地址 https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-install-linux-binary.html 一.环境 ...

  4. MySQL , MHA , Haproxy 配置

    1. 基本架构 2. 读端口影射 3. 写端口影射 进行一个Health Check MHA Manager对Master节点MySQL 进行存活监控 读FailOver 1 读FailOver 2 ...

  5. 压力测试(四)-Mysql数据库压测实操

    1.Jmeter压测实战之JDBC request压测Mysql讲解 简介:讲解jdbc压测mysql相关准备工作,jar包添加,配置讲解 1.Thread Group -> add -> ...

  6. cisco-GNS3-pix防火墙基本配置实操(持续更新)

    一.ASA和PIX基础配置 1.ASA防火墙配置 1.GNS配置 因为使用的GNS3的版本可能不同,gns配置asa防火墙的步骤可能不同 在低版本的gns中直接在qemu选项里可以直接配置,参考:ht ...

  7. Linux下nginx反向代理服务器安装与配置实操

    1.我们只要实现访问nginx服务器能跳转到不同的服务器即可,我本地测试是这样的, 在nginx服务器里面搭建了2个tomcat,2个tomcat端口分别是8080和8081,当我输入我nginx服务 ...

  8. Linux基础实操五

    实操一:nginx服务 二进制安装nginx包1) 1)#yum clean all 2)#yum install epel-release -y 3)#yum install nginx -y 1) ...

  9. 【MySql】——MHA+GTID+failover+binlog-server+Atlas

    一.环境准备 1.mysql-db01 #系统版本 [root@mysql-db01 ~]# cat /etc/redhat-release CentOS release 6.7 (Final) #内 ...

随机推荐

  1. 【Android Developers Training】 83. 实现高效网络访问来优化下载

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  2. CSS3学习系列之背景相关样式(二)

    在border-radius属性中指定两个半径 在border-radius属性中,可以指定两个半径,指定方法如下所示: border-radius:40px 20px; 针对这种情况,各种浏览器的处 ...

  3. accp8.0转换教材第7章JavaScript操作DOM对象理解与练习

    程序调试,chrome开发人员工具,DOM操作,节点和节点间的关系,节点信息,操作节点,获取元素 一.单词部分 ①alert警告②prompt提示③parentNode父节点④childNode子节点 ...

  4. setTimeout与setInterval参数之String

    今天无意中给某网友解答了一些setTimeout的问题,发现一个有趣的东西. 以前我总认为setTimeout的第一个参数只能function,后面发现string也能执行.那问题来了,String做 ...

  5. 使用docker-compose搭建AspNetCore开发环境

    1 使用docker-compose搭建开发环境 我们的目标很简单:使用docker-compose把若干个docker容器组合起来就成了. 首先使用Nginx代理所有的Web程序,这样只需要在主机上 ...

  6. SpringMvc多视图配置(jsp、velocity、freemarker) 在src目录views.properties配置

    #welcome为modelAndView.setViewName(" welcome " ) ; 中的welcome .(class)固定写法 welcome.(class)=o ...

  7. Linux学习笔记(二)——文件/目录/VIM

    文件和目录管理 及 VI编辑器的使用 文件和目录管理,刚开始学这块的时候感觉内容很多很杂,但是学完进行总结后,发现其实很有条理的而且没什么难度,只是熟练掌握这些常用的命令就行了.至于Vim编辑器,不得 ...

  8. Jemeter基础

    jemeter主要组件: a.测试计划(Test Plan) 是使用JMeter进行测试的起点,它是其它JMeter测试元件的容器. b.线程组(Thread Group) 代表一定数量的并发用户,它 ...

  9. 微信小程序选项卡功能

    首先看看微信小程序上的选项卡的效果 原理呢,就是先布局好(这就不必说了吧),然后在上面的每一个选项卡上都定义一个同样的点击事件,然后给每一个组件上绑定一个唯一的标识符,然后点击事件触发的时候,获取到绑 ...

  10. Android反编译odex然后重新打包

    #Android反编译odex然后重新打包 最近不知道怎么回事,突然把我那刷了氧OS的root了,然后就开始好奇起来氢OS所带有的那些本地化的东西,比如通话录音就是典型的一个之一.其中也做了很多的尝试 ...