基于MHA的MYSQL高可用方案RoomC

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

自动故障检测和自动故障转移MHA能够在一个已经存在的复制环境中监控MySQL,当检测到Master故障后能够实现自动故障转移,通过鉴定出最“新”的Salve的relaylog,并将其应用到所有的Slave,这样MHA就能够保证各个slave之间的数据一致性,即使有些slave在主库崩溃时还没有收到最新的relaylog事件。一个slave节点能否成为候选的主节点可通过在配置文件中配置它的优先级。由于master能够保证各个slave之间的数据一致性,所以所有的slave节点都有希望成为主节点。在通常的replication环境中由于复制中断而极容易产生的数据一致性问题,在MHA中将不会发生。交互式(手动)故障转移MHA可以手动地实现故障转移,而不必去理会master的状态,即不监控master状态,确认故障发生后可通过MHA手动切换

在线切换Master到不同的主机MHA能够在0.5-2秒内实现切换,0.5-2秒的写阻塞通常是可接受的,所以你甚至能在非维护期间就在线切换master。诸如升级到高版本,升级到更快的服务器之类的工作,将会变得更容易

优势:

自动故障转移快主库崩溃不存在数据一致性问题配置不需要对当前mysql环境做重大修改不需要添加额外的服务器(仅一台manager就可管理上百个replication)性能优秀,可工作在半同步复制和异步复制,当监控mysql状态时,仅需要每隔N秒向master发送ping包(默认3秒),所以对性能无影响。你可以理解为MHA的性能和简单的主从复制框架性能一样。只要replication支持的存储引擎,MHA都支持,不会局限于innodb

组成:

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

MHA工作原理:

从宕机崩溃的master保存二进制日志事件(binlogevents);识别含有最新更新的slave;应用差异的中继日志(relaylog)到其他的slave;应用从master保存的二进制日志事件(binlogevents);提升一个slave为新的master;使其他的slave连接新的master进行复制;

1.2、MHA工具介绍MHA软件由两部分组成,Manager工具包和Node工具包,具体的说明如下。Manager工具包主要包括以下几个工具:masterha_check_ssh检查MHA的SSH配置状况masterha_check_repl检查MySQL复制状况masterha_manger启动MHAmasterha_check_status检测当前MHA运行状态masterha_master_monitor检测master是否宕机masterha_master_switch控制故障转移(自动或者手动)masterha_conf_host添加或删除配置的server信息Node工具包(这些工具通常由MHAManager的脚本触发,无需人为操作)主要包括以下几个工具:save_binary_logs保存和复制master的二进制日志apply_diff_relay_logs识别差异的中继日志事件并将其差异的事件应用于其他的slavefilter_mysqlbinlog去除不必要的ROLLBACK事件(MHA已不再使用这个工具)purge_relay_logs清除中继日志(不会阻塞SQL线程)

注意:为了尽可能的减少主库硬件损坏宕机造成的数据丢失,因此在配置MHA的同时建议成配置成MySQL5.5

MHA环境图:一主三从模式(通过VIP漂移)

1.4实验拓扑环境

二、前期环境部署2.11、配置所有主机名称

master1主机:hostnameserver01bashmaster2主机:hostnameserver02bashslave1主机:hostnameserver03bashslave2主机:hostnameserver04bashmanager主机:hostnameserver05bash.2.22、配置所有主机名及映射关系[root@server01~]#vim/etc/hosts

192.168.200.111server01192.168.200.112server02192.168.200.113server03192.168.200.114server04192.168.200.115server05通过SCP发送hosts映射到另外几台主机scp/etc/hosts192.168.200.111:/etc/scp/etc/hosts192.168.200.112:/etc/scp/etc/hosts192.168.200.113:/etc/scp/etc/hosts192.168.200.114:/etc/2.33、所有主机关闭防火墙和安全机制

systemctlstopiptablessystemctlstopfirewalldsetenforce0

1:导入epel源码包2:解压rpm-ivhepel-release-latest-7.noarch.rpm安装依赖包yuminstall-yperl-DBD-MySQL.x86_64perl-DBI.x86_64perl-CPANperl-ExtUtils-CBuilderperl-ExtUtils-MakeMaker注意:安装后建议检查一下所需软件包是否全部安装rpm-qperl-DBD-MySQL.x86_64perl-DBI.x86_64perl-CPANperl-ExtUtils-CBuilderperl-ExtUtils-MakeMakerperl-DBD-MySQL-4.023-6.el7.x86_64perl-DBI-1.627-4.el7.x86_64perl-CPAN-1.9800-292.el7.noarchperl-ExtUtils-CBuilder-0.28.2.6-292.el7.noarchperl-ExtUtils-MakeMaker-6.68-3.el7.noarch

3.2、所有主机装上安装MHANode

tarxfmha4mysql-node-0.56.tar.gzcdmha4mysql-node-0.56/perlMakefile.PLmake&&makeinstall3.3、MHANode安装完后会在/usr/local/bin生成以下脚本

[root@server04mha4mysql-node-0.56]#ls-l/usr/local/bin/总用量40-r-xr-xr-x.1rootroot1634610月2213:27apply_diff_relay_logs-r-xr-xr-x.1rootroot480710月2213:27filter_mysqlbinlog-r-xr-xr-x.1rootroot740110月2213:27purge_relay_logs-r-xr-xr-x.1rootroot739510月2213:27save_binary_logs

四、192.168.200.115上安装MHAManger以及perl-Config-Tiny-2.14-7.el7.noarch其余四台不需要装

注意:115安装MHAManger之前也需要安装MHANode

4.1、首先安装MHAManger依赖的perl模块(我这里使用yum安装)

192.168.200.115导入如下四个源码包

[root@server05~]#lsperl-Config-Tiny-2.14-7.el7.noarch.rpmmha4mysql-manager-0.56.tar.gzepel-release-latest-7.noarch.rpmmha4mysql-node-0.56.tar.gz

