欢迎访问宙启技术站
智能推送

Ubuntu搭建Mysql+Keepalived高可用的实现(双主热备)

发布时间:2023-05-17 06:57:53

Ubuntu搭建Mysql Keepalived高可用的实现(双主热备) 

随着互联网的发展,数据库已经成为很多企业业务系统中不可或缺的重要组成部分。因为对于软件设计来讲,如果将数据划分为一部分数据存储在本地,一部分数据存储在网络服务器上,这样的设计极大地减少了单机程序的复杂性。这时候,如果数据库挂掉,对于企业来说将会是毁灭性的打击。所以,高可用数据库架构已经变得倍受关注。

为了实现高可用性,常见的方案是搭建主备复制架构。在这种架构下,数据同步是由主库负责,备库在主库发生故障的时候,自动接替主库的工作。这样可以有效地避免单点故障,提高整个系统的可用性。然而,传统的主备复制架构存在一些问题,比如发生故障时切换时间长,数据同步不及时等等。因此,本文将为大家介绍如何通过Mysql Keepalived高可用的实现(双主热备)来解决这些问题。

Mysql Keepalived高可用的实现(双主热备)的架构图如下:

![](https://ai-studio-static-online.cdn.bcebos.com/8132162e37ef4bc3b60da743641e8df60e07e5a0dee549cfa23f6d91cd8729a0)

本文将采用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高可用的实现(双主热备)来解决传统主备复制架构存在的一些问题,如发生故障时切换时间长,数据同步不及时等等,从而提高整个系统的可用性。希望对大家有所帮助。