MySQL MHA高可用架构部署配置实例是怎样的

数据库   2024年04月20日 18:02  

本篇文章给大家分享的是有关MySQL MHA高可用架构部署配置实例是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

MHA高可用架构部署配置实例一、前言1.1What‘s ?——原理简介

MHA——Master High Availability,目前在MySQL高可用方面是一个相对成熟的解决方案,是一套优秀的MySQL故障切换和主从提升的高可用软件。

这里我们提到了两个个关键点:“高可用”,“故障切换“。我们逐一简单介绍一下这两者的含义。

1.1.1何为高可用?

高可用就是可用性强,在一定条件下(某个服务器出错或宕机)可以保证服务器可以正常运行,在一定程度上不会影响业务的运行。

1.1.2故障切换

当主服务器出现错误时,被manager服务器监控到主库mysqld服务停止后,首先对主库进行SSH登录检查(save_binary_logs -command=test),然后对mysqld服务进行健康检查(PING(SELECT)每个3秒检查一次,持续3次),最后作出Master is down!的判断,master failover开始进行对应的处理,具体的过程可以参考网上的博客,这里给出一个链接:https://www.cnblogs.com/xiaoboluo768/p/5210820.html 大家可以参考这位朋友的文章,讲的非常详细。

二、MHA高可用架构部署实例2.1部署环境与基础配置要求

在虚拟机环境下,需要四台Centos7服务器(这里我使用的是Centos7,所以使用的mha版本是0.57的)

其中一台作为mha服务器(manager)来监控管理下面的MySQL服务器;

其余三台一主两从,其中从服务器中的其中一台作为储备主服务器,当主服务器宕机或出错时提升为主服务器。(这里就是主从提升了)

主从复制在上一篇文章中已介绍了MySQL5.7.17版本的配置实例,5.6.36的配置原理及思路一致,只不过细节上有些许差别。

首先,分配一下ip,私网下为了做实验验证就自己定义就行

MHA服务器——manager:192.168.68.136

MySQL主服务器——master:192.168.68.129

MySQL储备主服务器(起初是从服务器)——slave1:192.168.68.132

MySQL从服务器——slave2:192.168.68.133

相关软件包链接:

链接:https://pan.baidu.com/s/1VNdEIYvT1g_xKbrhzYNI-A 提取码:wmyg

2.2配置流程2.2.1概述配置流程

安装编译环境——安装MySQL5.6.36数据库——配置时间同步(可以参考上篇博客的实验)——配置主从复制与储备MySQL服务器——安装node工具——配置mha服务器——测试验证

2.2.2配置步骤细解2.2.2.1首先我们先对MySQL服务器进行配置——安装MySQL5.6.36

MySQL服务器配置如下:

#1.安装编译环境yuminstall-yncurses-develgcc-c++perl-Module-Install#2.安装gmake编译环境tarzxfcmake-2.8.6.tar.gz-C/opt/cd/opt/cmake-2.8.6/./configuregmake&&gmakeinstall

安装MySQL5.6.36数据库

tarzxfmysql-5.6.36.tar.gz-C/opt/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=/etcmakemakeinstall

相关优化配置

cpsupport-files/my-default.cnf/etc/my.cnf#主配置文件cpsupport-files/mysql.server/etc/rc.d/init.d/mysqldchmod+x/etc/rc.d/init.d/mysqldchkconfig--addmysqldecho"PATH=$PATH:/usr/local/mysql/bin">>/etc/profilesource/etc/profileuseradd-M-s/sbin/nologinmysqlchown-Rmysql.mysql/usr/local/mysql/usr/local/mysql/scripts/mysql_install_db\--basedir=/usr/local/mysql\--datadir=/usr/local/mysql/data\--user=mysql

这边我们就不做防火墙规则了,直接进行关闭

systemctlstopfirewalld.servicesetenforce0

接着我们分别对三个MySQL数据库进行主配置文件配置

1.MySQL主服务器配置——vim /etc/my.cnf

[mysqld]server-id=1log_bin=master-binlog-slave-update=true

