1、背景
Mysql的高可用,有很多的方案,其中上一篇说的主从复制,仅仅是保障了数据有一份副本,当主mysql服务器故障的时候,是不能自动切换的。web服务器需要重新修改jdbc连接的地址为备用mysql服务器的地址,网页才能恢复访问呢。
这样的缺点有:
1、需要人工干预,如果无人值守,而故障发生在深夜,很可能就没有人处理。又或者估算虽然发生在白天,但是故障发现不及时,还是会影响业务。
2、业务会中断,会停机,在主mysql服务器挂掉,到发现,到修改web服务器指向,到业务恢复,中间会停止服务一段时间。
因此,本篇基于主从复制已经实现的基础上,实现mysql主从服务器的自动切换。
2、实验环境
Mysql虚拟IP:10.1.30.30
Mysql主服务器:10.1.30.28
Mysql从服务器:10.1.30.29
3、配置
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、检验是否生效
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
然后继续访问网站域名,看看是否是否仍然能正常访问,如果可以,正面主从切换成功。