安装依赖包:yuminstall-yperlperl-Log-Dispatchperl-Parallel-ForkManagerperl-DBD-MySQLperl-DBIperl-Time-HiResyum-yinstallperl-Config-Tiny-2.14-7.el7.noarch.rpm注意:安装后建议检查一下所需软件包是否全部安装rpm-qperlcpanperl-Log-Dispatchperl-Parallel-ForkManagerperl-DBD-MySQLperl-DBIperl-Time-HiResperl-Config-Tinyperl-5.16.3-292.el7.x86_64perl-Log-Dispatch-2.41-1.el7.1.noarchperl-Parallel-ForkManager-1.18-2.el7.noarchperl-DBD-MySQL-4.023-6.el7.x86_64perl-DBI-1.627-4.el7.x86_64perl-Time-HiRes-1.9725-3.el7.x86_64perl-Config-Tiny-2.14-7.el7.noarch注意:之前时候perl-Config-Tiny.noarch没有安装成功,后来用cpan(cpaninstallConfig::Tiny)

4.2、安装MHAManger

tarxfmha4mysql-manager-0.56.tar.gzcdmha4mysql-manager-0.56/perlMakefile.PLmake&&makeinstall4.3、安装完成后会有以下脚本文件

[root@server05~]#ls-l/usr/local/bin/总用量76-r-xr-xr-x1rootroot1634612月2915:08apply_diff_relay_logs-r-xr-xr-x1rootroot480712月2915:08filter_mysqlbinlog-r-xr-xr-x1rootroot199512月2915:37masterha_check_repl-r-xr-xr-x1rootroot177912月2915:37masterha_check_ssh-r-xr-xr-x1rootroot186512月2915:37masterha_check_status-r-xr-xr-x1rootroot320112月2915:37masterha_conf_host-r-xr-xr-x1rootroot251712月2915:37masterha_manager-r-xr-xr-x1rootroot216512月2915:37masterha_master_monitor-r-xr-xr-x1rootroot237312月2915:37masterha_master_switch-r-xr-xr-x1rootroot387912月2915:37masterha_secondary_check-r-xr-xr-x1rootroot173912月2915:37masterha_stop-r-xr-xr-x1rootroot740112月2915:08purge_relay_logs-r-xr-xr-x1rootroot739512月2915:08save_binary_logs五、置配置SSH密钥对验证服务器之间需要实现密钥对验证。关于配置密钥对验证可看下面步骤。但是有一点需要注意:不能禁止password登陆,否则会出现错误

1.服务器先生成一个密钥对2.把自己的公钥传给对方

5.1、Server05(192.168.200.115)上操作:

[root@server05~]#ssh-keygen-trsa[root@server05~]#ssh-copy-id-i/root/.ssh/id_rsa.pubroot@192.168.200.111[root@server05~]#ssh-copy-id-i/root/.ssh/id_rsa.pubroot@192.168.200.112[root@server05~]#ssh-copy-id-i/root/.ssh/id_rsa.pubroot@192.168.200.113[root@server05~]#ssh-copy-id-i/root/.ssh/id_rsa.pubroot@192.168.200.114注意:Server05需要连接每个主机测试,因为第一次连接入的时候需要输入yes,影响后期故障切换时,对于每的个主机的SSH控制。检测秘钥对是否可以连接:[root@server05~]#sshserver01[root@server01~]#exit登出Connectiontoserver01closed.

[root@server05~]#sshserver02[root@server05~]#sshserver03[root@server05~]#sshserver045.2、PrimaryMaster(192.168.200.111)上操作:

[root@server01~]#ssh-keygen-trsa[root@server01~]#ssh-copy-id-i/root/.ssh/id_rsa.pubroot@192.168.200.112[root@server01~]#ssh-copy-id-i/root/.ssh/id_rsa.pubroot@192.168.200.113[root@server01~]#ssh-copy-id-i/root/.ssh/id_rsa.pubroot@192.168.200.1145.3、SecondaryMaster(192.168.200.112)上操作:

[root@server02~]#ssh-keygen-trsa[root@server02~]#ssh-copy-id-i/root/.ssh/id_rsa.pubroot@192.168.200.111[root@server02~]#ssh-copy-id-i/root/.ssh/id_rsa.pubroot@192.168.200.113[root@server02~]#ssh-copy-id-i/root/.ssh/id_rsa.pubroot@192.168.200.1145.4、slave1(192.168.200.113)上操作:

[root@server03~]#ssh-keygen-trsa[root@server03~]#ssh-copy-id-i/root/.ssh/id_rsa.pubroot@192.168.200.111[root@server03~]#ssh-copy-id-i/root/.ssh/id_rsa.pubroot@192.168.200.112[root@server03~]#ssh-copy-id-i/root/.ssh/id_rsa.pubroot@192.168.200.1145.5、slave2(192.168.200.114)上操作:

[root@server04~]#ssh-keygen-trsa[root@server04~]#ssh-copy-id-i/root/.ssh/id_rsa.pubroot@192.168.200.111[root@server04~]#ssh-copy-id-i/root/.ssh/id_rsa.pubroot@192.168.200.112[root@server04~]#ssh-copy-id-i/root/.ssh/id_rsa.pubroot@192.168.200.113六、安装mysql:不做字符集,做字符集后期会报错,安装时,/etc/my.cnf不做任何改动111-114所有主机上的操作:

yum-yinstallmariadbmariadb-servermariadb-develsystemctlstartmariadbnetstat-lnpt|grep:3306设置数据库初始密码(后续操作中使用)mysqladmin-urootpassword123123七、搭建主从复制环境

注意:binlog-do-db和replicate-ignore-db设置必须相同。MHA在启动时候会检测过滤规则,如果过滤规则不同,MHA将不启动监控和故障转移功能。

7.11、修改mysql主机的配置文件PrimaryMaster(192.168.200.111)上操作:

