如何部署MHA高可用MySQL数据库

目录

一、MHA概念

MHA 的组成

MHA 的特点

MHA工作原理

二、部署MySQL数据库MHA高可用

第一步 关闭所有防火墙和安全机制

第二步 修改主数据库配置文件

第三步 修改从数据库的配置文件

第四步 重启服务

第五步 优化所有数据库路径

第六步 授权所有数据库节点

第七步 设置授权连接

第八步 刷新权限表

第九步  查看Master节点

第十步 设置从数据库规则

第十一步 设置从数据库只读模式

第十二步 查看从数据库节点信息

第十三步 安装EPLE源

第十四步 安装MHA依赖环境

第十五步 导入Node组件并安装

第十六步 在MHA Manager节点上安装Manager组件

第十七步 配置所有数据库节点无密码进行认证

第十八步 配置三台数据库无密码认证

第十九步 拷贝执行文件

第二十步 复制脚本文件

第二十一步 修改脚本文件

第二十二步 修改脚本文件内容

第二十三步 创建MHA软件目录并拷贝配置文件

第二十四步 修改配置文件

第二十五步 手动开启虚拟IP

第二十六步  测试SSH无密码认证

第二十七步 测试主从连接情况

第二十八步 在Manager上启动MHA

第二十九步 查看MHA状态

第三十步 查看MHA日志


一、MHA概念

MHA(Master High Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。

MHA 的组成

  • MHA Node(数据节点) MHA Node 运行在每台 MySQL 服务器上。

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

MHA 的特点

  • 自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失

  • 使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性

  • 目前MHA支持一主多从架构,最少三台服务,即一主两从

MHA Manger 管理多组主从复制。

MHA工作原理

MHA工作原理总结如下:

1、从宕机崩溃的master 保存二进制日志事件(binlog events); 2、识别含有最新的更新 slave 日志 3、应用差异的中继日志(relay log)到其他的slave 4、应用从master保存的二进制日志事件 5、提升一个 salve 为新的master 6、使其他的slave连接行的master 进行复制。

如何部署MHA高可用MySQL数据库_第1张图片

二、部署MySQL数据库MHA高可用

第一步 关闭所有防火墙和安全机制

命令:systemctl stop firewalld

systemctl disable firewalld

setenforce 0

如何部署MHA高可用MySQL数据库_第2张图片

第二步 修改主数据库配置文件

命令:vim /etc/my.cnf

如何部署MHA高可用MySQL数据库_第3张图片

第三步 修改从数据库的配置文件

命令:vim /etc/my.cnf

如何部署MHA高可用MySQL数据库_第4张图片

第四步 重启服务

命令:systemctl restart mysqld

第五步 优化所有数据库路径

命令:ln -s /usr/local/mysql/bin/mysql /usr/sbin/

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

如何部署MHA高可用MySQL数据库_第5张图片

第六步 授权所有数据库节点

命令:grant replication slave on *.* to 'myslave'@'网段' identified by '密码';

grant all slave on *.* to 'mha'@'网段' identified by 'manager';

如何部署MHA高可用MySQL数据库_第6张图片

第七步 设置授权连接

命令:grant all privileges on *.* to 'mha'@'master' identified by 'manager';

grant all privileges on *.* to 'mha'@'slave1' identified by 'manager';

grant all privileges on *.* to 'mha'@'slave2' identified by 'manager';

如何部署MHA高可用MySQL数据库_第7张图片

第八步 刷新权限表

命令:flush privileges;

如何部署MHA高可用MySQL数据库_第8张图片

第九步  查看Master节点

命令:show master status;

如何部署MHA高可用MySQL数据库_第9张图片

第十步 设置从数据库规则

命令:change master to master_host='主数据库IP地址',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=1743; 

如何部署MHA高可用MySQL数据库_第10张图片

第十一步 设置从数据库只读模式

命令:set global read_only=1;

如何部署MHA高可用MySQL数据库_第11张图片

第十二步 查看从数据库节点信息

命令:show slave status\G

如何部署MHA高可用MySQL数据库_第12张图片

第十三步 安装EPLE源

命令:yum -y install epel-release --nogpgchec

如何部署MHA高可用MySQL数据库_第13张图片

第十四步 安装MHA依赖环境

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

如何部署MHA高可用MySQL数据库_第14张图片

第十五步 导入Node组件并安装

命令:tar xf mha4mysql-node-0.57.tar.gz

cd mha4mysql-node-0.57

perl Makefile.PL

make && make install

如何部署MHA高可用MySQL数据库_第15张图片

第十六步 在MHA Manager节点上安装Manager组件

命令:tar zxvf mha4mysql-manager-0.57.tar.gz
cd mha4mysql-manager-0.57
perl Makefile.PL
make && make install

如何部署MHA高可用MySQL数据库_第16张图片

第十七步 配置所有数据库节点无密码进行认证

命令:ssh-keygen -t rsa             
ssh-copy-id 主数据库IP
ssh-copy-id 从数据库IP
ssh-copy-id 从数据库IP

如何部署MHA高可用MySQL数据库_第17张图片

第十八步 配置三台数据库无密码认证

如何部署MHA高可用MySQL数据库_第18张图片

如何部署MHA高可用MySQL数据库_第19张图片

如何部署MHA高可用MySQL数据库_第20张图片

第十九步 拷贝执行文件

命令:cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/bin

如何部署MHA高可用MySQL数据库_第21张图片

第二十步 复制脚本文件

命令:cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin

如何部署MHA高可用MySQL数据库_第22张图片

第二十一步 修改脚本文件

命令:vim /usr/local/bin/master_ip_failover 

如何部署MHA高可用MySQL数据库_第23张图片

第二十二步 修改脚本文件内容

内容:my $vip = '192.168.80.200';                                    #指定vip的地址
my $brdc = '192.168.80.255';                                #指定vip的广播地址
my $ifdev = 'ens33';                                        #指定vip绑定的网卡
my $key = '1';                                                #指定vip绑定的虚拟网卡序列号
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";        #代表此变量值为ifconfig ens33:1 192.168.80.200
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";        #代表此变量值为ifconfig ens33:1 192.168.80.200 down
my $exit_code = 0;                                            #指定退出状态码为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 ($@) {
warn "Got Error: $@\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 ($@) {
warn $@;
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";
}

