You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将rc.local中的pt-kill守护进程以Docker方式部署?

将pt-kill守护进程迁移至Docker部署的方案

核心思路

原来的pt-kill通过--daemonize后台运行,迁移到Docker时需要调整为前台运行(容器依赖主进程存活),同时用环境变量传递敏感配置,遵循Docker单进程原则为每个数据库实例创建独立容器。


步骤1:选择基础镜像

直接使用Percona官方提供的预装Percona Toolkit的镜像,无需手动安装:

percona/percona-toolkit:latest

步骤2:单实例Docker运行命令

针对db-1和db-2分别启动独立容器,用环境变量传递数据库密码(避免硬编码):

启动针对db-1的容器

docker run -d --name pt-kill-db1 \
  --restart=always \
  -e DB_PASSWORD="your_db_password" \
  percona/percona-toolkit \
  pt-kill --rds --match-command Query --victims all --match-user phppoint --busy-time 30 --kill --print \
  h=db-1,u=master,p=${DB_PASSWORD},P=3306

启动针对db-2的容器

docker run -d --name pt-kill-db2 \
  --restart=always \
  -e DB_PASSWORD="your_db_password" \
  percona/percona-toolkit \
  pt-kill --rds --match-command Query --victims all --match-user phppoint --busy-time 30 --kill --print \
  h=db-2,u=master,p=${DB_PASSWORD},P=3306
  • --restart=always:容器退出时自动重启,保证服务可用性。
  • 移除了原命令中的--daemonize,让pt-kill前台运行,确保容器持续存活。

步骤3:更规范的Dockerfile方式

如果需要自定义镜像(比如添加健康检查),可以编写Dockerfile:

FROM percona/percona-toolkit:latest

# 设置默认配置(可通过运行时环境变量覆盖)
ENV DB_HOST=db-1
ENV DB_USER=master
ENV DB_PASSWORD=""
ENV DB_PORT=3306

# 健康检查:定期验证pt-kill能否连接数据库
HEALTHCHECK --interval=5m --timeout=3s \
  CMD pt-kill --test --rds h=${DB_HOST},u=${DB_USER},p=${DB_PASSWORD},P=${DB_PORT} || exit 1

# 前台启动pt-kill
CMD ["pt-kill", "--rds", "--match-command", "Query", "--victims", "all", "--match-user", "phppoint", "--busy-time", "30", "--kill", "--print", "h=${DB_HOST},u=${DB_USER},p=${DB_PASSWORD},P=${DB_PORT}"]

构建并运行镜像

# 构建镜像
docker build -t custom-pt-kill .

# 运行db-1实例
docker run -d --name pt-kill-db1 \
  --restart=always \
  -e DB_HOST=db-1 \
  -e DB_PASSWORD="your_db_password" \
  custom-pt-kill

# 运行db-2实例
docker run -d --name pt-kill-db2 \
  --restart=always \
  -e DB_HOST=db-2 \
  -e DB_PASSWORD="your_db_password" \
  custom-pt-kill

关键注意事项

  1. 网络连通性:确保Docker容器能访问目标数据库db-1和db-2。如果数据库在Docker集群内,需将容器加入同一自定义网络;如果是外部数据库,需保证容器网络路由可达。
  2. 日志查看:pt-kill的--print输出会直接进入Docker日志,可通过docker logs pt-kill-db1查看,替代原后台运行的日志文件。
  3. 敏感信息管理:生产环境建议用Docker Secrets或K8s Secrets传递密码,避免直接在命令行暴露密码。

内容的提问来源于stack exchange,提问作者Chris Muench

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:25:49