2.MySQL从服务器slave1、slave2配置——vim /etc/my.cnf

[mysqld]server-id=2#开启二进制日志log_bin=master-bin#使用中继日志进行同步relay-log=relay-log-binrelay-log-index=slave-relay-bin.index[mysqld]server-id=3#开启二进制日志log_bin=master-bin#使用中继日志进行同步relay-log=relay-log-binrelay-log-index=slave-relay-bin.index

3.master、slave1、slave2分别做两个软链接

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

4.启动MySQL服务

/usr/local/mysql/bin/mysqld_safe--user=mysql&

5.查看验证端口

[root@mastermysql-5.6.36]#netstat-natp|grep3306tcp600:::3306:::*LISTEN103231/mysqld2.2.2.2配置主从复制

MySQL服务器上配置——根据自己的网段设置

在所有数据库节点上授权两个用户,一个是从库同步使用用户myslave,另一个是manager 使用用户mha

#进入所有的服务器数据库,进行授权设置mysql>grantreplicationslaveon*.*to'myslave'@'192.168.68.%'identifiedby'123456';QueryOK,0rowsaffected(0.00sec)mysql>grantallprivilegeson*.*to'mha'@'192.168.68.%'identifiedby'manager';QueryOK,0rowsaffected(0.00sec)#补充由于mha相关特性避免一些问题产生进行的配置mysql>grantallprivilegeson*.*to'mha'@'master'identifiedby'manager';QueryOK,0rowsaffected(0.00sec)mysql>grantallprivilegeson*.*to'mha'@'slave1'identifiedby'manager';QueryOK,0rowsaffected(0.00sec)mysql>grantallprivilegeson*.*to'mha'@'slave2'identifiedby'manager';QueryOK,0rowsaffected(0.00sec)mysql>flushprivileges;QueryOK,0rowsaffected(0.00sec)

注意:该步骤在所有MySQL服务器上都要配置

查看MySQL主服务器的同步位置并且进行记录

showmasterstatus;mysql>showmasterstatus;+-------------------+----------+--------------+------------------+-------------------+|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|Executed_Gtid_Set|+-------------------+----------+--------------+------------------+-------------------+|master-bin.000001|120||||+-------------------+----------+--------------+------------------+-------------------+1rowinset(0.00sec)

MySQL从服务器上设置同步

#设置同步配置命令mysql>changemastertomaster_host='192.168.68.129',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=120;QueryOK,0rowsaffected,2warnings(0.01sec)mysql>startslave;QueryOK,0rowsaffected(0.00sec)#查看两个线程是否为yesmysql>showslavestatus\G***************************1.row***************************...//省略部分内容Master_Log_File:master-bin.000001Read_Master_Log_Pos:120Relay_Log_File:relay-log-bin.000002Relay_Log_Pos:284Relay_Master_Log_File:master-bin.000001Slave_IO_Running:Yes#说明同步成功Slave_SQL_Running:YesReplicate_Do_DB:Master_SSL_CA_File:

在主服务器上创建一个数据库,在从服务器上验证是否存在同一数据库;

注意!!!必须设置两个从库为只读模式

mysql>setglobalread_only=1;QueryOK,0rowsaffected(0.00sec)

以上就是MySQL5.6.36数据库的手工编译安装与主从复制的流程,下面我们开始进行mha的相关配置

2.2.2.3配置mha

1.所有服务器上都安装MHA依赖的环境,首先安装epel源。

yum-yinstallepel-release--nogpgcheckyum-yinstallperl-DBD-MySQL\perl-Config-Tiny\perl-Log-Dispatch\perl-Parallel-ForkManager\perl-ExtUtils-CBuilder\perl-ExtUtils-MakeMaker\perl-CPAN

2.MHA软件包对于每个操作系统版本不一样,这里是centos7.4必须选择0.57版本,在所有服务器上必须安装node组件,最后在MHA-manager节点上安装manager组件,因为manager依赖node组件,下面都是在master上操作演示安装node组件