vim/etc/my.cnf[mysqld]server-id=1log-bin=master-binlog-slave-updates=truerelay_log_purge=0systemctlrestartmariadbnetstat-anpt|grep3306SecondaryMaster(192.168.200.112)上操作:

vim/etc/my.cnf[mysqld]server-id=2log-bin=master-binlog-slave-updates=truerelay_log_purge=0systemctlrestartmariadbnetstat-anpt|grep3306slave1(192.168.200.113)上操作:

vim/etc/my.cnf[mysqld]server-id=3log-bin=mysql-binrelay-log=slave-relay-binlog-slave-updates=truerelay_log_purge=0systemctlrestartmariadbnetstat-anpt|grep3306slave2(192.168.200.114)上操作:

vim/etc/my.cnf[mysqld]server-id=4log-bin=mysql-binrelay-log=slave-relay-binlog-slave-updates=truerelay_log_purge=0systemctlrestartmariadbnetstat-anpt|grep33067.2、在PrimaryMaster(192.168.200.111))上对旧数据进行备份

mysqldump--master-data=2--single-transaction-R--triggers-A>all.sql参数解释:--master-data=2录备份时刻记录master的的Binlog位置和Position--single-transaction获取一致性快照-R备份存储过程和函数-triggres备份触发器-A备份所有的库。

没有旧数据就不用了执行本次7.2的操作

[root@server01~]#mysql-uroot-p123123WelcometotheMariaDBmonitor.Commandsendwith;or\g.YourMariaDBconnectionidis2Serverversion:5.5.60-MariaDBMariaDBServer

Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.

MariaDB[(none)]>grantreplicationslaveon*.*to'repl'@'192.168.200.%'identifiedby'123123';QueryOK,0rowsaffected(0.00sec)

MariaDB[(none)]>flushprivileges;QueryOK,0rowsaffected(0.01sec)

MariaDB[(none)]>showmasterstatus;+-------------------+----------+--------------+------------------+|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|+-------------------+----------+--------------+------------------+|master-bin.000001|474|||+-------------------+----------+--------------+------------------+1rowinset(0.00sec)

7.5、把数据备份复制其他主机

mysql-uroot-p123456stopslave;QueryOK,0rowsaffected,1warning(0.01sec)

MariaDB[(none)]>CHANGEMASTERTO->MASTER_HOST='192.168.200.111',->MASTER_USER='repl',->MASTER_PASSWORD='123123',->MASTER_LOG_FILE='master-bin.000001',->MASTER_LOG_POS=474;QueryOK,0rowsaffected(0.03sec)

MariaDB[(none)]>startslave;QueryOK,0rowsaffected(0.01sec)

MariaDB[(none)]>showslavestatus\G

#检查IO和和SQL线程是否为:yesSlave_IO_Running:YesSlave_SQL_Running:Yes7.7、主从同步故障处理:如果7、6报错误就执行这段代码,没报错忽略

Slave_IO_Running:NoSlave_SQL_Running:Yes-----------------------------------忽略部分信息-----------------------------------Last_IO_Errno:1236Last_IO_Error:Gotfatalerror1236frommasterwhenreadingdatafrombinarylog:'Couldnotfindfirstlogfilenameinbinarylogindexfile'-----------------------------------忽略部分信息-----------------------------------处理方式:stopslave;resetslave;setglobalsql_slave_skip_counter=1;startslave;7.8、三台slave(112-114)服务置器设置read_yonly状态从库对外只进提供读服务,只所以没有写进mysql配置文件,是因为时随时server02会提升为master

方法一:在主页面输入[root@server02~]#mysql-uroot-p123123-e'setglobalread_only=1'[root@server03~]#mysql-uroot-p123123-e'setglobalread_only=1'[root@server04~]#mysql-uroot-p123123-e'setglobalread_only=1'方法二:三台slave都在数据库内输入MariaDB[(none)]>setglobalread_only=1;7.9、创建监控用户(111-114主机上的操作):做监控主要为了给115更加方便的监控master(111)主机有没有Down,一旦111主机down了就通过VIP漂移把VIP给112主机

,112主机从slave变成master

[root@server05~]#mkdir/etc/masterha[root@server05~]#cpmha4mysql-manager-0.56/samples/conf/app1.cnf/etc/masterha

8.2、修改app1.cnf配置文件/usr/local/bin/master_ip_failover脚本需要根据自己环境修改ip和网卡名称等。

mysql-uroot-p123123-e'setglobalrelay_log_purge=0;'注意:

8.5、配置从库(112--114)relay_log清除脚本加入计划任务个人实验时可以不做这条操作

MHA节点中包含了pure_relay_logs命令工具,它可以为中继日志创建硬链接,执行SETGLOBALrelay_log_purge=1,等待几秒钟以便SQL线程切换到新的中继日志,再执行SETGLOBALrelay_log_purge=0。

vimpurge_relay_log.sh#!/bin/bashuser=rootpasswd=123123#注意:数据库要有密码,填自己所设置的密码就可以,前面设置过port=3306log_dir='/tmp'work_dir='/tmp'purge='/usr/local/bin/purge_relay_logs'if[!-d$log_dir]thenmkdir$log_dir-pfi$purge--user=$user--password=$passwd--disable_relay_log_purge--port=$port--workdir=$work_dir>>$log_dir/purge_relay_logs.log2>&1chmod+xpurge_relay_log.shcrontab-e04***/bin/bash/root/purge_relay_log.shpure_relay_logs脚本参数如下所示:--usermysql用户名--passwordmysql密码--port端口号--workdir指定创建relaylog的硬链接的位置,默认是/var/tmp,由于系统不同分区创建硬链接文件会失败,故需要执行硬链接具体位置,成功执行脚本后,硬链接的中继日志文件被删除--disable_relay_log_purge默认情况下,如果relay_log_purge=1,脚本会什么都不清理,自动退出,通过设定这个参数,当relay_log_purge=1的情况下会将relay_log_purge设置为0。清理relaylog之后,最后将参数设置为OFF。

