MHA高可用集群

MHA高可用集群

文章目录

一、MHA 简介:
二、部署 MHA:
第一步:三台主从服务器安装 mysql
第二步:修改 mysql 的主配置文件:/etc/my.cnf ,注意三台服务器的 server-id 不能一样
第三步:三台服务器启动 mysql 服务
第四步:配置 Mysql 主从同步(一主两从)
第五步:安装 MHA
第六步:启动 MHA

一、MHA 简介:

MHA(Master High Availability)

(1)简介

目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

(2)该软件由两部分组成:

MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

(3)工作原理:

1、在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。

2、顺序:

① 从宕机崩溃的master保存二进制日志事件(binlog events);
② 识别含有最新更新的slave;
③ 应用差异的中继日志(relay log)到其他的slave;
④ 应用从master保存的二进制日志事件(binlog events);
⑤ 提升一个slave为新的master;
⑥ 使其他的slave连接新的master进行复制

二、部署 MHA:

角色 需要安装的服务
master(192.168.45.133) mha4mysql-node
slave1(192.168.45.130) mha4mysql-node
slave2(192.168.45.134) mha4mysql-node
manager(192.168.45.135) mha4mysql-manager、 mha4mysql-node
(1)需求:

本案例要求通过MHA 监控MySQL 数据库在故障时进行自动切换,不影响业务。

(2)思路:

安装MySQL数据库
配置MySQL 一主两从
安装MHA软件
配置无密码认证
配置MySQL、MHA 高可用
模拟 master 故障切换

(3)操作系统:Cent0S7…6 版本, MHA版本是0.57版本

一、在三台服务器上安装mysql数据库

(MySQL版本请使用5.6.36;cmake版本请使用2.8.6),因为三台安装操作都一致,这边演示在 master 上的安装顺序。
为了实验的方便,修改主机名

#修改服务器名称,将manster服务器的主机名改为manster
hostnamectl set-hostname manster
 su
 #修改服务器名称,将slave1服务器的主机名改为slaveq
hostnamectl set-hostname slave1
 su
 #修改服务器名称,将slave2服务器的主机名改为slave2
hostnamectl set-hostname slave2
 su
#安装编译依懒环境
yum -y install gcc gcc-c++ ncurses ncurses-devel bison perl-Module-Install cmake

#挂载软件包
mount.cifs //192.168.100.3/mha /mnt
Password for [email protected]//192.168.100.3/mha:
#安装gmake编译软件
cd /mnt
tar zxvf cmake-2.8.6.tar.gz -C /opt
cd /opt/cmake-2.8.6/
./configure
gmake && gmake install

#安装mysql数据库
[[email protected] cmake-2.8.6]# cd /mnt
[[email protected] mnt]# tar zxvf mysql-5.6.36.tar.gz -C /opt
#编译mysql
cd /opt/mysql-5.6.36/
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc
#安装
make && make install
#设置环境变量
cp support-files/my-default.cnf /etc/my.cnf
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
#创建mysql数据库,并授权
groupadd mysql
useradd -M -s /sbin/NOlogin mysql -g mysql
chown -R mysql.mysql /usr/local/mysql
mkdir -p /data/mysql
#初始化数据库
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

二、修改 mysql 的主配置文件:/etc/my.cnf ,注意三台服务器的 server-id 不能一样

---配置主服务器:
vim /etc/my.cnf
[mysql]
server-id = 1
#开启二进制日志
log_bin = master-bin
#允许从服务器进行同步
log-slave-updates = true

---配置从服务器1:
vim /etc/my.cnf
[mysql]
server-id = 2
#开启二进制日志
log_bin = master-bin
 #使用中继日志进行同步
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index

---配置从服务器2:
vim /etc/my.cnf
[mysql]
server-id = 3
log_bin = master-bin
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index

三、三台服务器启动 mysql 服务

#在三台服务器上分别创建这两个个软链接
ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/

#启动mysql
/usr/local/mysql/bin/mysqld_safe --user=mysql &
#关闭防火墙和安全功能
systemctl stop firewalld.service
setenforce 0

四、配置 Mysql 主从同步(一主两从)

1、mysql主从配置相对简单。需要注意的是授权
在所有数据库节点上授权两个用户,一个是从数据库同步使用用户myslave,一个是manager使用监控用户

mysql -u root -p             //进入数据库

mysql> grant replication slave on *.* to ‘myslave‘@‘192.168.45.%‘ identified by ‘123‘;
mysql> grant all privileges on *.* to ‘mha‘@‘192.168.45.%‘ identified by ‘manager‘;
mysql> flush privileges;  //刷新数据库
#在数据库上添加下列授权(理论上不需要)以主机名授权(MHA检查时是通过主机名的形式)
mysql> grant all privileges on *.* to ‘mha‘@‘master‘ identified by ‘manager‘;
mysql> grant all privileges on *.* to ‘mha‘@‘slave1‘ identified by ‘manager‘;
mysql> grant all privileges on *.* to ‘mha‘@‘slave2‘ identified by ‘manager‘;

在master服务器上查看二进制文件和同步点

show master status;

