mysql读写分离中间件Atlas安装部署及使用

以下是关于 Atlas 中间件更详细的操作指南,包括安装配置、高级功能、故障处理等内容:

一、完整安装步骤

1. 环境依赖

Atlas 基于 mysql-proxy 开发,需依赖 libeventlua

bash 复制代码
# CentOS 安装依赖
yum install -y libevent libevent-devel lua lua-devel

# Ubuntu 安装依赖
apt-get install -y libevent-dev lua5.1 liblua5.1-dev
2. 下载与安装
bash 复制代码
# 下载 Atlas(以 2.2.1 版本为例)
wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm

# 安装(RPM 包)
rpm -ivh Atlas-2.2.1.el6.x86_64.rpm

# 安装目录默认在 /usr/local/mysql-proxy

二、配置文件详解(test.cnf)

完整配置示例及说明:

ini 复制代码
[mysql-proxy]
# 基础配置
daemon = true                  # 后台运行
keepalive = true               # 自动重启进程
pid-file = /var/run/atlas.pid  # PID 文件路径
log-level = message            # 日志级别(debug|info|message|warning|error)
log-path = /usr/local/mysql-proxy/logs  # 日志目录
proxy-address = 0.0.0.0:1234   # 代理端口(客户端连接用)
admin-address = 0.0.0.0:2345   # 管理接口端口

# 后端数据库配置
proxy-backend-addresses = 192.168.1.100:3306  # 主库(可写)
proxy-read-only-backend-addresses = 192.168.1.101:3306@1,192.168.1.102:3306@2  # 从库(@后为权重,越大被选中概率越高)

# 账号配置
admin-username = admin         # 管理接口用户名
admin-password = 123456        # 管理接口密码
pwds = test:3yb5jEku5h4=,root:xxxxxx  # 客户端连接密码(格式:用户名:加密密码,多个用逗号分隔)

# 高级配置
charset = utf8                 # 默认字符集
worker-threads = 8             # 工作线程数(建议与 CPU 核心数一致)
sql-log = ON                   # 开启 SQL 日志(记录所有执行的 SQL)
proxy-skip-profiling = false   # 开启 SQL 分析(用于慢查询监控)
slow-log-threshold = 1000      # 慢查询阈值(毫秒)
密码加密方法

客户端密码需通过 Atlas 自带工具加密:

bash 复制代码
/usr/local/mysql-proxy/bin/encrypt 明文密码
# 示例:加密密码 "test123"
/usr/local/mysql-proxy/bin/encrypt test123
# 输出加密后的字符串,填入配置文件的 pwds 字段

三、启动与状态管理

1. 启动 Atlas
bash 复制代码
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/test.cnf
2. 验证启动状态
bash 复制代码
# 检查进程
ps -ef | grep mysql-proxy | grep -v grep

# 检查端口监听
netstat -tlnp | grep -E "1234|2345"  # 1234 是代理端口,2345 是管理端口
3. 优雅重启与停止
bash 复制代码
# 重启(通过管理接口)
mysql -h127.0.0.1 -P2345 -uadmin -p123456 -e "reload"

# 停止(通过管理接口)
mysql -h127.0.0.1 -P2345 -uadmin -p123456 -e "kill proxy"

四、管理接口高级操作

连接管理接口后,支持以下高级命令:

1. 后端数据库管理
sql 复制代码
-- 查看所有后端数据库状态(id、地址、类型、状态、权重)
select * from backends;

-- 添加从库(权重为3)
add slave 192.168.1.103:3306@3;

-- 移除从库(通过地址)
remove slave 192.168.1.103:3306;

-- 临时禁用主库(仅读模式)
disable backend 0;  # 主库 id 固定为 0

-- 恢复主库写入
enable backend 0;
2. 客户端连接管理
sql 复制代码
-- 查看当前客户端连接
show clients;