8.6、手动清除中继日志可以不做这条操作purge_relay_logs--user=root--password=123456--disable_relay_log_purge--port=3306--workdir=/tmp2017-08-3121:33:52:purge_relay_logsscriptstarted.Foundrelay_log.info:/usr/local/mysql/data/relay-log.infoRemovinghardlinkedrelaylogfilesslave-relay-bin*under/tmp..done.Currentrelaylogfile:/usr/local/mysql/data/slave-relay-bin.000002Archivingunusedrelaylogfiles(upto/usr/local/mysql/data/slave-relay-bin.000001)...Creatinghardlinkfor/usr/local/mysql/data/slave-relay-bin.000001under/tmp/slave-relay-bin.000001..ok.Creatinghardlinksforunusedrelaylogfilescompleted.ExecutingSETGLOBALrelay_log_purge=1;FLUSHLOGS;sleepingafewsecondssothatSQLthreadcandeleteolderrelaylogfiles(ifitkeepsup);SETGLOBALrelay_log_purge=0;..ok.Removinghardlinkedrelaylogfilesslave-relay-bin*under/tmp..done.2017-08-3121:33:56:Allrelaylogpurgingoperationssucceeded.

8.7、检查MHAssh通信状态必须执行的操作

[root@server05~]#masterha_check_ssh--conf=/etc/masterha/app1.cnfSatDec2916:03:572018-[warning]Globalconfigurationfile/etc/masterha_default.cnfnotfound.Skipping.SatDec2916:03:572018-[info]Readingapplicationdefaultconfigurationsfrom/etc/masterha/app1.cnf..SatDec2916:03:572018-[info]Readingserverconfigurationsfrom/etc/masterha/app1.cnf..SatDec2916:03:572018-[info]StartingSSHconnectiontests..SatDec2916:04:022018-[debug]SatDec2916:03:582018-[debug]ConnectingviaSSHfromroot@server02(192.168.200.112:22)toroot@server01(192.168.200.111:22)..SatDec2916:03:592018-[debug]ok.-------------------------------------SatDec2916:04:012018-[debug]ConnectingviaSSHfromroot@server04(192.168.200.114:22)toroot@server03(192.168.200.113:22)..SatDec2916:04:022018-[debug]ok.SatDec2916:04:022018-[info]AllSSHconnectiontestspassedsuccessfully.#有这段话表示暂时也没有问题

8.9、检查整个主从复制集群的状态

[root@server02~]#mysql-uroot-p123123-e'setglobalrelay_log_purge=0;'

[root@server03~]#mysql-uroot-p123123-e'setglobalrelay_log_purge=0;'

[root@server04~]#mysql-uroot-p123123-e'setglobalrelay_log_purge=0;'

115主机再次查看日志:

MariaDB[(none)]>flushprivileges;QueryOK,0rowsaffected(0.00sec)

九、VIP配置管理Mastervip配置有两种方式,一种是通过keepalived或者heartbeat类似的软件的方式管理VIP的漂移,另一种为通过命令方式管理。

通过命令方式管理VIP地址:打开115在前面编辑过的文件/etc/masterha/app1.cnf,检查如下行是否正确,再检查集群状态。

Server05(192.168.200.115)修改故障转移脚本[root@server05~]#grep-n'master_ip_failover_script'/etc/masterha/app1.cnfmaster_ip_failover_script=/usr/local/bin/master_ip_failover#用于存放脚本的位置

Server05(192.168.200.115)修改故障转移脚本[root@server05~]#head-13/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.200.100';#写入VIPmy$key="1";#非非keepalived方式切换脚本使用的my$ssh_start_vip="/sbin/ifconfigens33:$key$vip";#若是使用keepalivedmy$ssh_stop_vip="/sbin/ifconfigens33:$keydown";#那么这里写服务的开关命令/usr/local/bin/master_ip_failover文件的内容意思是当主库发生故障时,会触发MHA切换,MHAmanager会停掉主库上的ens32:1接口,触发虚拟ip漂移到备选从库,从而完成切换。

Server05(192.168.200.115)检查manager状态

[root@server05~]#masterha_check_status--conf=/etc/masterha/app1.cnfapp1isstopped(2:NOT_RUNNING).

注意:如果正常会显示"PING_OK",否则会显示"NOT_RUNNING",代表MHA监控没有开启。Server05(192.168.200.115)开启manager监控

[root@server05~]#nohupmasterha_manager--conf=/etc/masterha/app1.cnf--remove_dead_master_conf--ignore_last_failover/var/log/masterha/app1/manager.log2>&1&[1]11275启动参数介绍:--remove_dead_master_conf该参数代表当发生主从切换后,老的主库的ip将会从配置文件中移除。--manger_log日志存放位置--ignore_last_failover在缺省情况下,如果MHA检测到连续发生宕机,且两次宕机间隔不足8小时的话,则不会进行Failover,之所以这样限制是为了避免ping-pong效应。该参数代表忽略上次MHA触发切换产生的文件,默认情况下,MHA发生切换后会在日志目录,也就是上面我设置的/data产生app1.failover.complete文件,下次再次切换的时候如果发现该目录下存在该文件将不允许触发切换,除非在第一次切换后收到删除该文件,为了方便,这里设置为--ignore_last_failover。

Server05(192.168.200.115)再次查看Server05监控是否正常:

[root@monitor~]#masterha_check_status--conf=/etc/masterha/app1.cnfapp1(pid:65837)isrunning(0:PING_OK),master:server01有PING_OK、表示已经在监控了PrimaryMaster(192.168.200.111)上操作:

[root@server01~]#ipa|grepens332:ens33:mtu1500qdiscpfifo_faststateUPgroupdefaultqlen1000inet192.168.200.111/24brd192.168.200.255scopeglobalnoprefixrouteens33inet192.168.200.100/24brd192.168.200.255scopeglobalsecondaryens33:1

