📣

TiDB Cloud Serverless 现已更名为
Starter
!此页面由 AI 自动翻译,英文原文请见
此处。

将 TiDB 与 ProxySQL 集成

本文档提供了 ProxySQL 的高层次介绍,描述了在 开发环境生产环境 中如何将 ProxySQL 与 TiDB 集成,并通过 查询路由的典型场景演示了主要的集成优势。

如果你有兴趣了解更多关于 TiDB 和 ProxySQL 的信息,可以参考以下一些有用的链接:

什么是 ProxySQL?

ProxySQL 是一个高性能的开源 SQL 代理。它具有灵活的架构,可以以多种不同方式部署,非常适合各种用例。例如,ProxySQL 可以通过缓存频繁访问的数据来提升性能。

ProxySQL 从设计之初就追求快速、高效、易用。它与 MySQL 完全兼容,支持你期望的所有高质量 SQL 代理功能。此外,ProxySQL 还具有一些独特的特性,使其成为各种应用的理想选择。

为什么要集成 ProxySQL?

  • ProxySQL 可以通过减少与 TiDB 交互时的延迟,帮助提升应用性能。无论你在构建什么样的应用,无论是使用无服务器函数(如 Lambda)实现的可扩展应用(工作负载具有不确定性且可能出现峰值),还是需要执行加载大量数据的查询的应用,利用 ProxySQL 的强大功能(如 连接池缓存频繁使用的查询)都能立即获得好处。
  • ProxySQL 可以作为额外的应用安全层,防御 SQL 漏洞(如 SQL 注入),这得益于其 查询规则 功能,配置简单。
  • 由于 ProxySQLTiDB 都是开源项目,你可以享受到零供应商锁定的优势。

部署架构

将 ProxySQL 与 TiDB 部署的最常见方式是将 ProxySQL 作为应用层与 TiDB 之间的独立中介。然而,这种方式的可扩展性和容错性无法得到保证,而且由于网络跳转,还会增加额外的延迟。为避免这些问题,另一种部署架构是将 ProxySQL 作为 sidecar 部署,示意如下:

proxysql-client-side-tidb-cloud

开发环境

本节介绍在开发环境中如何将 TiDB 与 ProxySQL 集成。在你准备好所有 前提条件 后,可以根据你的 TiDB 集群类型选择以下任意一种方案开始集成。

前提条件

根据你选择的方案,可能需要以下软件包:

