mysql读写分离中间件Atlas安装部署及使用
以下是关于 Atlas 中间件更详细的操作指南,包括安装配置、高级功能、故障处理等内容:
一、完整安装步骤
1. 环境依赖
Atlas 基于 mysql-proxy
开发,需依赖 libevent
和 lua
:
# CentOS 安装依赖
yum install -y libevent libevent-devel lua lua-devel# Ubuntu 安装依赖
apt-get install -y libevent-dev lua5.1 liblua5.1-dev
2. 下载与安装
# 下载 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)
完整配置示例及说明:
[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 自带工具加密:
/usr/local/mysql-proxy/bin/encrypt 明文密码
# 示例:加密密码 "test123"
/usr/local/mysql-proxy/bin/encrypt test123
# 输出加密后的字符串,填入配置文件的 pwds 字段
三、启动与状态管理
1. 启动 Atlas
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/test.cnf
2. 验证启动状态
# 检查进程
ps -ef | grep mysql-proxy | grep -v grep# 检查端口监听
netstat -tlnp | grep -E "1234|2345" # 1234 是代理端口,2345 是管理端口
3. 优雅重启与停止
# 重启(通过管理接口)
mysql -h127.0.0.1 -P2345 -uadmin -p123456 -e "reload"# 停止(通过管理接口)
mysql -h127.0.0.1 -P2345 -uadmin -p123456 -e "kill proxy"
四、管理接口高级操作
连接管理接口后,支持以下高级命令:
1. 后端数据库管理
-- 查看所有后端数据库状态(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. 客户端连接管理
-- 查看当前客户端连接
show clients;-- 强制断开某个客户端(通过 client_id)
kill client 123; # 123 为客户端 ID
3. 配置动态更新
-- 查看当前配置
show variables;-- 修改慢查询阈值(临时生效,重启后失效)
set slow-log-threshold = 2000;-- 永久生效需修改配置文件并 reload
4. SQL 日志与分析
-- 查看最近的慢查询
show slowlog;-- 清空慢查询日志
clear slowlog;
五、读写分离原理与验证
1. 读写分离规则
- 写操作:
INSERT
/UPDATE
/DELETE
/ALTER
等语句自动发往主库 - 读操作:
SELECT
语句自动分发到从库(可通过/*master*/
强制走主库)
2. 验证读写分离
# 连接 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 范围分表:
# 在配置文件中添加
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
或分析日志文件
七、高可用配置
- 主库故障自动切换:结合 MHA 或 Keepalived 实现主库故障时自动切换到备用主库
- Atlas 集群:部署多个 Atlas 节点,前端通过负载均衡(如 Nginx)分发请求
- 配置文件备份:定期备份
test.cnf
,避免配置丢失
通过以上详细操作,可以充分利用 Atlas 实现 MySQL 的读写分离、负载均衡和分表分库,提升数据库架构的稳定性和性能。