此时111作为master有了192.168.200.100的VIP

Server05(192.168.200.115)查看启动日志

[root@server05~]#cat/var/log/masterha/app1/manager.logWedOct2309:31:462019-[warning]Globalconfigurationfile/etc/masterha_default.cnfnotfound.Skipping.WedOct2309:31:462019-[info]Readingapplicationdefaultconfigurationsfrom/etc/masterha/app1.cnf..WedOct2309:31:462019-[info]Readingserverconfigurationsfrom/etc/masterha/app1.cnf..WedOct2309:31:462019-[info]MHA::MasterMonitorversion0.56.WedOct2309:31:472019-[info]DeadServers:WedOct2309:31:472019-[info]AliveServers:WedOct2309:31:472019-[info]server01(192.168.200.111:3306)WedOct2309:31:472019-[info]server02(192.168.200.112:3306)WedOct2309:31:472019-[info]server03(192.168.200.113:3306)WedOct2309:31:472019-[info]server04(192.168.200.114:3306)-------

-------------WedOct2309:31:592019-[info]server01(currentmaster)+--server02+--server03+--server04

WedOct2309:32:002019-[info]Ping(SELECT)succeeded,waitinguntilMySQLdoesn'trespond..

**注意:其中"Ping(SELECT)succeeded,waitinguntilMySQLdoesn'trespond.."说明整个系统已经开始监控了**

PrimaryMaster(192.168.200.111)模拟主库故障[root@server01~]#systemctlstopmariadb[root@server01~]#netstat-lnpt|grep:3306[root@server01~]#ipa|grepens32

2:ens32:mtu1500qdiscpfifo_faststateUPgroupdefaultqlen1000inet192.168.200.111/24brd192.168.200.255scopeglobalens32在113、114上都查看状态:

****如果当down了111时在113-114上看不到Master_Host:192.168.200.112且为111时并且报IO线程问题,就查看一下115能否通过sshserver02秘钥连接到112上

如果要输入密码就输入yes才能进入,就反复重启111-114的mariadb服务([root@server03~]#systemctlrestartmariadb)***

像这样就是IO线程的ssh秘钥没问题

步骤:

[root@server03~]#systemctlrestartmariadb#111-114都要重启

root@server05~]#sshserver02Lastlogin:WedOct2313:42:182019from192.168.200.2

[root@server05~]#nohupmasterha_manager--conf=/etc/masterha/app1.cnf--remove_dead_master_conf--ignore_last_failover/var/log/masterha/app1/manager.log2>&1&[6]20465

[root@server05~]#masterha_check_status--conf=/etc/masterha/app1.cnfapp1(pid:20465)isrunning(0:PING_OK),master:server01

[root@server02~]#ipa|grepens332:ens33:mtu1500qdiscpfifo_faststateUPgroupdefaultqlen1000inet192.168.200.112/24brd192.168.200.255scopeglobalnoprefixrouteens33inet192.168.200.100/24brd192.168.200.255scopeglobalsecondaryens33:1

slave1(192.168.200.113、192.168.200.114)查看状态:

MariaDB[(none)]>showslavestatus\G***************************1.row***************************Slave_IO_State:WaitingformastertosendeventMaster_Host:192.168.200.112#发现此时VIP已经漂移到192.168.200.112上,112成为了masterMaster_User:replMaster_Port:3306Connect_Retry:60Master_Log_File:master-bin.000001Read_Master_Log_Pos:1372Relay_Log_File:slave-relay-bin.000002Relay_Log_Pos:530Relay_Master_Log_File:master-bin.000001Slave_IO_Running:YesSlave_SQL_Running:YesServer05(192.168.200.115)查看监控配置文件已经发生了变化([server01]的配置已被删除):

[root@server05~]#cat/etc/masterha/app1.cnf[serverdefault]manager_log=/var/log/masterha/app1/manager.logmanager_workdir=/var/log/masterha/app1master_binlog_dir=/var/lib/mysqlmaster_ip_failover_script=/usr/local/bin/master_ip_failoverpassword=123123ping_interval=1remote_workdir=/tmprepl_password=123123repl_user=repluser=root

[server2]candidate_master=1check_repl_delay=0hostname=server02port=3306

[server3]hostname=server03port=3306

[server4]hostname=server04port=3306

Server05(192.168.200.115)故障切换过程中的日志文件内容如下:

[root@server05~]#tail-f/var/log/masterha/app1/manager.logSelectedserver02asanewmaster.server02:OK:Applyingalllogssucceeded.server02:OK:ActivatedmasterIPaddress.server04:Thishosthasthelatestrelaylogevents.server03:Thishosthasthelatestrelaylogevents.Generatingrelaydifffilesfromthelatestslavesucceeded.server04:OK:Applyingalllogssucceeded.Slavestarted,replicatingfromserver02.server03:OK:Applyingalllogssucceeded.Slavestarted,replicatingfromserver02.server02:Resettingslaveinfosucceeded.Masterfailovertoserver02(192.168.200.112:3306)completedsuccessfully.故障主库修复及及VIP切回测试PrimaryMaster(192.168.200.111)上操作:

[root@server01~]#systemctlstartmariadb[root@server01~]#netstat-lnpt|grep:3306tcp000.0.0.0:33060.0.0.0:*LISTEN6131/mysqldPrimaryMaster(192.168.200.111)指向新的master库[root@server01~]#mysql-uroot-p123123MariaDB[(none)]>startslave;MariaDB[(none)]>CHANGEMASTERTO>MASTER_HOST='192.168.200.112',>MASTER_USER='repl',>MASTER_PASSWORD='123123';MariaDB[(none)]>startslave;MariaDB[(none)]>showslavestatus\G***************************1.row***************************Slave_IO_State:WaitingformastertosendeventMaster_Host:192.168.200.112Master_User:replMaster_Port:3306Connect_Retry:60Master_Log_File:master-bin.000001Read_Master_Log_Pos:1372Relay_Log_File:mariadb-relay-bin.000002Relay_Log_Pos:1208Relay_Master_Log_File:master-bin.000001Slave_IO_Running:YesSlave_SQL_Running:Yes

