Ubuntu搭建Mysql+Keepalived高可用的实现(双主热备)
Ubuntu搭建Mysql Keepalived高可用的实现(双主热备)
随着互联网的发展,数据库已经成为很多企业业务系统中不可或缺的重要组成部分。因为对于软件设计来讲,如果将数据划分为一部分数据存储在本地,一部分数据存储在网络服务器上,这样的设计极大地减少了单机程序的复杂性。这时候,如果数据库挂掉,对于企业来说将会是毁灭性的打击。所以,高可用数据库架构已经变得倍受关注。
为了实现高可用性,常见的方案是搭建主备复制架构。在这种架构下,数据同步是由主库负责,备库在主库发生故障的时候,自动接替主库的工作。这样可以有效地避免单点故障,提高整个系统的可用性。然而,传统的主备复制架构存在一些问题,比如发生故障时切换时间长,数据同步不及时等等。因此,本文将为大家介绍如何通过Mysql Keepalived高可用的实现(双主热备)来解决这些问题。
Mysql Keepalived高可用的实现(双主热备)的架构图如下:

本文将采用Ubuntu 16.04为操作系统,Mysql和Keepalived的版本分别是5.7和1.2.19。
一、安装Mysql
在Ubuntu系统上安装Mysql的方法非常简单,使用apt-get进行安装即可:
sudo apt-get install mysql-server
安装过程中会提示输入root用户的密码,这个密码用于登录到数据库,输入完成之后直接按回车键即可继续。
二、配置Mysql
1. 创建用户和数据库
登录到Mysql,创建一个用于测试的数据库:
mysql -uroot -p
在数据库下执行以下命令来创建测试用户和数据库:
CREATE USER 'test'@'%' IDENTIFIED BY '123456';
CREATE DATABASE test;
GRANT ALL PRIVILEGES ON test.* TO 'test'@'%';
FLUSH PRIVILEGES;
2. 配置主从复制
在主库上执行以下SQL语句来开启二进制日志:
vim /etc/mysql/mysql.conf.d/mysqld.cnf
log-bin=mysql-bin
重新启动Mysql服务:
systemctl restart mysql
在主库上执行以下SQL语句来创建一个用于复制的用户:
CREATE USER 'repl'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
在主库上执行以下命令来获取当前的二进制日志名称和位置:
SHOW MASTER STATUS;
这里会得到一个类似于下面这个样子的结果:
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 1079 | | |
+------------------+----------+--------------+------------------+
记住这个值,待会需要在从库上使用。
在从库上执行下面的SQL语句进行配置:
vim /etc/mysql/mysql.conf.d/mysqld.cnf
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin
log-slave-updates = 1
read-only = 1
再次重启Mysql服务:
systemctl restart mysql
在从库上执行以下命令来配置主从关系:
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='192.168.0.100',
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1079;
START SLAVE;
如果主从配置无误,从库状态会变成:
show slave status \G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
这样,主从配置就完成了。
三、安装Keepalived
1. 安装Keepalived
Keepalived是一种基于VRRP协议的高可用软件,使用它来实现MySQL高可用非常方便。在Ubuntu上安装Keepalived也是使用apt-get进行安装即可:
sudo apt-get install keepalived
2. 配置Keepalived
首先,修改Keepalived的配置文件:
vim /etc/keepalived/keepalived.conf
在文件中输入以下内容:
vrrp_script chk_mysql {
script "/etc/keepalived/check_mysql.sh"
interval 2
}
vrrp_instance VI_1 {
interface ens160
state BACKUP
virtual_router_id 15
priority 99
advert_int 1
unicast_src_ip {{本机IP}}
unicast_peer {
{{主机IP}}
{{从机IP}}
}
virtual_ipaddress {
{{虚拟IP}}
}
track_interface {
ens160
}
track_script {
chk_mysql
}
}
其中,{{本机IP}}表示本机IP地址,{{主机IP}}表示主库的IP地址,{{从机IP}}表示从库的IP地址,{{虚拟IP}}表示用于负载均衡的虚拟IP地址。
然后在/etc/keepalived目录下创建一个check_mysql.sh脚本:
vim /etc/keepalived/check_mysql.sh
将以下脚本写入到文件中:
#!/bin/bash
MYSQL=/bin/systemctl status mysql.service | grep running | wc -l
if [ $MYSQL -eq 0 ];then
/bin/systemctl restart mysql.service
sleep 10s
if [ /bin/systemctl status mysql.service | grep running | wc -l -eq 0 ];then
killall keepalived
fi
fi
说明:在Keepalived配置文件中使用了一个vrrp_script,这个脚本会定期监控MySQL服务,如果MySQL服务挂了,则会启动MySQL服务,如果MySQL服务启动失败,则会kill掉Keepalived进程。
最后,启动Keepalived服务:
systemctl start keepalived
这样,我们就完成了整个高可用架构的搭建。
总结:
本文为大家介绍了如何通过Mysql Keepalived高可用的实现(双主热备)来解决传统主备复制架构存在的一些问题,如发生故障时切换时间长,数据同步不及时等等,从而提高整个系统的可用性。希望对大家有所帮助。
