理论部分,在之前的文章已经说明过了,详见:
繁星亮与鲍包包:【理论研究】业务系统高可用及负载均衡zhuanlan.zhihu.com上一篇已经讲述对2台Mysql服务器做主主复制,实现Mysql数据库的数据保护。但是缺点是一旦单机故障,WEB服务器需要手动修改配置文件连接到备数据库,不能自动切换。
因此,本篇在上一篇Mysql主主复制的基础上,为两台Mysql服务器安装Keepalivce,并且增加mysql检测脚本,实现mysql服务器的高可用。
前提需要完成上一篇的主主复制配置。(主主复制,不是主从复制)
1、安装Keepalived
1.1 安装
yum install keepalived -y
1.2 修改配置文件
cd /etc/keepalived
rm keepalived.conf
#原有的配置文件
vi keepalived.conf
#创建新的配置文件
注意配置文件只有一些关键参数必须修改,其他都是默认的。
Master(主)服务器配置
! 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 #健康检查端口
}
}
}
注意上面配置中定义了一个叫mysql.sh的脚本,也就是需要写一个脚本检测mysql服务运行状况,keepalived启动后会自动按照设置好的时间间隔,周期性调用检测脚本。
Slave(从)服务器配置
! 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 #健康检查端口
}
}
}
1.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
启动keepalived服务
service keepalived start
2、测试
2.1修改Apache连接数据库配置
vi /var/www/html/config.php
$db_config['DB_HOST'] = '10.1.30.30';
#修改数据库地址为数据库keepalived配置VIP的地址
重启httpd服务
service httpd restart
测试通过Apache01、02(10.1.30.24、25)网站是否能够正常访问。
2.2测试Mysql高可用
手动关闭Mysql01的mysql进程
service mysqld stop
刷新网站页面是否能够正常访问。
网站访问正常,证明高可用配置成功。