nginx mysql切换_Nginx+PHP+MySQL双机互备、全自动切换方案

在生产运用 中,某台“Nginx+PHP+MySQL”接口数据服务器,扮演的角色十分首要 ,假如服务器硬件或Nginx、MySQL发生故障,而短时间内不能还原,后果将特别严重。为了防止单点故障,我设计了此套方案,编写了failover.sh脚本,实现了双机互备、全自动切换,故障转移时间只需几十秒。  一、双机互备、全自动切换方案:  1、拓扑图:

201022222412448351.png

http://${vip_eth1_share}/ > /dev/null 2>&1) && (${mysql_bin} -u"${mysql_username}" -p"${mysql_password}" -P"${mysql_port}" -h"${vip_eth0_share}" -e"show slave status\G" > /dev/null 2>&1)   then   #取得与内网VIP绑定的服务器内网IP   eth0_active_server=$(${mysql_bin} -u"${mysql_username}" -p"${mysql_password}" -P"${mysql_port}" -h"${vip_eth0_share}" -e"show slave status\G" grep "Master_Host" awk -F ': ' '{printf $2}')      #假如内网VIP=主机内网IP(主机MySQL中的Master_Host显示的是备机的域名或IP),且本机为主机   if [ "${eth0_active_server}" = "${rip_eth0_slave}" ] && [ "${type}" = "master" ]   then     function_rsync_master_to_slave     function_vip_arping       #假如内网VIP=备机内网IP(备机MySQL中的Master_Host显示的是主机的域名或IP)   elif [ "${eth0_active_server}" = "${rip_eth0_master}" ]   then     if (curl -m 30 -Ghttp://${rip_eth1_master}/ > /dev/null 2>&1) && (${mysql_bin} -u"${mysql_username}" -p"${mysql_password}" -P"${mysql_port}" -h"${rip_eth0_master}" -e"show slave status\G" grep "Seconds_Behind_Master: 0" > /dev/null 2>&1)     then       #假如主机能够访问,数据库同步无延迟,且本机就是主机,那么由本机绑定虚拟IP       if [ "${type}" = "master" ]       then         #假如本机为主机      function_bind_vip         function_vip_arping         echo "${date} 主机已绑定虚拟IP!(Type:1)" >> ${logfile}       else         #假如本机为备机      function_remove_vip         echo "${date} 备机已去除虚拟IP!(Type:2)" >> ${logfile}       fi     else       if [ "${type}" = "slave" ]       then         #假如本机为备机      function_rsync_slave_to_master                 function_vip_arping       fi           fi   fi   else       #虚拟IP不能访问时,判断主机能否访问       if (curl -m 30 -Ghttp://${rip_eth1_master}/ > /dev/null 2>&1) && (${mysql_bin} -u"${mysql_username}" -p"${mysql_password}" -P"${mysql_port}" -h"${rip_eth0_master}" -e"show slave status\G" > /dev/null 2>&1)       then           #假如主机能够访问,且本机就是主机,那么由本机绑定虚拟IP           if [ "${type}" = "master" ]           then               function_bind_vip               function_vip_arping               echo "${date} 主机已绑定虚拟IP!(Type:3)" >> ${logfile}           else               function_remove_vip               echo "${date} 备机已去除虚拟IP!(Type:4)" >> ${logfile}           fi   elif (curl -m 30 -Ghttp://${rip_eth1_slave}/ > /dev/null 2>&1) && (${mysql_bin} -u"${mysql_username}" -p"${mysql_password}" -P"${mysql_port}" -h"${rip_eth0_slave}" -e"show slave status\G" > /dev/null 2>&1)       then           #假如主机不能 访问而备机能够访问,且本机就是备机,那么由备机绑定虚拟IP           if [ "${type}" = "slave" ]           then               function_bind_vip               function_vip_arping               echo "${date} 备机已绑定虚拟IP!(Type:5)" >> ${logfile}           else               function_remove_vip               echo "${date} 主机已去除虚拟IP!(Type:6)" >> ${logfile}           fi       else           echo "${date} 主机、备机所有不能访问!(Type:7)" >> ${logfile}       fi   fi   #每次循环暂停20秒(即间隔20秒检测一次)   sleep 20done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值