tarzxfmha4mysql-node-0.57.tar.gzcdmha4mysql-node-0.57perlMakefile.PLmake&&makeinstall

3.在MHA-manager上安装manager组件

tar-zxvfmha4mysql-manager-0.57.tar.gzcdmha4mysql-manager-0.57perlMakefile.PLmake&&makeinstall

manager 安装后在/usr/local/bin 下面会生成几个工具,主要包括以下几个:masterha_check_ssh 检查MHA的SSH的配置状况masterha_check_repl 检查MySQL复制状况masterha_manager 启动manager脚本masterha_check_status 检查当前MHA运行状态masterha_master_monitor 检测master是否宕机masterha_master_switch 控制故障转移(自动或者手动)masterha_conf_host 添加或删除配置的server信息masterha_stop 关闭manager

[root@managermha4mysql-manager-0.57]#cd/usr/local/bin/[root@managerbin]#lsapply_diff_relay_logsmasterha_check_statusmysqlmysql_embeddedmysql_upgradefilter_mysqlbinlogmasterha_conf_hostmysqladminmysqlimportmysqlxtestinnochecksummasterha_managermysqlbinlogmysql_install_dbperrorlibmysqlclient.amasterha_master_monitormysqlcheckmysql_pluginpkgconfiglibmysqlclient.somasterha_master_switchmysql_client_testmysqlpumppluginlibmysqlclient.so.20masterha_secondary_checkmysql_client_test_embeddedmysql_secure_installationpurge_relay_logslibmysqlclient.so.20.3.4masterha_stopmysql_configmysqlshowreplacelibmysqld.amyisamchkmysql_config_editormysqlslapresolveiplibmysqlservices.amyisam_ftdumpmysqldmysql_ssl_rsa_setupresolve_stack_dumplz4_decompressmyisamlogmysqld_pre_systemdmysqltestsave_binary_logsmasterha_check_replmyisampackmysqldumpmysqltest_embeddedzlib_decompressmasterha_check_sshmy_print_defaultsmysqldumpslowmysql_tzinfo_to_sql[root@managerbin]#

node安装后也会在/usr/local/bin 下面会生成一下几个脚本(这些工具通常由MHA manager的脚本触发,无需人为操作)主要如下:save_binary_logs 保存和复制master的二进制日志apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的slavefilter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)purge_relay_logs 清除中继日志(不会阻塞SQL线程)

[root@slave2mha4mysql-node-0.57]#cd/usr/local/bin/[root@slave2bin]#lsapply_diff_relay_logsccmakecmakecpackctestfilter_mysqlbinlogpurge_relay_logssave_binary_logs

4.配置无密码认证

4.1在 manager 上配置到所有数据库节点的无密码认证

[root@manager~]#ssh-keygen-trsa//一路按回车键[root@manager~]#ssh-copy-id192.168.68.129[root@manager~]#ssh-copy-id192.168.68.132[root@manager~]#ssh-copy-id192.168.68.133

4.2在 Mysql1 上配置到数据库节点Mysql2和Mysql3的无密码认证

[root@master~]#ssh-keygen-trsa[root@master~]#ssh-copy-id192.168.68.132[root@master~]#ssh-copy-id192.168.68.133

4.3在 Mysql2 上配置到数据库节点Mysql1和Mysql3的无密码认证

[root@slave1~]#ssh-keygen-trsa[root@slave1~]#ssh-copy-id192.168.68.129[root@slave1~]#ssh-copy-id192.168.68.133

4.4在 Mysql3 上配置到数据库节点Mysql1和Mysql2的无密码认证

[root@slave2~]#ssh-keygen-trsa[root@slave2~]#ssh-copy-id192.168.68.129[root@slave2~]#ssh-copy-id192.168.68.132

5.配置MHA脚本

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

