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 的读写分离、负载均衡和分表分库,提升数据库架构的稳定性和性能。

相关推荐
康谋自动驾驶3 小时前
ROS 传感器模块的通用架构设计与跨中间件扩展实践
中间件
牛马baby3 小时前
【mysql】in 用到索引了吗?
数据库·mysql·in
杀气丶3 小时前
L2JBR - 修复数据库编码为UTF8
数据库·sql·oracle
-Xie-3 小时前
Mysql杂志(三十)——索引失效情况
数据库·mysql
冼紫菜3 小时前
[特殊字符] 深入理解 PageHelper 分页原理:从 startPage 到 SQL 改写全过程
java·后端·sql·mysql·spring
为java加瓦3 小时前
Lombok @Data 注解在 Spring Boot 项目中的深度应用与实践指南
java·开发语言·数据库
青山撞入怀11143 小时前
sql题目练习-子查询
java·数据库·sql
程序新视界3 小时前
什么是MySQL分区?
数据库·mysql·dba
程序新视界3 小时前
实战技巧:使用冗余查询条件解锁MySQL中的索引
数据库·mysql·dba