-- 强制断开某个客户端(通过 client_id)
kill client 123;  # 123 为客户端 ID
3. 配置动态更新
sql 复制代码
-- 查看当前配置
show variables;

-- 修改慢查询阈值(临时生效,重启后失效)
set slow-log-threshold = 2000;

-- 永久生效需修改配置文件并 reload
4. SQL 日志与分析
sql 复制代码
-- 查看最近的慢查询
show slowlog;

-- 清空慢查询日志
clear slowlog;

五、读写分离原理与验证

1. 读写分离规则
  • 写操作INSERT/UPDATE/DELETE/ALTER 等语句自动发往主库
  • 读操作SELECT 语句自动分发到从库(可通过 /*master*/ 强制走主库)
2. 验证读写分离
bash 复制代码
# 连接 Atlas 代理
mysql -h127.0.0.1 -P1234 -utest -ptest123

# 执行写操作(主库)
insert into test.t1(id) values(1);

# 执行读操作(从库)
select * from test.t1;

# 强制读主库
select /*master*/ * from test.t1;
3. 分表分库配置(进阶)

Atlas 支持按规则分表分库,例如按 ID 范围分表:

ini 复制代码
# 在配置文件中添加
tables = test.t1:id:1000  # 表 test.t1 按 id 分表,每 1000 条数据一张表
dest_db_pattern = test_%d  # 目标库名格式(如 test_0, test_1)

六、故障处理与监控

1. 常见问题排查
  • 连接失败:检查 Atlas 进程是否启动、端口是否开放、密码是否正确
  • 读写异常 :查看日志 logs/mysql-proxy.log,检查主从同步状态
  • 从库延迟 :通过 show slave status 在从库查看同步延迟,调整从库权重
2. 监控指标
  • 后端数据库连接数:select * from backends 中的 connections 字段
  • 客户端连接数:show clients 统计
  • 慢查询数量:show slowlog 或分析日志文件

七、高可用配置

  1. 主库故障自动切换:结合 MHA 或 Keepalived 实现主库故障时自动切换到备用主库
  2. Atlas 集群:部署多个 Atlas 节点,前端通过负载均衡(如 Nginx)分发请求
  3. 配置文件备份 :定期备份 test.cnf,避免配置丢失

通过以上详细操作,可以充分利用 Atlas 实现 MySQL 的读写分离、负载均衡和分表分库,提升数据库架构的稳定性和性能。

相关推荐
数智启示录6 分钟前
Apache Kafka 幂等 Producer 的边界:Exactly-Once 到了 MySQL 为什么失效 【Kafka合集】
数据库·经验分享·分布式·mysql·面试·kafka·apache
Java小白笔记8 分钟前
Java 实现阿里云 OSS 文件上传链路:普通上传、秒传、分片与断点续传
java·开发语言·数据库·spring·阿里云
—Miss. Z—9 分钟前
计算机三级数据库技术—填空题
数据库·mysql
姚不倒12 分钟前
HAProxy 系列(四):多中间件统一 VIP 入口 — 架构模式与最佳实践
运维·中间件·架构·haproxy
数智启示录34 分钟前
Apache Kafka 同 Key 仍会乱序:从分区 Offset 到业务可见的四道边界 【Kafka 合集】
大数据·数据库·经验分享·分布式·面试·kafka·apache
烬羽1 小时前
给 Agent 一个检索式记忆:把对话历史存进 Milvus,该记的都记得
javascript·数据库·agent
星云API技术支持1 小时前
企业微信二次开发外部群:群聊数据与联系人信息如何建立关联
数据库·php·企业微信
我不是程序员三三1 小时前
桌面管理软件哪个最好?从一次上线翻车事故,拆解选型评估与配置落地全流程
数据库
落木萧萧8251 小时前
MyBatis 关联查询的四种写法,为什么最后都变回了手写 XML
java·数据库·后端
春风解人意1 小时前
从零开始学习嵌入式P35----数据库
数据库·嵌入式硬件·学习