Sign inSign up

amwpfiqvy/proxysql-admin-ui

By amwpfiqvy

Updated 20 days ago

ProxySQL 管理界面:服务器、用户、规则和变量配置。

Image
Databases & storage
0

1.6K

amwpfiqvy/proxysql-admin-ui repository overview

ProxySQL Admin UI

ProxySQL Admin UI 是一个基于 ASP.NET Core .NET 10、Razor Components 和 Interactive Server 的 ProxySQL Web 管理界面。应用通过 ProxySQL Admin 接口管理配置并读取运行统计;启用 Galera 仲裁权重功能后,会使用独立凭据直连 ProxySQL Runtime Galera 拓扑中的节点。

当前版本:v0.7

v0.7 更新

  • 项目目标框架、ASP.NET Core Identity、Entity Framework Core、测试依赖和 Docker SDK/Runtime 基础镜像统一升级到 .NET 10
  • Identity 页面采用 .NET 10 的非异常式导航行为,修正登录、注册、密码管理、邮件确认和外部登录流程中的重定向控制流
  • Swagger/OpenAPI 依赖升级到 Swashbuckle.AspNetCore 10.2.3
  • Docker 镜像继续提供 linux/amd64linux/arm64 两种架构,并发布 v0.7、带构建时间的完整版本号和 latest 标签

功能

  • 查看 ProxySQL 仪表盘、全局状态、内存统计和查询摘要
  • 管理 mysql_serversmysql_usersmysql_query_rules 和全局变量
  • 修改服务器、用户和查询规则后执行对应的 LOAD ... TO RUNTIMESAVE ... TO DISK
  • 分别查看 mainruntimedisk 三层配置;runtimedisk 为只读视图
  • 配置页支持 URL Hash 层级导航,可通过浏览器前进、后退和刷新保留当前 TAB
  • 独立查看 Replication Hostgroup 的 Writer/Reader 定义和成员关系
  • 独立查看 Galera Hostgroup 的 Writer、Backup Writer、Reader、Offline 定义和成员关系
  • 在 Galera Hostgroup 的 Runtime TAB 中读取和调整节点当前生效的 pc.weight 仲裁权重
  • 在“连接总览”中查看前端连接统计和后端连接池状态
  • 在“连接总览”中释放整个 ProxySQL 实例后端连接池中的空闲物理连接(ConnFree),不会中断正在使用的 ConnUsed 连接
  • 在“连接详情”中查看前端客户端、ProxySQL 会话、Hostgroup 与后端 MySQL 的当前绑定关系
  • 连接详情使用服务端分页,记录总数没有 200 条上限
  • 管理查询规则中的 cache_ttl,查看 ProxySQL 查询缓存全局统计,并可手动清空查询缓存
  • 提供中文和英文界面
  • 提供 /health 健康检查端点

Caution

本应用可以修改线上 ProxySQL 的路由、认证和全局变量配置,也可以修改 Galera 节点进程当前生效的仲裁权重。生产环境请限制 Web 界面访问来源,使用专用管理账号,并在执行写操作前确认 Main、Runtime、Disk 三层状态和回滚方案。

快速开始

启动容器并配置 ProxySQL Admin 连接:

docker volume create proxysql-admin-ui-data

docker run -d --restart unless-stopped \
  --name proxysql-admin-ui \
  -p 8001:8001 \
  -e APP_DB_PATH=/app/data \
  -e PAI_PROXYSQL='Server=host.docker.internal;Port=6032;Uid=radmin;Pwd=CHANGE_ME;ConnectionReset=False;Pooling=True;ConnectionLifeTime=3000000;' \
  -v proxysql-admin-ui-data:/app/data \
  amwpfiqvy/proxysql-admin-ui:v0.7

启动后访问:http://localhost:8001

host.docker.internal 用于从容器访问 Docker 宿主机上的 ProxySQL。如果 ProxySQL 位于其他服务器,请将 Server 改为实际地址;如果两者位于同一个 Docker Compose 网络,可以使用 ProxySQL 服务名。

如需启用 Galera 仲裁权重功能,再增加以下两个环境变量:

-e PAI_GALERA_USERNAME='galera_admin' \
-e PAI_GALERA_PASSWORD='CHANGE_ME'

这两个变量只提供节点管理凭据。实际节点地址来自 ProxySQL Runtime Galera Hostgroup 成员,容器必须能够访问这些节点的 MySQL 端口。

Docker Compose

services:
  proxysql-admin-ui:
    image: amwpfiqvy/proxysql-admin-ui:v0.7
    container_name: proxysql-admin-ui
    restart: unless-stopped
    ports:
      - "8001:8001"
    environment:
      ASPNETCORE_ENVIRONMENT: Production
      ASPNETCORE_URLS: http://+:8001
      APP_DB_PATH: /app/data
      PAI_PROXYSQL: Server=proxysql;Port=6032;Uid=radmin;Pwd=CHANGE_ME;ConnectionReset=False;Pooling=True;ConnectionLifeTime=3000000;
      # 以下两项可选,必须同时配置
      PAI_GALERA_USERNAME: galera_admin
      PAI_GALERA_PASSWORD: CHANGE_ME
    volumes:
      - proxysql-admin-ui-data:/app/data