[root@manager~]#cp-ra/root/mha/mha4mysql-manager-0.57/samples/scripts/usr/local/bin//拷贝后会有四个执行文件[root@managers~]#ll/usr/local/bin/scripts/总用量32-rwxr-xr-x1mysqlmysql36485月312015master_ip_failover#自动切换时VIP管理的脚本-rwxr-xr-x1mysqlmysql98725月2509:07master_ip_online_change#在线切换时vip的管理-rwxr-xr-x1mysqlmysql118675月312015power_manager#故障发生后关闭主机的脚本-rwxr-xr-x1mysqlmysql13605月312015send_report#因故障切换后发送报警的脚本

复制上述的自动切换时 VIP 管理的脚本到/usr/local/bin 目录,这里使用脚本管理 VIP.

[root@managerbin]#cdscripts/[root@managerscripts]#lsmaster_ip_failovermaster_ip_online_changepower_managersend_report[root@managerscripts]#cpmaster_ip_failover/usr/local/bin/

修改该配置文件如下:主要是添加内容的部分

[root@manager~]#vim/usr/local/bin/master_ip_failover#!/usr/bin/envperlusestrict;usewarningsFATAL=>'all';useGetopt::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.68.200';my$brdc='192.168.68.255';my$ifdev='ens33';my$key='1';my$ssh_start_vip="/sbin/ifconfigens33:$key$vip";my$ssh_stop_vip="/sbin/ifconfigens33:$keydown";my$exit_code=0;#my$ssh_start_vip="/usr/sbin/ipaddradd$vip/24brd$brdcdev$ifdevlabel$ifdev:$key;/usr/sbin/arping-q-A-c1-I$ifdev$vip;iptables-F;";#my$ssh_stop_vip="/usr/sbin/ipaddrdel$vip/24dev$ifdevlabel$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();submain{print"\n\nINSCRIPTTEST====$ssh_stop_vip==$ssh_start_vip===\n\n";if($commandeq"stop"||$commandeq"stopssh"){my$exit_code=1;eval{print"DisablingtheVIPonoldmaster:$orig_master_host\n";&stop_vip();$exit_code=0;};if($@){warn"GotError:$@\n";exit$exit_code;}exit$exit_code;}elsif($commandeq"start"){my$exit_code=10;eval{print"EnablingtheVIP-$viponthenewmaster-$new_master_host\n";&start_vip();$exit_code=0;};if($@){warn$@;exit$exit_code;}exit$exit_code;}elsif($commandeq"status"){print"CheckingtheStatusofthescript..OK\n";exit0;}else{&usage();exit1;}}substart_vip(){`ssh$ssh_user\@$new_master_host\"$ssh_start_vip\"`;}#AsimplesystemcallthatdisabletheVIPontheold_mastersubstop_vip(){`ssh$ssh_user\@$orig_master_host\"$ssh_stop_vip\"`;}subusage{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";}

6.创建 MHA 软件目录并拷贝配置文件。

[root@managerscripts]#mkdir/etc/masterha[root@managerscripts]#cd~/mha/mha4mysql-manager-0.57/[root@managermha4mysql-manager-0.57]#lsAUTHORSblibdebianlibMakefile.PLMETA.ymlREADMEsamplestestsbinCOPYINGincMakefileMANIFESTpm_to_blibrpmt[root@managermha4mysql-manager-0.57]#cdsamples/[root@managersamples]#cdconf/[root@managerconf]#ls[root@managerconf]#cpapp1.cnf/etc/masterha/[root@managerconf]#vim/etc/masterha/app1.cnf

编辑修改app1.cnf

[serverdefault]manager_log=/var/log/masterha/app1/manager.log##manager工作目录manager_workdir=/var/log/masterha/app1#manager日志master_binlog_dir=/usr/local/mysql/data#master保存binlog的位置,这里的路径要与master里配置的binlog的路径一致,以便mha能找到master_ip_failover_script=/usr/local/bin/master_ip_failover#设置自动failover时候的切换脚本,也就是上边的哪个脚本master_ip_online_change_script=/usr/local/bin/master_ip_online_change#设置手动切换时候的切换脚本password=manager#设置mysql中root用户的密码,这个密码是前文中创建监控用户的那个密码ping_interval=1#设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行railoverremote_workdir=/tmp#设置远端mysql在发生切换时binlog的保存位置repl_password=123#设置复制用户的密码repl_user=myslave#设置复制用户的用户secondary_check_script=/usr/local/bin/masterha_secondary_check-s192.168.68.132-s192.168.68.133shutdown_script=""#设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机放在发生脑裂,这里没有使用)ssh_user=root#设置ssh的登录用户名user=mha#设置监控用户root[server1]hostname=192.168.68.129port=3306[server2]candidate_master=1#设置为候选mastercheck_repl_delay=0hostname=192.168.68.132port=3306[server3]hostname=192.168.68.133port=33062.2.2.4测试验证

