本方案结合Nginx Proxy Manager的负载均衡和反向代理能力,配合数据库主从复制架构,构建一个高可用性的数据库访问层。该方案特别适合Web应用需要高可用数据库访问的场景。
主服务器配置(my.cnf):
[mysqld]
server-id = 1
log_bin = mysql-bin
binlog_format = ROW
binlog_do_db = your_database
从服务器配置(my.cnf):
[mysqld]
server-id = 2
relay_log = mysql-relay-bin
read_only = 1
设置复制流程: 1. 在主服务器创建复制用户 2. 获取主服务器二进制日志位置 3. 在从服务器配置连接到主服务器
安装方式:
docker run -d \
--name=nginx-proxy-manager \
-p 80:80 \
-p 81:81 \
-p 443:443 \
-v /data/nginx-proxy-manager/data:/data \
-v /data/nginx-proxy-manager/letsencrypt:/etc/letsencrypt \
jc21/nginx-proxy-manager:latest
示例配置(高级选项):
upstream database_cluster {
# 主数据库服务器
server master_db:3306 weight=3;
# 从数据库服务器
server slave1_db:3306;
server slave2_db:3306;
# 健康检查
check interval=3000 rise=2 fall=3 timeout=1000;
}
server {
listen 3306;
proxy_pass database_cluster;
# 读写分离规则
if ($request_method !~* "GET|SELECT") {
set $upstream master_db:3306;
}
}
健康检查脚本示例:
#!/bin/bash
# 检查主数据库
if ! mysql -h master_db -u health_check -p密码 -e "SELECT 1" >/dev/null 2>&1; then
# 主库不可用,提升从库
mysql -h slave1_db -u root -p密码 -e "STOP SLAVE; RESET MASTER"
# 更新Nginx配置
sed -i 's/server master_db:3306.*/# server master_db:3306 (down)/' /etc/nginx/conf.d/db.conf
nginx -s reload
fi
此方案通过将Nginx Proxy Manager作为数据库访问的统一入口,有效管理了数据库集群的流量分配和故障转移,为应用提供了高可用的数据库访问层。