你可以按照以下安装指引操作:

    1. 下载 并启动 Docker(Docker Desktop 已包含 Docker Compose)。

    2. 运行以下命令安装 Python 和 mysql-client

      /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew install python mysql-client
    curl -fsSL https://get.docker.com | bash -s docker yum install -y git python39 docker-ce docker-ce-cli containerd.io docker-compose-plugin mysql systemctl start docker
    • 下载并安装 Git。

      1. Git Windows 下载 页面下载 64-bit Git for Windows Setup 包。

      2. 按照安装向导完成安装,点击 Next 多次使用默认设置。

        proxysql-windows-git-install

    • 下载并安装 MySQL Shell。

      1. MySQL 社区服务器下载 页面下载 ZIP 格式的 MySQL 安装包。

      2. 解压后,找到 mysql.exebin 文件夹中。需要将 bin 文件夹路径添加到系统变量中,并在 Git Bash 中设置到 PATH 变量:

        echo 'export PATH="(your bin folder)":$PATH' >>~/.bash_profile source ~/.bash_profile

        例如:

        echo 'export PATH="/c/Program Files (x86)/mysql-8.0.31-winx64/bin":$PATH' >>~/.bash_profile source ~/.bash_profile
    • 下载并安装 Docker。

      1. Docker 下载 页面下载 Docker Desktop 安装包。

      2. 双击运行安装程序,安装完成后会提示重启。

        proxysql-windows-docker-install

    • 下载最新的 Python 3 安装包,从 Python 下载 页面下载安装。

    Option 1: 将 TiDB Cloud 与 ProxySQL 集成

    此方案中,你将使用 ProxySQL Docker 镜像 和一个 TiDB Cloud Serverless 集群。以下步骤将会在端口 16033 上部署 ProxySQL,请确保此端口可用。

    步骤 1. 创建 TiDB Cloud Serverless 集群

    1. 创建一个免费 TiDB Cloud Serverless 集群。记住你为集群设置的 root 密码。

    2. 获取你的集群主机名、端口和用户名,备用。

      1. Clusters 页面,点击你的集群名称进入集群概览页面。
      2. 在集群概览页面,找到 Connection 面板,复制 EndpointPortUser 字段,Endpoint 即为你的集群主机名。

    步骤 2. 生成 ProxySQL 配置文件

    1. 克隆 集成示例代码仓库

        git clone https://github.com/pingcap-inc/tidb-proxysql-integration.git
        git clone https://github.com/pingcap-inc/tidb-proxysql-integration.git
        git clone https://github.com/pingcap-inc/tidb-proxysql-integration.git
      • 进入 tidb-cloud-connect 文件夹:

          cd tidb-proxysql-integration/example/tidb-cloud-connect
          cd tidb-proxysql-integration/example/tidb-cloud-connect
          cd tidb-proxysql-integration/example/tidb-cloud-connect
        • 运行 proxysql-config.py 生成配置文件:

            python3 proxysql-config.py
            python3 proxysql-config.py
            python proxysql-config.py

            提示时,输入你的集群端点作为 Serverless Tier Host,然后输入集群的用户名和密码。

            以下为示例输出。你会看到在当前 tidb-cloud-connect 文件夹下生成了三个配置文件。

            [Begin] generating configuration files.. tidb-cloud-connect.cnf generated successfully. proxysql-prepare.sql generated successfully. proxysql-connect.py generated successfully. [End] all files generated successfully and placed in the current folder.

          步骤 3. 配置 ProxySQL

          1. 启动 Docker。如果已启动,可跳过此步骤:

              双击已安装的 Docker 图标启动。

              systemctl start docker

              双击已安装的 Docker 图标启动。

            • 拉取 ProxySQL 镜像并在后台启动容器:

                docker compose up -d
                docker compose up -d
                docker compose up -d
              • 通过运行以下命令,将 proxysql-prepare.sqlProxySQL 管理界面 内执行,集成配置:

                  docker compose exec proxysql sh -c "mysql -uadmin -padmin -h127.0.0.1 -P6032 < ./proxysql-prepare.sql"
                  docker compose exec proxysql sh -c "mysql -uadmin -padmin -h127.0.0.1 -P6032 < ./proxysql-prepare.sql"
                  docker compose exec proxysql sh -c "mysql -uadmin -padmin -h127.0.0.1 -P6032 < ./proxysql-prepare.sql"

                  以下为示例输出。你会看到输出中显示了你的集群主机名,表示 ProxySQL 与 TiDB Cloud Serverless 集群的连接已建立。

                  *************************** 1. row *************************** hostgroup_id: 0 hostname: gateway01.us-west-2.prod.aws.tidbcloud.com port: 4000 gtid_port: 0 status: ONLINE weight: 1 compression: 0 max_connections: 1000 max_replication_lag: 0 use_ssl: 1 max_latency_ms: 0 comment:

                步骤 4. 通过 ProxySQL 连接你的 TiDB 集群

                1. 运行 proxysql-connect.py,连接到你的 TiDB 集群。脚本会自动启动 MySQL 客户端,并使用你在 步骤 2 中指定的用户名和密码。

                    python3 proxysql-connect.py
                    python3 proxysql-connect.py
                    python proxysql-connect.py
                  • 连接成功后,可以用以下 SQL 语句验证连接:

                    SELECT VERSION();

                    如果显示了 TiDB 版本信息,说明你已成功通过 ProxySQL 连接到你的 TiDB Cloud Serverless 集群。随时可以输入 quit 并按 enter 退出 MySQL 客户端。

                  • 若要停止并删除容器,返回上级目录,运行以下命令:

                      docker compose down cd -
                      docker compose down cd -
                      docker compose down cd -

                    Option 2: 将 TiDB(自托管)与 ProxySQL 集成

                    此方案中,你将使用 TiDBProxySQL 的 Docker 镜像搭建环境。你也可以尝试 其他安装 TiDB(自托管)的方法

                    以下步骤将在端口 60334000 上部署 ProxySQL 和 TiDB,请确保这些端口可用。

                    1. 启动 Docker。如果已启动,可跳过此步骤:

                        双击已安装的 Docker 图标启动。

                        systemctl start docker

                        双击已安装的 Docker 图标启动。

                      • 克隆 集成示例代码仓库

                          git clone https://github.com/pingcap-inc/tidb-proxysql-integration.git
                          git clone https://github.com/pingcap-inc/tidb-proxysql-integration.git
                          git clone https://github.com/pingcap-inc/tidb-proxysql-integration.git
                        • 拉取最新的 ProxySQL 和 TiDB 镜像:

                            cd tidb-proxysql-integration && docker compose pull
                            cd tidb-proxysql-integration && docker compose pull
                            cd tidb-proxysql-integration && docker compose pull
                          • 启动包含 TiDB 和 ProxySQL 的集成环境:

                              docker compose up -d
                              docker compose up -d
                              docker compose up -d

                              你可以使用 root 用户名,空密码,连接到 ProxySQL 6033 端口。

                            • 连接到 TiDB 通过 ProxySQL:

                                mysql -u root -h 127.0.0.1 -P 6033
                                mysql -u root -h 127.0.0.1 -P 6033
                                mysql -u root -h 127.0.0.1 -P 6033
                              • 连接成功后,可以用以下 SQL 语句验证连接:

                                SELECT VERSION();

                                如果显示了 TiDB 版本信息,说明你已成功通过 ProxySQL 连接到你的 TiDB 容器。

                              • 若要停止并删除容器,返回上级目录,运行以下命令:

                                  docker compose down cd -
                                  docker compose down cd -
                                  docker compose down cd -

                                文档内容是否有帮助?