测试 ssh 无密码认证,如果正常最后会输出 successfully,如下所示。

[root@managerconf]#masterha_check_ssh-conf=/etc/masterha/app1.cnfTueJan1416:44:582020-[warning]Globalconfigurationfile/etc/masterha_default.cnfnotfound.Skipping.TueJan1416:44:582020-[info]Readingapplicationdefaultconfigurationfrom/etc/masterha/app1.cnf..TueJan1416:44:582020-[info]Readingserverconfigurationfrom/etc/masterha/app1.cnf..TueJan1416:44:582020-[info]StartingSSHconnectiontests..TueJan1416:45:002020-[debug]TueJan1416:44:582020-[debug]ConnectingviaSSHfromroot@192.168.68.129(192.168.68.129:22)toroot@192.168.68.132(192.168.68.132:22)..TueJan1416:44:592020-[debug]ok.TueJan1416:44:592020-[debug]ConnectingviaSSHfromroot@192.168.68.129(192.168.68.129:22)toroot@192.168.68.133(192.168.68.133:22)..TueJan1416:45:002020-[debug]ok.TueJan1416:45:012020-[debug]TueJan1416:44:592020-[debug]ConnectingviaSSHfromroot@192.168.68.133(192.168.68.133:22)toroot@192.168.68.129(192.168.68.129:22)..TueJan1416:45:002020-[debug]ok.TueJan1416:45:002020-[debug]ConnectingviaSSHfromroot@192.168.68.133(192.168.68.133:22)toroot@192.168.68.132(192.168.68.132:22)..TueJan1416:45:012020-[debug]ok.TueJan1416:45:012020-[debug]TueJan1416:44:592020-[debug]ConnectingviaSSHfromroot@192.168.68.132(192.168.68.132:22)toroot@192.168.68.129(192.168.68.129:22)..TueJan1416:45:002020-[debug]ok.TueJan1416:45:002020-[debug]ConnectingviaSSHfromroot@192.168.68.132(192.168.68.132:22)toroot@192.168.68.133(192.168.68.133:22)..TueJan1416:45:002020-[debug]ok.TueJan1416:45:012020-[info]AllSSHconnectiontestspassedsuccessfully.

健康检查如下:

