使用 MaxScale 实现数据库的高可用性和弹性

在本文中,通过 Docker Compose 运行的实际演示来了解数据库 (MariaDB) 的高可用性和弹性。

关键任务应用程序需要高可用性。高可用性的目标是为用户提供对服务或资源的一致访问,最大限度地减少中断的可能性。自动故障转移是用于实现高可用性的特定机制。它涉及自动检测系统组件(如服务器、网络或数据库)的故障,并立即将操作切换到备用组件,而无需人工干预。这增加了弹性。

MariaDB MaxScale是一个数据库代理,包含高可用性功能。在本文中,我将向您展示如何使用Java 和 Svelte 实现的在线商店模拟器应用程序进行尝试。

场景:
使用 JavaScript 和 Svelte 框架开发的 Web 应用程序向 Java 后端发出 HTTP 请求。后端使用服务器发送的事件进行响应,前端使用这些事件来更新浏览器上的用户界面。

后端使用Spring Boot实现,并使用R2DBC(反应式)连接到MariaDB数据库集群。简而言之,后端逻辑是对在线商店数据库的读取和写入的模拟。模拟是参数化的,用户可以调整:

  • 每分钟产品访问次数:每分钟对数据库的读取次数。
  • 每分钟订单数:每分钟向数据库写入的次数。
  • 每个订单的产品:写放大。
  • 超时(以毫秒为单位):多少秒后才认为对数据库的请求失败。

数据库集群的前端是一个名为 MaxScale 的数据库代理。该代理使集群对于 Java 后端来说就像一个逻辑数据库。 MaxScale 还执行读/写拆分(将写入发送到主 MariaDB 服务器并将读取发送到副本),以及使用可配置算法在副本服务器之间进行读取的负载平衡。数据自动从主数据库服务器复制到副本数据库服务器。

从源代码构建 Docker 镜像
这里为模拟器中的每个组件准备了自定义 Docker 镜像。您可以从源构建 镜像(可选),也可以使用 Docker Hub 中已构建和发布的 镜像。如果您决定自己构建 镜像,可以在 GitHub 上找到源代码:

  • MariaDB 部署:自定义 镜像,可使用 MaxScale 轻松部署复制的 MariaDB 拓扑。不要在生产中使用这些!这些 镜像仅适用于演示应用程序。使用官方 MariaDB Docker 镜像进行生产部署。
  • 后端应用程序:连接数据库集群的后端应用程序。
  • 前端应用程序:前端应用程序向后端发出模拟配置请求并接收事件以显示模拟结果。

每个存储库都有 Dockerfile,您可以使用它们来构建自己的 Docker 镜像。例如,要构建后端应用程序 镜像,请运行:

docker build --tag alejandrodu/online-store-simulator-java-backend .