在两台从服务器上设置同步
#在两台从服务器上都执行下列的命令,同步主服务器的日志
mysql>  change master to master_host=‘192.168.45.133‘,master_user=‘myslave‘,master_password=‘123‘,master_log_file=‘master-bin.000001‘,master_log_pos=1292;
mysql>  start slave;    //开启slave
mysql> show slave status\G;  //查看slave

设置两个从库为只读模式
mysql> set global read_only=1;
mysql> flush privileges;   //刷新数据库

安装MHA

在所有服务器上安装MHA依懒的环境,首先安装epel源
yum install epel-release --nogpgcheck -y

yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN

在所有服务器上安装 node

#修改服务器名称,将manager服务器的主机名改为manager
hostnamectl set-hostname manager
 su
#挂载软件包
mount.cifs //192.168.100.3/mha /mnt
#解压安装node
cd ~
tar zxvf /mnt/mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57/
perl Makefile.PL
 make && make install

在manger服务器上安装manager(注意:一定要安装node组件才能安装manager组件)

#关闭防火墙
systemctl stop firewalld.service
setenforce 0
#解压并安装manager
cd ~
tar zxvf /mnt/mha4mysql-manager-0.57.tar.gz
mha4mysql-manager-0.57/
perl Makefile.PL
make && make install

manager服务器安装后在 usr/local/bin 目录下面会生成几个工具:

  • masterha_check_repl 检查mysql复制状况
  • masterha_master_monitor 检查master是否宕机
  • masterha_check_ssh 检查MHA的SSH配置情况
  • masterha_master_switch 控制故障转移
  • masterha_check_status 检查当前MHA运行状态
  • masterha_conf_host 添加或删除配置的server信息
  • masterha_stop 关闭manager
  • masterha_manager 启动manager的脚本

    node安装后在/usr/local/bin下面会生成的几个脚本(通常由MHA Manager的脚本触发,无需人为操作)

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

    配置无密码访问

1、在manager配置所有数据库节点的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.45.133
ssh-copy-id 192.168.45.130
ssh-copy-id 192.168.45.134

2、在master上配置到数据库节点slave1和slave2的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.45.130
ssh-copy-id 192.168.45.134

3、在slave1上配置到数据库节点master‘和slave2的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.45.133
ssh-copy-id 192.168.45.134

4、在slave2上配置到数据库节点slave1和master的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.45.133
ssh-copy-id 192.168.45.130




配置MHA

1、在manager节点上复制相关脚本到/usr/local目录

cp -ra /root/mha4mysql-manager-0.57/samples/scripts/ /usr/local/bin/
ls scripts/
 master_ip_failover:自动切换时 VIP 管理的脚本;
 master_ip_online_change:在线切换时 VIP 的管理;
 power_manager:故障发生后关闭主机的脚本;
 send_report:因故障切换后发送报警的脚本;
将自动切换时 VIP 管理的脚本复制到 /usr/local/bin/目录下:
cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin/
重新编写 master_ip_failover 脚本:
vim /usr/local/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.45.100‘;
my $brdc = ‘192.168.45.255‘;
my $ifdev = ‘ens33‘;
my $key = ‘1‘;
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";
my $exit_code = 0;
#my $ssh_start_vip = "/usr/sbin/ip addr add $vip/24 brd $brdc dev $ifdev label $ifdev:$key;/usr/sbin/arping -q -A -c 1 -I $ifdev $vip;iptables -F;";
#my $ssh_stop_vip = "/usr/sbin/ip addr del $vip/24 dev $ifdev label $ifdev:$key";
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" ) {

my $exit_code = 1;
eval {
print "Disabling the VIP on old master: $orig_master_host \n";
&stop_vip();
$exit_code = 0;
};
if ([email protected]) {
warn "Got Error: [email protected]\n";
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "start" ) {

my $exit_code = 10;
eval {
print "Enabling the VIP - $vip on the new master - $new_master_host \n";
&start_vip();
$exit_code = 0;
};
if ([email protected]) {
warn [email protected];
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "status" ) {
print "Checking the Status of the script.. OK \n";
exit 0;
}
else {
&usage();
exit 1;
}
}
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=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}

4、创建MHA软件目录并拷贝配置文件

mkdir /etc/masterha
 cp /root/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha/
 #编辑配置文件
vim /etc/masterha/app1.cnf

[server default]
#manager配置文件
manager_log=/var/log/masterha/app1/manager.log
#manager日志
manager_workdir=/var/log/masterha/app1
#master保存binlog的位置,这里的路径要与master里配置的bilog的相同
master_binlog_dir=/usr/local/mysql/data
#设置自动failover时候的切换脚本。也就是上边的那个脚本
master_ip_failover_script=/usr/local/bin/master_ip_failover
#设置手动切换时候的切换脚本
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
#这个密码是前文中创建监控用户的那个密码
password=manager
remote_workdir=/tmp
#设置复制用户密码
repl_password=123
#设置复制用户的用户
repl_user=myslave
#设置发生切换后发生报警的脚本
reporl_script=/usr/local/send_report
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.45.130 -s 192.168.45.134
#设置故障发生关闭故障脚本主机
shutdown_script=""
#设置ssh的登录用户名
ssh_user=root
#设置监控用户
user=mha

