【实战演练】数据库基本知识与原理系列05-keepalived实现Mysql主数据库故障自动切换

一、背景php

Mysql的高可用,有不少的方案,其中上一篇说的主从复制,仅仅是保障了数据有一份副本,当主mysql服务器故障的时候,是不能自动切换的。web服务器须要从新修改jdbc链接的地址为备用mysql服务器的地址,网页才能恢复访问呢。mysql

这样的缺点有:web

一、须要人工干预,若是无人值守,而故障发生在深夜,极可能就没有人处理。又或者估算虽然发生在白天,可是故障发现不及时,仍是会影响业务。算法

二、业务会中断,会停机,在主mysql服务器挂掉,到发现,到修改web服务器指向,到业务恢复,中间会中止服务一段时间。sql

所以,本篇基于主从复制已经实现的基础上,实现mysql主从服务器的自动切换。数据库


二、实验环境vim

Mysql虚拟IP:10.1.30.30tomcat

Mysql主服务器:10.1.30.28bash

Mysql从服务器:10.1.30.29服务器


三、配置

3.1安装keepalive

yum install -y keepalived


3.2编辑keepalive配置文件

3.2.1主服务器配置文件

cd /etc/keepalived
rm keepalived.conf原有的配置文件
vi keepalived.conf,建立新的配置文件
! Configuration File forkeepalived
global_defs {
notification_email_from  [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MYSQL_HA      #标识,双主相同
 }
vrrp_instance VI_1 {
 state BACKUP           #两台都设置BACKUP
 interface eth1
 virtual_router_id 51       #主备相同
 priority 100   #优先级,另外一台改成90
 advert_int 1
 nopreempt  #不抢占,只在优先级高的机器上设置便可,优先级低的机器不设置
 authentication {
 auth_type PASS
 auth_pass 1111
 }
 virtual_ipaddress {
 10.1.30.30
 }
}
virtual_server 10.1.30.30 3306 {
     delay_loop 2   #每一个2秒检查一次real_server状态
     lb_algo wrr   #LVS算法
     lb_kind DR    #LVS模式
     persistence_timeout 60   #会话保持时间
     protocol TCP
     real_server 10.1.30.28 3306 {
         weight 3
         notify_down /etc/keepalived/mysql.sh  #检测到服务down后执行的脚本
         TCP_CHECK {
             connect_timeout 10    #链接超时时间
             nb_get_retry 3       #重连次数
             delay_before_retry 3   #重连间隔时间
             connect_port 3306   #健康检查端口
         }
     }
}


3.2.2从服务器配置文件

! Configuration File forkeepalived
global_defs {
notification_email_from  [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MYSQL_HA      #标识,双主相同
 }
vrrp_instance VI_1 {
 state BACKUP           #两台都设置BACKUP
 interface eth1
 virtual_router_id 51       #主备相同
 priority 90   #优先级,另外一台改成90
 advert_int 1
 nopreempt  #不抢占,只在优先级高的机器上设置便可,优先级低的机器不设置
 authentication {
 auth_type PASS
 auth_pass 1111
 }
 virtual_ipaddress {
 10.1.30.30
 }
}
virtual_server 10.1.30.30 3306 {
     delay_loop 2   #每一个2秒检查一次real_server状态
     lb_algo wrr   #LVS算法
     lb_kind DR    #LVS模式
     persistence_timeout 60   #会话保持时间
     protocol TCP
     real_server 10.1.30.29 3306 {
         weight 3
         notify_down /etc/keepalived/mysql.sh  #检测到服务down后执行的脚本
         TCP_CHECK {
             connect_timeout 10    #链接超时时间
             nb_get_retry 3       #重连次数
             delay_before_retry 3   #重连间隔时间
             connect_port 3306   #健康检查端口
         }
     }
}


3.2.3建立mysql进程检测脚本

而后在主备都建立以下一个文件。(主备都须要添加)

vim  /etc/keepalived/mysql.sh

内容以下:

#!/bin/bash
pkill keepalived
sleep  10
/etc/init.d/keepalived start  >/dev/null
----------(内容结束)
chmod +x /etc/keepalived/mysql.sh
service keepalived start


记得须要增长keepalived的开机自启动。

chkconfig keepalived on

重启后,能够用

/etc/init.d/keepalived status

来查看进程是否已启动。


注意:须要两台机器都先重启一下mysqld服务,而后手动

service keepalived restart

另外,能够用ip a s 查看浮动IP如今在哪台主机。


四、检验是否生效

4.1部署web站点

测试前,首先你得有个网站,能够参考以前的文章【实战演练】Linux操做系统05-用LAMP搭建网站【实战演练】Linux操做系统07-用tomcat搭建网站,部署一个。

固然,web与数据库要分开部署,而数据库部署在主mysql服务器(10.1.30.28)与从mysql服务器(10.1.30.29)。


4.2修改web配置

修改网站的config.php或者jdbc等链接数据库的文件,将数据库的HOST设置为VIP(10.1.30.30),而不是主或者从服务器的真实IP地址。


4.3测试

直接访问网站域名,看看网站是否正常访问。若是可以正常访问,登陆主服务器,

service myslqd stop

而后继续访问网站域名,看看是不是否仍然能正常访问,若是能够,正面主从切换成功。

相关文章
相关标签/搜索