[root@managerconf]#masterha_check_repl-conf=/etc/masterha/app1.cnfTueJan1416:45:212020-[warning]Globalconfigurationfile/etc/masterha_default.cnfnotfound.Skipping.TueJan1416:45:212020-[info]Readingapplicationdefaultconfigurationfrom/etc/masterha/app1.cnf..TueJan1416:45:212020-[info]Readingserverconfigurationfrom/etc/masterha/app1.cnf..TueJan1416:45:212020-[info]MHA::MasterMonitorversion0.57.Creatingdirectory/var/log/masterha/app1..done.TueJan1416:45:222020-[info]GTIDfailovermode=0TueJan1416:45:222020-[info]DeadServers:TueJan1416:45:222020-[info]AliveServers:TueJan1416:45:222020-[info]192.168.68.129(192.168.68.129:3306)TueJan1416:45:222020-[info]192.168.68.132(192.168.68.132:3306)TueJan1416:45:222020-[info]192.168.68.133(192.168.68.133:3306)TueJan1416:45:222020-[info]AliveSlaves:TueJan1416:45:222020-[info]192.168.68.132(192.168.68.132:3306)Version=5.6.36-log(oldestmajorversionbetweenslaves)log-bin:enabledTueJan1416:45:222020-[info]Replicatingfrom192.168.68.129(192.168.68.129:3306)TueJan1416:45:222020-[info]PrimarycandidateforthenewMaster(candidate_masterisset)TueJan1416:45:222020-[info]192.168.68.133(192.168.68.133:3306)Version=5.6.36-log(oldestmajorversionbetweenslaves)log-bin:enabledTueJan1416:45:222020-[info]Replicatingfrom192.168.68.129(192.168.68.129:3306)TueJan1416:45:222020-[info]CurrentAliveMaster:192.168.68.129(192.168.68.129:3306)TueJan1416:45:222020-[info]Checkingslaveconfigurations..TueJan1416:45:222020-[warning]relay_log_purge=0isnotsetonslave192.168.68.132(192.168.68.132:3306).TueJan1416:45:222020-[warning]relay_log_purge=0isnotsetonslave192.168.68.133(192.168.68.133:3306).TueJan1416:45:222020-[info]Checkingreplicationfilteringsettings..TueJan1416:45:222020-[info]binlog_do_db=,binlog_ignore_db=TueJan1416:45:222020-[info]Replicationfilteringcheckok.TueJan1416:45:222020-[info]GTID(withauto-pos)isnotsupportedTueJan1416:45:222020-[info]StartingSSHconnectiontests..TueJan1416:45:252020-[info]AllSSHconnectiontestspassedsuccessfully.TueJan1416:45:252020-[info]CheckingMHANodeversion..TueJan1416:45:262020-[info]Versioncheckok.TueJan1416:45:262020-[info]CheckingSSHpublickeyauthenticationsettingsonthecurrentmaster..TueJan1416:45:262020-[info]HealthCheck:SSHto192.168.68.129isreachable.TueJan1416:45:262020-[info]MasterMHANodeversionis0.57.TueJan1416:45:262020-[info]Checkingrecoveryscriptconfigurationson192.168.68.129(192.168.68.129:3306)..TueJan1416:45:262020-[info]Executingcommand:save_binary_logs--command=test--start_pos=4--binlog_dir=/usr/local/mysql/data--output_file=/tmp/save_binary_logs_test--manager_version=0.57--start_file=master-bin.000001TueJan1416:45:262020-[info]Connectingtoroot@192.168.68.129(192.168.68.129:22)..Creating/tmpifnotexists..ok.Checkingoutputdirectoryisaccessibleornot..ok.Binlogfoundat/usr/local/mysql/data,uptomaster-bin.000001TueJan1416:45:262020-[info]Binlogsettingcheckdone.TueJan1416:45:262020-[info]CheckingSSHpublickeyauthenticationandcheckingrecoveryscriptconfigurationsonallaliveslaveservers..TueJan1416:45:262020-[info]Executingcommand:apply_diff_relay_logs--command=test--slave_user='mha'--slave_host=192.168.68.132--slave_ip=192.168.68.132--slave_port=3306--workdir=/tmp--target_version=5.6.36-log--manager_version=0.57--relay_log_info=/usr/local/mysql/data/relay-log.info--relay_dir=/usr/local/mysql/data/--slave_pass=xxxTueJan1416:45:262020-[info]Connectingtoroot@192.168.68.132(192.168.68.132:22)..Checkingslaverecoveryenvironmentsettings..Opening/usr/local/mysql/data/relay-log.info...ok.Relaylogfoundat/usr/local/mysql/data,uptorelay-log-bin.000002Temporaryrelaylogfileis/usr/local/mysql/data/relay-log-bin.000002Testingmysqlconnectionandprivileges..Warning:Usingapasswordonthecommandlineinterfacecanbeinsecure.done.Testingmysqlbinlogoutput..done.Cleaninguptestfile(s)..done.TueJan1416:45:442020-[info]Executingcommand:apply_diff_relay_logs--command=test--slave_user='mha'--slave_host=192.168.68.133--slave_ip=192.168.68.133--slave_port=3306--workdir=/tmp--target_version=5.6.36-log--manager_version=0.57--relay_log_info=/usr/local/mysql/data/relay-log.info--relay_dir=/usr/local/mysql/data/--slave_pass=xxxTueJan1416:45:442020-[info]Connectingtoroot@192.168.68.133(192.168.68.133:22)..Checkingslaverecoveryenvironmentsettings..Opening/usr/local/mysql/data/relay-log.info...ok.Relaylogfoundat/usr/local/mysql/data,uptorelay-log-bin.000002Temporaryrelaylogfileis/usr/local/mysql/data/relay-log-bin.000002Testingmysqlconnectionandprivileges..Warning:Usingapasswordonthecommandlineinterfacecanbeinsecure.done.Testingmysqlbinlogoutput..done.Cleaninguptestfile(s)..done.TueJan1416:46:082020-[info]Slavessettingscheckdone.TueJan1416:46:082020-[info]192.168.68.129(192.168.68.129:3306)(currentmaster)+--192.168.68.132(192.168.68.132:3306)+--192.168.68.133(192.168.68.133:3306)TueJan1416:46:082020-[info]Checkingreplicationhealthon192.168.68.132..TueJan1416:46:082020-[info]ok.TueJan1416:46:082020-[info]Checkingreplicationhealthon192.168.68.133..TueJan1416:46:082020-[info]ok.TueJan1416:46:082020-[info]Checkingmaster_ip_failover_scriptstatus:TueJan1416:46:082020-[info]/usr/local/bin/master_ip_failover--command=status--ssh_user=root--orig_master_host=192.168.68.129--orig_master_ip=192.168.68.129--orig_master_port=3306INSCRIPTTEST====/sbin/ifconfigens33:1down==/sbin/ifconfigens33:1192.168.68.200===CheckingtheStatusofthescript..OKTueJan1416:46:082020-[info]OK.TueJan1416:46:082020-[warning]shutdown_scriptisnotdefined.TueJan1416:46:082020-[info]Gotexitcode0(Notmasterdead).MySQLReplicationHealthisOK.2.2.3配置步骤小结