[server1]
hostname=192.168.45.133
port=3306

[server2]
candidate_master=1
#设置为候选master,如果设置该参数以后,发送主从切换以后将会从此从库升级为主库
hostname=192.168.45.130
check_repl_delay=0
port=3306

[server3]
hostname=192.168.45.134
port=3306

测试 ssh 无密码认证,如果正常最后都会输出 successful:

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

检查建健康状态

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

在master上配置虚拟ip

/sbin/ifconfig ens33:1 192.168.45.100/24

启动manager

1、在manager服务器上启动mha
 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 &

2、查看MHA状态,可以看到当前的master是mysql节点

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

故障模拟

1、启动监控观察日志饥记录
 tailf /var/log/masterha/app1/manager.log
2、关掉master服务器
pkill -9 mysql

可以看到从库的状态,vip会切换到其中之一的从库上:

此时,客户机也可以通过虚拟ip,连接上数据库:

mysql -h 192.168.45.100 -u root -p

---------------------------以上就是MHA 的架构文件-----------

原文地址:https://blog.51cto.com/14469918/2461453

时间: 2024-11-15 17:51:45

MHA高可用集群的相关文章

玩转MHA高可用集群

MHA高可用集群 =============================================================================== 概述:  本章将主要介绍MySQL中MHA高可用集群的相关内容,如下: MHA的功能介绍: MHA的集群架构,工作原理: CentOS 7上MHA实战配置部署及故障转移测试: =========================================================================

带你玩转MHA高可用集群

一.简介 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,现在很多大型的电商网站都采用此解决方案例如:某宝.某东.某会,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到在0~30秒之内手动或自动(如需自动需结合使用脚本实现)完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用性,就因为有此特性,受到很多大型电

MHA 高可用集群搭建(二)

MHA 高可用集群搭建安装scp远程控制http://www.cnblogs.com/kevingrace/p/5662839.html yum install openssh-clients mysql5.7运行环境:centos6.51 主机部署 manager:192.168.133.141test1: 192.168.133.138test2:192.168.133.139 (为master1的备用)test3: 192.168.133.140 test1为主,test2和test3为备

Mysql MHA高可用集群架构

记得之前发过一篇文章,名字叫<浅析MySQL高可用架构>,之后一直有很多小伙伴在公众号后台或其它渠道问我,何时有相关的深入配置管理文章出来,因此,民工哥,也将对前面的各类架构逐一进行整理,然后发布出来.那么今天将来发布的MHA的架构整体规划与配置操作. 简单介绍MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,作为MySQL高可用性环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数

MySQL数据库——MHA高可用集群架构(实战!!!)

MHA 简介 (1)简介 目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用. (2)该软件由两部分组成 MHA Manager(管理节点)和MHA Node(数据节点)

mysql进阶(三)MHA高可用集群

简介: 1.MHA目前在MySQL高可用方面是一个相对成熟的解决方案,是MySQL高可用环境下故障切换和主从提升的高可用软件 2.MHA能在短时间内完成故障切换,并且在最大程度上保证数据的一致性,以达到真正意义上的高可用 3.MHA基于mysql协议,通过mysql主从或主主进行复制 4.MHA官网:https://code.google.com/p/mysql-master-ha/ 软件由两部分组成:MHA Manager(关理节点)和MHA Node(数据节点) 1.MHA Manager可

MHA 高可用集群详解

一.什么是MHA 传统的主从复制如果主库宕机,其余从库不会自动的代替主库继续工作,这样就不能保证业务的高可用,而MHA就是一个mysql主从复制高可用的解决方案,当主库宕机后,MHA能在1-30秒实现故障检测和故障自动转移,选择一个最优的从库作为主库,同时新的主库还继续与其他从库保持数据一致的状态 二.MHA架构组成 整个MAH架构由两部分组成,即MHA Manager(管理节点),和MHA Node(数据节点),MHA Manager 可以独立部署到一台服务器上(含虚拟机)管理多个主从复制集群

各种报错,搭建Mysql MHA高可用集群时踩的各种坑

mha下载地址,需要翻墙 https://code.google.com/p/mysql-master-ha/ 管理软件 mha4mysql-manager-0.52-0.noarch.rpm 节点软件 mha4mysql-node-0.52-0.noarch.rpm 环境介绍 Centos6.7 X64 192.168.30.210 monitor 192.168.30.211 db1 (master) 192.168.30.212 db2  (备master) 192.168.30.213 

mysql高可用集群——MHA架构

目录 1.下载 2.搭建mha 2.1 系统配置 2.2 架构 2.3 添加ssh公钥信任 2.4 安装mha节点 2.5 manager配置文件 2.6 检查 2.7 启动manager进程 2.8 碰到的问题 3.测试切换 3.1 正常切换测试 3.2 回切测试 3.3 雪崩测试 3.4 主从不一致切换测试 下载 mha链接地址:http://pan.baidu.com/s/1pJkDGX9#dir/path=%2Fmysql%2FHA%2Fmha 或者:https://code.googl