volumes:
  proxysql-admin-ui-data:

如果使用绑定挂载代替命名卷,请确保挂载目录对容器运行用户可写。

首次登录

身份数据库中没有用户时,应用会创建固定用户名 admin 的 Web 管理员,并生成一个 14 位随机初始密码。密码字符范围为:

A-Z  a-z  0-9  _  %

登录页会显示初始用户名和密码。管理员成功修改密码后,初始凭据提示会自动删除。

应用不会从环境变量读取 Web 管理员用户名或固定初始密码。已有身份数据库不会在容器重启或升级时重置管理员密码。

数据持久化

APP_DB_PATH=/app/data 时,数据卷中包含:

  • db/app.db:Web 管理员身份数据库
  • db/initial-login.json:尚未修改密码时的临时初始凭据提示

升级或替换容器时应保留该数据卷。不要把 initial-login.json 上传、提交或公开;管理员修改密码后应用会自动删除它。

配置项

环境变量必需说明
PAI_PROXYSQLProxySQL Admin 连接字符串,通常使用 Admin 端口 6032
PAI_GALERA_USERNAMEGalera 节点管理用户名;与 PAI_GALERA_PASSWORD 同时配置后启用仲裁权重功能
PAI_GALERA_PASSWORDGalera 节点管理密码;与 PAI_GALERA_USERNAME 同时配置后启用仲裁权重功能
APP_DB_PATH建议身份数据库和 initial-login.json 的根目录;容器部署建议设为 /app/data 并挂载持久化卷
ASPNETCORE_URLSWeb 监听地址,镜像默认使用 8001 端口

环境变量中的双下划线 __ 对应 .NET 配置中的层级分隔符。

页面说明

  • Galera Hostgroup 的 Main TAB 管理 ProxySQL Main 配置;Runtime TAB 展示 ProxySQL 当前运行拓扑,并额外读取 Galera 节点进程当前生效的 pc.weight
  • “ProxySQL 路由权重”对应 mysql_servers.weight;“Galera 仲裁权重”对应节点 wsrep_provider_options 中的 pc.weight,两者不会互相替代。
  • Galera 仲裁权重仅在 Runtime TAB 读取和修改。相同 hostname:port 出现在多个 Hostgroup 时,一次页面刷新只读取一次并共享显示结果。
  • 修改仲裁权重前会重新校验 Runtime 成员、节点身份、集群 UUID 和旧权重;修改后再次读取并验证新权重和集群 UUID。节点的 Primary / Synced / Ready / Connected 状态仅用于展示,不作为修改条件。
  • 仲裁权重修改只影响当前 Galera 进程,不编辑节点配置文件,节点重启后可能丢失。
  • Galera 节点连接使用 TLS 优先模式;节点不支持 TLS 时允许回退到非 TLS,生产环境建议在数据库侧正确配置 TLS。
  • “连接总览”展示 ProxySQL 前端连接统计、后端物理连接总数、占用连接和空闲连接,以及各 Hostgroup 的连接池状态。
  • “连接总览”支持释放整个 ProxySQL 实例的后端空闲物理连接(ConnFree);Hostgroup 筛选只影响页面显示,不限制释放范围,正在使用的 ConnUsed 连接不会被中断。操作只临时调整 Runtime 的 mysql-free_connections_pct,不会保存到 Disk,并会恢复操作前的 Main 与 Runtime 值。
  • 释放空闲连接需要执行 LOAD MYSQL VARIABLES TO RUNTIME。如果检测到其他尚未发布的 Main MySQL 变量变更,应用会拒绝操作,避免把无关配置一并加载到 Runtime。
  • “连接详情”以 ProxySQL 前端会话为主行,展示客户端地址、Session ID、Thread ID、Hostgroup、后端地址、命令和 SQL。
  • multiplex 生效时,空闲前端会话可能暂时显示为“未绑定”;连接池中的 ConnFree 也不会强行映射到某个前端会话。
  • 连接详情采用 COUNT(*)LIMIT/OFFSET 服务端分页,10 / 20 / 50 / 100 / 200 仅表示单页行数。
  • ProxySQL 查询缓存不会因设置 mysql-query_cache_size_MB 而自动缓存所有查询。只有命中 Runtime 查询规则且规则设置 cache_ttl > 0 的查询才会进入缓存;没有缓存规则时,缓存条目、命中次数和内存占用均为 0

支持架构

架构状态
linux/amd64支持
linux/arm64支持

健康检查

GET http://localhost:8001/health

返回 HTTP 200 表示 Web 应用进程可以响应请求。该端点不检查 ProxySQL Admin 或 Galera 节点的连通性。

相关链接

Tag summary

Content type

Image

Digest

sha256:5310dada7

Size

88.3 MB

Last updated

20 days ago

docker pull amwpfiqvy/proxysql-admin-ui