如何部署MHA高可用MySQL数据库_第24张图片

第二十三步 创建MHA软件目录并拷贝配置文件

命令:mkdir /etc/masterha
cp /opt/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha

如何部署MHA高可用MySQL数据库_第25张图片

第二十四步 修改配置文件

命令:vim /etc/masterha/app1.cnf

内容:

[server default]
manager_log=/var/log/masterha/app1/manager.log
manager_workdir=/var/log/masterha/app1
master_binlog_dir=/usr/local/mysql/data
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
password=manager
ping_interval=1
remote_workdir=/tmp
repl_password=123
repl_user=myslave
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.80.11 -s 192.168.80.12
shutdown_script=""
ssh_user=root
user=mha

[server1]
hostname=主数据库IP
port=3306

[server2]
candidate_master=1
check_repl_delay=0
hostname=从数据库IP
port=3306

[server3]
hostname=从数据库IP
port=3306

如何部署MHA高可用MySQL数据库_第26张图片

第二十五步 手动开启虚拟IP

命令:/sbin/ifconfig ens33:1 192.168.80.200/24

如何部署MHA高可用MySQL数据库_第27张图片

第二十六步  测试SSH无密码认证

命令:masterha_check_ssh -conf=/etc/masterha/app1.cnf

如何部署MHA高可用MySQL数据库_第28张图片

第二十七步 测试主从连接情况

命令:masterha_check_repl -conf=/etc/masterha/app1.cnf

如何部署MHA高可用MySQL数据库_第29张图片

第二十八步 在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 &

如何部署MHA高可用MySQL数据库_第30张图片

第二十九步 查看MHA状态

命令:masterha_check_status --conf=/etc/masterha/app1.cnf

如何部署MHA高可用MySQL数据库_第31张图片

第三十步 查看MHA日志

命令:cat /var/log/masterha/app1/manager.log | grep "current master"

如何部署MHA高可用MySQL数据库_第32张图片

你可能感兴趣的:(数据库,mysql)