本实验涉及的内容还是比较多的,配置过程中出现的问题主要有如下几点:

主从复制:需要先进行服务器的时间同步;

秘钥推送:IP地址要注意是否准确;

MHA的两个配置文件的关键之处是否正确;

这些都是最容易出错的地方,大家需要格外注意。

2.2.4启动MHA命令[root@managerconf]#nohupmasterha_manager--conf=/etc/masterha/app1.cnf--remove_dead_master_conf--ignore_last_failover</dev/null>/var/log/masterha/app1/manager.log2>&1&[1]104076

--remove_dead_master_conf 该参数代表当发生主从切换后,老的主库的 ip 将会从配置文件中移除。

--manger_log 日志存放位置。

--ignore_last_failover 在缺省情况下,如果 MHA 检测到连续发生宕机,且两次宕机间隔不足 8 小时的话,则不会进行 Failover,之所以这样限制是为了避免 ping-pong 效应。该参数代表忽略上次 MHA 触发切换产生的文件,默认情况下,MHA 发生切换后会在日志记目录,也就是上面设置的日志 app1.failover.complete 文件,下次再次切换的时候如果发现该目录下存在该文件将不允许触发切换,除非在第一次切换后收到删除该文件,为了方便,这里设置为–ignore_last_failover。

2.2.5查看 MHA 状态

可以看到当前的master是主服务节点,ip地址是192.168.68.129

[root@managerconf]#masterha_check_status--conf=/etc/masterha/app1.cnfapp1(pid:104076)isrunning(0:PING_OK),master:192.168.68.129#或者查看日志,也可以发现主服务器节点ip地址[root@managerconf]#tail-2/var/log/masterha/app1/manager.logTueJan1417:12:482020-[info]Startingpinghealthcheckon192.168.68.129(192.168.68.129:3306)..TueJan1417:12:482020-[info]Ping(SELECT)succeeded,waitinguntilMySQLdoesn'trespond..2.2.6验证主服务器宕机

当然第一次配置需要手动配置VIP(virtual ip)

