您的当前位置:首页正文

MHA高可用部署及测试

2020-11-09 来源:步旅网

一、MHA特性二、MHA工作机制及failover过程解析三、MHA适用的主从架构四、MHA高可用环境的构建4.1实验环境4.2实验大概步骤4.3相关脚本说明4.4MHA部署过程4.5配置

4.1
4.2
4.3
4.4
4.5

一.MHA特性

1.主服务器的自动监控和故障转移
MHA监控复制架构的主服务器,一旦检测到主服务器故障,就会自动进行故障转移。即使有些从服务器没有收到最新的relay log,MHA自动从最新的从服务器上识别差异的relay log并把这些日志应用到其他从服务器上,因此所有的从服务器保持一致性了。MHA通常在几秒内完成故障转移,9-12秒可以检测出主服务器故障,7-10秒内关闭故障的主服务器以避免脑裂,几秒中内应用差异的relay log到新的主服务器上,整个过程可以在10-30s内完成。还可以设置优先级指定其中的一台slave作为master的候选人。由于MHA在slaves之间修复一致性,因此可以将任何slave变成新的master,而不会发生一致性的问题,从而导致复制失败。
2.交互式主服务器故障转移

可以只使用MHA的故障转移,而不用于监控主服务器,当主服务器故障时,人工调用MHA来进行故障故障。
3.非交互式的主故障转移
不监控主服务器,但自动实现故障转移。这种特征适用于已经使用其他软件来监控主服务器状态,比如heartbeat来检测主服务器故障和虚拟IP地址接管,可以使用MHA来实现故障转移和slave服务器晋级为master服务器。
4.在线切换主服务器
在许多情况下,需要将现有的主服务器迁移到另外一台服务器上。比如主服务器硬件故障,RAID控制卡需要重建,将主服务器移到性能更好的服务器上等等。维护主服务器引起性能下降,导致停机时间至少无法写入数据。另外,阻塞或杀掉当前运行的会话会导致主主之间数据不一致的问题发生。MHA提供快速切换和优雅的阻塞写入,这个切换过程只需要0.5-2s的时间,这段时间内数据是无法写入的。在很多情况下,0.5-2s的阻塞写入是可以接受的。因此切换主服务器不需要计划分配维护时间窗口(呵呵,不需要你在夜黑风高时通宵达旦完成切换主服务器的任务)。

二.MHA工作机制

MHA自动Failover过程解析

https://code.google.com/p/mysql-master-ha/wiki/Sequences_of_MHA

三.MHA适用的主从架构

https://code.google.com/p/mysql-master-ha/wiki/UseCases

四.MHA高可用环境的构建
4.1 实验环境

4.2 实验大概步骤4.3 脚本相关说明

MHA node有三个脚本,依赖perl模块
save_binary_logs:保存和拷贝宕掉的主服务器二进制日志
apply_diff_relay_logs:识别差异的relay log事件,并应用到所有从服务器节点
purge_relay_logs:清除relay log日志文件

4.4 MHA部署过程

A.三节点配置epel的yum源,安装相关依赖包

rpm -Uvh rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 yum -y install perl-DBD-MySQL ncftp

B. 建立主从复制关系

在node1上:

mysql>grant replication slave on *.* to 'rep'@'192.168.10.%' identified by 'geekwolf'; mysql>grant all on *.* to 'root'@'192.168.10.%' identified by 'geekwolf'; mysql>show master status;

拷贝node1的data目录同步到node2,node3 在node2 node3上:

mysql>change master to master_host='192.168.10.216', master_user='rep', master_password='geekwolf',master_port=3306, master_log_file='mysql-in.000006',master_log_pos=120,master_connect_retry=1; mysql>start slave;

每个节点都做好mysql命令的软链

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

C. ssh-keygen实现三台机器之间相互免密钥登录 在node1(在其他两个节点一同)执行

ssh-keygen -t rsa ssh-copy-id -i /root/.ssh/id_rsa.pub root@node1 ssh-copy-id -i /root/.ssh/id_rsa.pub root@node2 ssh-copy-id -i /root/.ssh/id_rsa.pub root@node3

D. 三节点安装mha4mysql-node-0.56,node3上安装mha4mysql-manager-0.56
在node1 node2 node3安装mha4mysql-node
wget https://googledrive.com/host/0B1lu97m8-haWeHdGWXp0YVVUSlk/mha4mysql-node-0.56.tar.gz
tar xf mha4mysql-node-0.56.tar.gz
cd mha4mysql-node
perl Makefile.PL
make && make install

在node3上安装mha4mysql-manager
wget https://googledrive.com/host/0B1lu97m8-haWeHdGWXp0YVVUSlk/mha4mysql-manager-0.56.tar.gz
tar xf mha4mysql-manager-0.56.tar.gz
cd mha4mysql-manager-0.56
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Config-IniFiles perl-Time-HiRes

E. 在node3上管理MHA配置文件
mkdir -p /etc/mha/{app1,scripts}
cp mha4mysql-manager-0.56/samples/conf/ /etc/mha/
cp mha4mysql-manager-0.56/samples/scripts/ /etc/mha/scripts/
mv /etc/mha/app1.cnf /etc/mha/app1/
mv /etc/mha/masterha_default.cnf /etc/masterha_default.cnf

设置全局配置:
vim /etc/mha/masterha_default.cnf

[server default] user=root password=geekwolf ssh_user=root repl_user=rep repl_password=geekwolf ping_interval=1 #shutdown_script="" secondary_check_script = masterha_secondary_check -s node1 -s node2 -s node3 --user=root --master_host=node1 --master_ip=192.168.10.216 --master_port=3306 #master_ip_failover_script="/etc/mha/scripts/master_ip_failover" #master_ip_online_change_script="/etc/mha/scripts/master_ip_online_change" # shutdown_script= /script/masterha/power_manager #report_script=""
显示全文