如何在CentOS上实现SQLAdmin的高可用性
导读:在CentOS上实现 SQLAdmin 的高可用 架构总览 将SQLAdmin定位为无状态的管理前端,通过Nginx/Keepalived提供VIP与L4/L7负载均衡,后端对接至少2台数据库节点(MySQL 主从或集群)。 数据库层负责...
在CentOS上实现 SQLAdmin 的高可用
架构总览
- 将SQLAdmin定位为无状态的管理前端,通过Nginx/Keepalived提供VIP与L4/L7负载均衡,后端对接至少2台数据库节点(MySQL 主从或集群)。
- 数据库层负责可用性与数据一致性;SQLAdmin层负责高可用接入、会话保持与健康检查。
- 建议开放端口:80/443(SQLAdmin)、3306(MySQL,仅限内网/VIP访问)、8443/10000(Keepalived VRRP,可选)。
前置条件与组件
- 操作系统:CentOS 7/8(已配置 EPEL 与基础仓库)。
- 数据库:至少2台 MySQL(建议主从复制;也可替换为 InnoDB Cluster/MGR)。
- 负载均衡与健康检查:Nginx(HTTP/HTTPS 反向代理与负载均衡)、Keepalived(VIP 漂移与主机存活检测)。
- Web 与 PHP 环境(若使用 phpMyAdmin 类工具):httpd/php-fpm,并准备 SQLAdmin 的配置文件与目录。
部署步骤
-
数据库高可用(MySQL 主从示例)
- 主库配置(/etc/my.cnf 或 /etc/mysql/my.cnf):启用二进制日志与唯一 server-id。
- [mysqld] 段示例:server-id=1;log_bin=/var/log/mysql/mysql-bin.log。
- 从库配置:server-id=2;relay_log=/var/log/mysql/mysql-relay-bin.log;read_only=1。
- 建立复制账号并初始化复制:
- 主库:CREATE USER ‘replicator’@‘%’ IDENTIFIED BY ‘password’; GRANT REPLICATION SLAVE ON . TO ‘replicator’@‘%’; FLUSH PRIVILEGES;
- 主库:SHOW MASTER STATUS; 记录 File/Position。
- 从库:CHANGE MASTER TO MASTER_HOST=‘master_ip’, MASTER_USER=‘replicator’, MASTER_PASSWORD=‘password’, MASTER_LOG_FILE=‘file’, MASTER_LOG_POS=position; START SLAVE;
- 验证:SHOW SLAVE STATUS\G 中 Slave_IO_Running/Slave_SQL_Running 均为 Yes。
- 主库配置(/etc/my.cnf 或 /etc/mysql/my.cnf):启用二进制日志与唯一 server-id。
-
部署 SQLAdmin(以 phpMyAdmin 为例)
- 安装与配置:
- 安装 EPEL 与 Web/PHP 组件(yum install -y epel-release httpd php php-mysqlnd …)。
- 部署 phpMyAdmin,编辑配置文件(如 config.inc.php)设置 $cfg[‘blowfish_secret’] 与连接白名单。
- 示例 Nginx 片段(/etc/nginx/conf.d/sqladmin.conf):
- server { listen 80; server_name sqladmin.example.com; location / { root /usr/share/phpMyAdmin; index index.php; } location ~ .php$ { include fastcgi_params; fastcgi_pass unix:/var/run/php-fpm/www.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
- 启动服务:systemctl enable --now httpd php-fpm。
- 安装与配置:
-
负载均衡与健康检查(Nginx)
- 在两台 SQLAdmin 前端节点上配置一致的 upstream,指向数据库主从或集群的读/写分离地址;启用被动健康检查与连接复用。
- 示例(/etc/nginx/conf.d/sqladmin_upstream.conf):
- upstream sqladmin_backend { server 10.0.0.11:3306 max_fails=3 fail_timeout=10s; server 10.0.0.12:3306 max_fails=3 fail_timeout=10s; }
- server { listen 33060; proxy_pass sqladmin_backend; proxy_next_upstream error timeout invalid_header http_500; proxy_connect_timeout 5s; proxy_timeout 30s; }
- 若 SQLAdmin 为 Web 管理端,则对 80/443 做反向代理与负载均衡,并在 upstream 中加入两台前端节点。
-
VIP 与故障转移(Keepalived)
- 两台前端节点安装 Keepalived,配置 VRRP 实例绑定VIP(如 192.168.1.100);state 一主一备、设置不同 priority;加入 TCP 健康检查(对本地 80/443 或 33060 端口)。
- 示例(/etc/keepalived/keepalived.conf 片段):
- vrrp_instance VI_1 { state MASTER; interface eth0; virtual_router_id 51; priority 100; advert_int 1; authentication { auth_type PASS; auth_pass 42; } virtual_ipaddress { 192.168.1.100/24; } }
- vrrp_script chk_sqladmin { script “/usr/bin/curl -f http://127.0.0.1/ || exit 1”; interval 2; weight -20; }
- track_script { chk_sqladmin; }
- 启动:systemctl enable --now keepalived。
-
安全与网络
- 仅允许内网或跳板机访问 3306/33060;为 VIP/HTTP 启用 TLS/HTTPS;为 SQLAdmin 管理账号实施最小权限与强口令策略;按需开启 SELinux 与 firewalld 并仅放行必要端口。
验证与运维
-
可用性验证
- 停止主库或拔掉主节点网线,确认 VIP 漂移至备机、Nginx 健康检查剔除故障节点、SQLAdmin 仍可通过 VIP 访问后端数据库。
- 在 SQLAdmin 中执行读写操作,验证主从复制方向正确、读操作可落到从库(如配置读写分离)。
-
监控与日志
- 持续监控 Keepalived(/var/log/messages、journalctl -u keepalived)、Nginx(access/error)、SQLAdmin/phpMyAdmin(应用日志)、MySQL(错误日志、复制状态)。
- 建议接入 Prometheus + Grafana 采集系统/数据库指标,并设置告警。
-
备份与恢复
- 定期使用 mysqldump 或物理备份工具对数据库进行全量/增量备份,并进行周期性恢复演练验证可用性。
可选增强
- 数据库层升级为高可用套件(如 InnoDB Cluster/MGR 或 Orchestrator),SQLAdmin 仍通过 VIP/负载均衡接入,降低单点风险。
- 引入 HAProxy 替代或配合 Nginx,提供更细粒度的健康检查与负载策略(如基于权重的读写分离)。
- 为 SQLAdmin 增加多因素认证、IP 白名单与操作审计,提升安全合规能力。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在CentOS上实现SQLAdmin的高可用性
本文地址: https://pptw.com/jishu/761376.html