Server05(192.168.200.115)修改监控配置文件重新添加server1配置:

[root@server05~]#vim/etc/masterha/app1.cnf[server01]hostname=server01port=3306Server05(192.168.200.115)检查集群状态:

[root@server05~]#masterha_check_repl--conf=/etc/masterha/app1.cnf-----------------------------------忽略部分信息-----------------------------------ThuAug3122:20:302017-[info]AliveServers:ThuAug3122:20:302017-[info]server01(192.168.200.111:3306)ThuAug3122:20:302017-[info]server02(192.168.200.112:3306)ThuAug3122:20:302017-[info]server03(192.168.200.113:3306)ThuAug3122:20:302017-[info]server04(192.168.200.114:3306)-----------------------------------忽略部分信息-----------------------------------server02(currentmaster)+--server01+--server03+--server04-----------------------------------忽略部分信息-----------------------------------MySQLReplicationHealthisOK.Server05(192.168.200.115)开启监控

[root@server05~]#nohupmasterha_manager--conf=/etc/masterha/app1.cnf--remove_dead_master_conf--ignore_last_failover/var/log/masterha/app1/manager.log2>&1&[7]22551

SecondaryMaster(192.168.200.112)关闭现有主库mysql

[root@server02~]#systemctlstopmariadb[root@server02~]#ipa|grepens332:ens33:mtu1500qdiscpfifo_faststateUPgroupdefaultqlen1000inet192.168.200.112/24brd192.168.200.255scopeglobalnoprefixrouteens33

PrimaryMaster(192.168.200.111):查看VIP有没有回来

MariaDB[(none)]>showslavestatus\G***************************1.row***************************Slave_IO_State:WaitingformastertosendeventMaster_Host:192.168.200.111Master_User:replMaster_Port:3306Connect_Retry:60Master_Log_File:master-bin.000012Read_Master_Log_Pos:1586Relay_Log_File:slave-relay-bin.000002Relay_Log_Pos:530Relay_Master_Log_File:master-bin.000012Slave_IO_Running:YesSlave_SQL_Running:YesServer05(192.168.200.115)配置文件变化(已经移除故障机server2配置):

[root@server05~]#cat/etc/masterha/app1.cnf[serverdefault]manager_log=/var/log/masterha/app1/manager.logmanager_workdir=/var/log/masterha/app1master_binlog_dir=/var/lib/mysqlmaster_ip_failover_script=/usr/local/bin/master_ip_failoverpassword=123456ping_interval=1remote_workdir=/tmprepl_password=123456repl_user=repluser=root[server1]hostname=server01port=3306[server3]hostname=server03port=3306[server4]hostname=server04port=3306十、配置读请求负载均衡10.1、安装LVS和Keepalived

192.168.200.116和192.168.200.117主机:

yum-yinstallipvsadmkernel-developenssl-develkeepalived10.2、master主机设置

192.168.200.116lvsmaster主机配置:

[root@server06~]#vim/etc/keepalived/keepalived.conf!ConfigurationFileforkeepalivedglobal_defs{notification_email{route_id192.168.200.116}notification_email_fromAlexandre.Cassen@firewall.locsmtp_server192.168.200.1smtp_connect_timeout30router_idLVS_DEVELvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval0vrrp_gna_interval0}vrrp_instanceVI_1{stateMASTERinterfaceens33virtual_router_id51priority100advert_int1authentication{auth_typePASSauth_pass1111}virtual_ipaddress{192.168.200.200}}virtual_server192.168.200.2003306{delay_loop6lb_algowrrlb_kindDRprotocolTCPreal_server192.168.200.1133306{weight1TCP_CHECK{connect_timeout10nb_get_retry3delay_before_retry3connect_port3306}}real_server192.168.200.1143306{weight1TCP_CHECK{connect_timeout10nb_get_retry3delay_before_retry3connect_port3306}}}[root@server06~]#systemctlrestartkeepalived

检查VIP地址:

[root@server06~]#ipa|grepens335:ens33:mtu1500qdiscpfifo_faststateUPgroupdefaultqlen1000inet192.168.200.116/24brd192.168.200.255scopeglobalnoprefixrouteens33inet192.168.200.200/32scopeglobalens33查看负载策略:

[root@server06~]#ipvsadm-LnIPVirtualServerversion1.2.1(size=4096)ProtLocalAddress:PortSchedulerFlags->RemoteAddress:PortForwardWeightActiveConnInActConnTCP192.168.200.200:3306wrr->192.168.200.113:3306Route100->192.168.200.114:3306Route10010.3、192.168.200.117backup主机设置:

slave1(192.168.200.113)和slave2(192.168.200.114)主机配置realserver脚本:

[root@server03~]#vimrealserver.sh#!/bin/bashSNS_VIP=192.168.200.200ifconfiglo:0$SNS_VIPnetmask255.255.255.255broadcast$SNS_VIP/sbin/routeadd-host$SNS_VIPdevlo:0echo"1">/proc/sys/net/ipv4/conf/lo/arp_ignoreecho"2">/proc/sys/net/ipv4/conf/lo/arp_announceecho"1">/proc/sys/net/ipv4/conf/all/arp_ignoreecho"2">/proc/sys/net/ipv4/conf/all/arp_announcesysctl-p>/dev/null2>&1

realserver1(192.168.200.113)检测VIP地址:

[root@server03~]#ipa|greplo1:lo:mtu65536qdiscnoqueuestateUNKNOWNgroupdefaultqlen1000link/loopback00:00:00:00:00:00brd00:00:00:00:00:00inet127.0.0.1/8scopehostloinet192.168.200.200/32brd192.168.200.200scopegloballo:0inet192.168.200.113/24brd192.168.200.255scopeglobalnoprefixrouteens33inet192.168.122.1/24brd192.168.122.255scopeglobalvirbr0远程复制到realserver2主机上:192.168.200.114:[root@server03~]#scprealserver.sh192.168.200.114:/root/realserver.sh100%378183.1KB/s00:00

[root@server04~]#bashrealserver.sh[root@server04~]#ipa|greplo1:lo:mtu65536qdiscnoqueuestateUNKNOWNgroupdefaultqlen1000link/loopback00:00:00:00:00:00brd00:00:00:00:00:00inet127.0.0.1/8scopehostloinet192.168.200.200/32brd192.168.200.200scopegloballo:0inet192.168.200.114/24brd192.168.200.255scopeglobalnoprefixrouteens33inet192.168.122.1/24brd192.168.122.255scopeglobalvirbr010.5、数据库读请求测试:

Server05(192.168.200.115)担任client角色测试,连接vip

MariaDB[(none)]>

查看分流情况:

[root@server06~]#ipvsadm-LncIPVSconnectionentriesproexpirestatesourcevirtualdestinationTCP00:54FIN_WAIT192.168.200.115:42558192.168.200.200:3306192.168.200.113:3306TCP13:56ESTABLISHED192.168.200.115:42560192.168.200.200:3306192.168.200.114:3306查看此时111的VIP状态:#可以做一个周期计划用于关闭防火墙机制(111-114-116-117):

[root@server01~]#ipa|grepens332:ens33:mtu1500qdiscpfifo_faststateUPgroupdefaultqlen1000inet192.168.200.111/24brd192.168.200.255scopeglobalnoprefixrouteens33inet192.168.200.100/24brd192.168.200.255scopeglobalsecondaryens33:1

