使用Docker Compose搭建高可用双机热备MySQL数据库

作者:十万个为什么2024.01.18 02:48浏览量:20

简介:本文将介绍如何使用Docker Compose搭建高可用双机热备MySQL数据库,通过配置Keepalived实现双机热备,提高数据库的可用性和性能。

在开始之前,请确保您已经安装了Docker和Docker Compose。本示例将使用两个MySQL容器,每个容器运行一个MySQL实例。我们将使用Keepalived来监控这两个实例,并在其中一个实例出现故障时自动将其流量切换到另一个实例。

  1. 创建MySQL容器
    首先,我们需要创建两个MySQL容器。在项目根目录下创建一个名为docker-compose.yml的文件,并将以下内容添加到文件中:
    ```yaml
    version: ‘3’
    services:
    db1:
    image: mysql:latest
    ports:
  • 3306:3306
    environment:
    MYSQL_ROOT_PASSWORD: my-secret-pw
    command: mysqld —innodb_log_file_size=500M —innodb_buffer_pool_size=1G —innodb_flush_log_at_trx_commit=2 —sync_binlog=1 —max_connections=500
    db2:
    image: mysql:latest
    ports:
  • 3307:3306
    environment:
    MYSQL_ROOT_PASSWORD: my-secret-pw
    command: mysqld —innodb_log_file_size=500M —innodb_buffer_pool_size=1G —innodb_flush_log_at_trx_commit=2 —sync_binlog=1 —max_connections=500
    `` 这个配置文件定义了两个名为db1db2的MySQL容器。它们都使用最新的MySQL镜像,并将MySQL的默认端口映射到主机的3306和3307端口。环境变量MYSQL_ROOT_PASSWORD`用于设置MySQL的root密码。命令行参数用于配置InnoDB存储引擎和最大连接数等参数。
  1. 创建Keepalived配置文件
    接下来,我们需要创建Keepalived的配置文件来监控MySQL实例。在项目根目录下创建一个名为keepalived.conf的文件,并将以下内容添加到文件中:
    bash global_defs { notification_email { root@localhost } notification_email_from keepalived@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 52 priority 100 virtual_ipaddress { 172.20.0.15/24 dev ens33 } }这个配置文件定义了一个名为VI_1的虚拟路由器实例。它使用ens33接口,虚拟路由器ID为52,优先级为100。虚拟IP地址设置为172.20.0.15/24,并将其绑定到ens33接口上。在主服务器上配置这个虚拟路由器实例。对于备份服务器,只需要将state设置为BACKUP,将virtual_ipaddress部分删除即可。这样,当主服务器出现故障时,Keepalived会自动将虚拟IP地址切换到备份服务器上。
  2. 启动容器和Keepalived服务
    现在,我们可以启动MySQL容器和Keepalived服务了。打开终端并执行以下命令:
    shell docker-compose up -d service keepalived start这将启动两个MySQL容器,并将Keepalived服务设置为开机自启。Keepalived将自动监控MySQL实例的状态,并在必要时将其切换到另一个实例上。现在,您已经成功搭建了一个高可用双机热备MySQL数据库。数据库的读写操作将自动路由到可用的实例上,从而提高系统的可用性和性能。请注意,这只是一个简单的示例,实际生产环境中可能需要更多的配置和优化。