[root@masterbin]#/sbin/ifconfigens33:1192.168.68.200/24[root@masterbin]#ifconfigens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet192.168.68.129netmask255.255.255.0broadcast192.168.68.255inet6fe80::bdab:b59b:d041:d8b0prefixlen64scopeid0x20<link>ether00:0c:29:e6:6d:ebtxqueuelen1000(Ethernet)RXpackets775098bytes1083035145(1.0GiB)RXerrors0dropped0overruns0frame0TXpackets413307bytes31715433(30.2MiB)TXerrors0dropped0overruns0carrier0collisions0ens33:1:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet192.168.68.200netmask255.255.255.0broadcast192.168.68.255ether00:0c:29:e6:6d:ebtxqueuelen1000(Ethernet)lo:flags=73<UP,LOOPBACK,RUNNING>mtu65536inet127.0.0.1netmask255.0.0.0inet6::1prefixlen128scopeid0x10<host>looptxqueuelen1(LocalLoopback)RXpackets20bytes1568(1.5KiB)RXerrors0dropped0overruns0frame0TXpackets20bytes1568(1.5KiB)TXerrors0dropped0overruns0carrier0collisions0virbr0:flags=4099<UP,BROADCAST,MULTICAST>mtu1500inet192.168.122.1netmask255.255.255.0broadcast192.168.122.255ether52:54:00:43:58:6etxqueuelen1000(Ethernet)RXpackets0bytes0(0.0B)RXerrors0dropped0overruns0frame0TXpackets0bytes0(0.0B)TXerrors0dropped0overruns0carrier0collisions0

使用pkill -9 mysql模拟主服务器宕机情况查看mysql从服务器slave1是否获取vip 地址

[root@slave1bin]#ifconfigens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet192.168.68.132netmask255.255.255.0broadcast192.168.68.255inet6fe80::4d95:1de7:d0a5:25c4prefixlen64scopeid0x20<link>ether00:0c:29:0d:06:80txqueuelen1000(Ethernet)RXpackets766652bytes1074024643(1.0GiB)RXerrors0dropped0overruns0frame0TXpackets379004bytes29740586(28.3MiB)TXerrors0dropped0overruns0carrier0collisions0ens33:1:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet192.168.68.200netmask255.255.255.0broadcast192.168.68.255ether00:0c:29:0d:06:80txqueuelen1000(Ethernet)lo:flags=73<UP,LOOPBACK,RUNNING>mtu65536inet127.0.0.1netmask255.0.0.0inet6::1prefixlen128scopeid0x10<host>looptxqueuelen1(LocalLoopback)RXpackets146bytes12570(12.2KiB)RXerrors0dropped0overruns0frame0TXpackets146bytes12570(12.2KiB)TXerrors0dropped0overruns0carrier0collisions0virbr0:flags=4099<UP,BROADCAST,MULTICAST>mtu1500inet192.168.122.1netmask255.255.255.0broadcast192.168.122.255ether52:54:00:95:86:1atxqueuelen1000(Ethernet)RXpackets0bytes0(0.0B)RXerrors0dropped0overruns0frame0TXpackets0bytes0(0.0B)TXerrors0dropped0overruns0carrier0collisions0

我们可以进入slave1的数据库中查看其状态

mysql>showslavestatus\GEmptyset(0.00sec)mysql>showmasterstatus->;+-------------------+----------+--------------+------------------+-------------------+|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|Executed_Gtid_Set|+-------------------+----------+--------------+------------------+-------------------+|master-bin.000001|1213||||+-------------------+----------+--------------+------------------+-------------------+1rowinset(0.00sec)

表明从数据库已经成功切换为主服务了。

以上就是MySQL MHA高可用架构部署配置实例是怎样的,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

域名注册
购买VPS主机

您或许对下面这些文章有兴趣:                    本月吐槽辛苦排行榜

看贴要回贴有N种理由!看帖不回贴的后果你懂得的!


评论内容 (*必填):
(Ctrl + Enter提交)   

部落快速搜索栏

各类专题梳理

网站导航栏

X
返回顶部