THE END
1.可以做化学实验的软件APP推荐可以做化学实验的软件下载豌豆荚可以做化学实验的软件榜单为您提供最新可以做化学实验的软件大全,这里不仅有可以做化学实验的软件安卓版本APP、历史版本应用下载资源,还有类似可以做化学实验的软件的应用推荐,欢迎大家前来豌豆荚下载。https://www.wandoujia.com/bangdan/404992/
2.免费的原创检测工具,ai大佬都在推荐!原创性学术论文文献文章在当今知识创作呈指数级增长的时代,aigc.fyi 作为一个极具影响力的平台,其文章 AI 检测工具正逐渐成为创作者们捍卫原创性的有力武器。2025 年,在印度孟买的一所著名学府——孟买大学,年轻的历史学讲师拉杰什正致力于一项关于古代印度文明与丝绸之路贸易往来的研究课题。他的办公室位于校园古老建筑的一角,四周环绕着https://m.163.com/dy/article/JJ5K45UK0556B4P0.html
3.ZWICKZ005的载荷传感器最大容量和可以做的实验是()。刷刷题APP(shuashuati.com)是专业的大学生刷题搜题拍题答疑工具,刷刷题提供ZWICKZ005的载荷传感器最大容量和可以做的实验是()。A.5KN,拉伸B.50KN,拉压弯C.50KN,拉伸D.5KN,拉压弯的答案解析,刷刷题为用户提供专业的考试题库练习。一分钟将考试题Word文档/Excel文档/Phttps://www.shuashuati.com/ti/f07a9289e1954234bfbc0abddc94cd7d.html?fm=bdbds5ebcaefea67ac1a54d4bd32569b19c8b
4.可以模拟物理实验的app下载做物理实验的软件免费下载一些朋友不知道做物理实验的软件免费有哪些、物理实验模拟软件哪个好用一点,小编收集整理了部分做物理实验的软件,小伙伴们可以在这些物理实验模拟软件中去进行模拟实验,比如电路模拟实验、光学模拟实验等,学习各种物理知识。其他实验app推荐: 化学实验模拟软件 最http://www.962.net/k/zwlsydrj/
5.AppStore上的“物理实验室AR”提供App 内购买项目 截屏 iPad iPhone 简介 我们的下一款应用“海龟实验室”已经上线,内容涵盖物理、化学、生物、数学、计算艺术、社会科学等学科。在海龟实验室中探索并实验科学家设计和使用的模型,像科学家一样思考!你还可以对模型进行编程扩展。 在物理实验室中进行你的物理实验!在快速更新的应用中体验高精度电学https://itunes.apple.com/cn/app/id1298984261
6.化学实验室app哪个好?化学实验室app免费版下载化学海外软件就是你手机上的虚拟化学实验室,直接就可以在上面做各种实验的,一些效果也是卡岸的格外清楚,这里有很多的材料可以选择,还有一些方程式的,这样你就可以算出精准的量了。化学海外app介绍你可以尝试混合各种化学试剂,把它们倒进烧杯或者试管,你也可 http://www.danji100.com/k/hxsysapp/
7.职场人必须收藏的15个实用网站腾讯现在也做了一款腾讯文档,网页、app、小程序皆可同步,不过石墨起步比较早,功能相对更完善些。 网址:shimo.im 3. 二维码也可以做得很好看:草料二维码 大多数人用草料主要是把二维码和链接的互相转换,但其实草料的功能远不止这些。输入微信公众号和id也可以生成二维码,还可以通过改颜色、改形态、添加图片来优化二维https://www.douban.com/note/711036138/
8.可以做物理实验的软件免费下载物理实验模拟软件手机版下载大多数情况下的物理实验知识都是通过老师ppt或视频演示来观看,效果不够直观,对于我们接受能力不太强的同学对于这种物理的教学方式可能难以快速理解掌握知识,那么可以在手机上做物理实验的软件有哪些?本站整理制作了物理实验模拟软件合集,其中汇集了物理实验室app、初中物理实验app、高中物理实验app、虚拟实验app等多款好用https://m.32r.com/zt/wlsymnrj/
9.物理实验课app中小学生学习辅助软件下载物理实验课app是一款适合中小学生在线学习物理实验原理相关知识教程以及实操做物理小实验的辅助工具,无需器材就能进行高精度中小学物理实验的开放应用。初高中阶段的经典自由和演示实验,应用不仅允许您体验动手操作的乐趣,更能从实物连接自动转换至可编辑的电路图,专业引擎精准计算模拟结果。这款物理实验课最新版,就是帮助http://www.dianwannan.com/app/1000000236690/
10.化学实验软件2023最新版下载手机上做化学实验的app化学实验软件推荐合集下载专区是17小编最近为各位小伙伴们收集准备的一期关于化学实验软件官方正版下载专题,化学实验app能够帮助用户更直观学习化学,那化学实验app那个好呢?下面就来给大家推荐几款BEAKER将你的手机变成烧杯,150多种药剂、300多种神奇的化学反应任你尝试。拥有烧杯应用就像是拥有一个真正的移动化学仪器一样http://www.17danji.com/zhuanti/huaxueshiyan_2/
11.如何使用“烧杯”APP进行简单的化学实验烧杯App,是一款把iOS设备当成一个烧杯,含有150多种化学试剂,滑动手指,轻摇设备即可进行简单的化学实验的软件。有了它,人人都有机会且随时随地做化学实验。具体操作如下: 1.在应用市场中搜索“烧杯”下载至手机桌面,打开烧杯App 2.进入主界面 3.功能介绍 https://www.jianshu.com/p/e39717f4a942
12.www.lapierrebikes.com.cn/xxxr28585297/20240929/90138778第四点,不加杠杆。这一点可得重点说说。有些人为了赚更多的钱,就选择加杠杆炒股。结果风险也跟着放大了。股市里一点点波动,都可能让你血本无归!所以咱们还是得稳扎稳打,别冒险加杠杆了。 说到这我想起来一个真实案例。有个散户投资者,他一开始炒股还挺顺利的,赚了不少钱。后面他贪心不足蛇吞象,开始加杠http://www.lapierrebikes.com.cn/xxxr28585297/20240929/90138778
13.烧杯app官方版下载烧杯app官方版最新版下载v3300烧杯app官方版是一款专门为大家打造的化学实验软件,这款软件中含有海量的化学实验,让大家可以在这里轻松学会,并增强自己对化学的喜爱,软件中的所有实验教程都很详细,大家可以沉浸式的进行学习和观摩哦,喜欢的用户们快来本站下载软件使用吧,真的非常棒,大家不要错过了哦。 特色 1、真实还原,实验场景高度还原,实验效果https://m.hanzify.org/soft/171281.html
14.www.topcheersoftware.com/newxr43246879.htm含羞草实验室入口直接进轮滑网 19.42MB 19%好评419人 一级中文字幕乱码免费 紫阳花が散り散る时动漫 在线国产黄片 17.27MB 19%好评703人 沈娜娜夏晴子团圆火锅在线版 黑人操嫩模 激情国模精品图套150p 43.68MB 20%好评477人 5g视讯 谢丽悦 星空传媒app下载安装 93.90MB 17%好评756人 AV大http://www.topcheersoftware.com/newxr43246879.htm
15.拥有的虚拟科学实验APP工具和资源做实验app推荐这里是给科学课教师的福利。在这篇文章中,我将介绍的12款有关虚拟科学实验相关的APP、工具及相关资源,给中小学科学教育工作者分享。 Project Noah: 为教师们提供相关实验,这些实验都可以让亲自动手去做。其网址是:http://www.projectnoah.org/ Prepmagic:为学生提供帮助他们促进学习的科学模拟。 https://blog.csdn.net/hayaqi0504/article/details/101128134
16.只用腾讯做的App,我能活过一周吗?在进行这次「只用腾讯系 app」实验的前前后后,这个问题我已经自问了不下于三十次。 「只要有微信,我就还和世界有联系,肯定活得下去」。这是实验开始前我信誓旦旦对周围人说的一句话。 不过实验真正开始的时候,我还是有了担心:万一呢?但实验还是如期进行。 https://36kr.com/p/1722586529793
17.拿我的妹妹做实验v3.0无病毒,哪个浏览器能打开rule34,纳西妲等身拿我的妹妹做实验v3.0无病毒,哪个浏览器能打开rule34,纳西妲等身抱枕特别款,奶牛福建app导航湖南教育怎么用,男gary,男女拔萝卜,男女拔萝卜女生肚子里咕噜咕噜响是怎么回事,男女拔萝卜原声不带歌词没有马赛克,男女差差差,男女打扑克,男女亲热,男女晚上做运动生宝宝好吗http://www.xgfrz.com/
18.出了6个诺贝尔奖得主的大学,做了一款“手机杀手”App?可以说, Phyphox 在物理方面的功能已经远远超过烧杯在化学方面的模拟实验了。 毕竟烧杯只不过提供了一些虚假的模拟化学反映,但是 Phyphox 却是真刀真枪的让你把手机当做工具,然后记录一些你实验的结果。 而Phyphox 这款 App 无疑打开了一扇门,让大家知道:原来我的手机还能这样玩~ https://m.thepaper.cn/wap/resource/jsp/newsDetail_forward_9827814
19.www.scmc动漫女同LV免费观看在线 含羞草实验研所 91看片在线看片秘? 泰国皇室一级婬片在线看 色偷偷一区二区三区 制服激情片骚虎 HEYZO古瀬玲人妻中文字幕 黄色app下载大全 日韩一级片喷水 深爱激情五月偷拍 欧洲美好视频亚洲人妻日日爽 成全影院电视剧在线观看 男淦女 人和兽啊不要在线观看 日韩AⅤ人妻http://www.scmc-xa.com/xxxr11336258/20241001/10051230