温馨提示×

centos中sqladmin集群搭建指南

小樊
40
2025-12-07 18:57:30
栏目: 云计算

CentOS 上 SQL Admin 集群搭建指南

一 架构与名词澄清

  • SQL Admin通常是MySQLWeb 管理工具(常被误写为“sqladmin”),本身不承担数据库高可用,适合作为管理入口。
  • 要实现“集群”,应区分两类目标:
    • 数据库层高可用:如MySQL 主从复制NDB Cluster等。
    • 管理入口高可用:部署多个 SQL Admin 实例 + 负载均衡/虚拟 IP(VIP),避免单点。
  • 本文给出在CentOS上同时实现“数据库层高可用”和“SQL Admin 入口高可用”的可落地方案与步骤。

二 方案总览

  • 数据库层(两种常见做法,二选一或混合):
    • MySQL 主从复制:一主一从或一主多从,读写分离,主库故障需手动/半自动切换。
    • MySQL NDB Cluster:多数据节点+管理节点,具备自动分片多副本能力,适合高并发与高可用场景。
  • 管理入口(SQL Admin 集群):
    • 部署2 台或以上SQL Admin 节点,前置Nginx/HAProxy + Keepalived提供VIP健康检查,实现故障自动漂移。
    • 所有节点统一连接数据库 VIP或各自连接后端库,并在 SQL Admin 中配置多主机登录。

三 数据库层部署

  • 方案 A MySQL 主从复制(入门与通用)
    • 准备两台数据库节点:db-master(192.168.1.11)db-slave(192.168.1.12)
    • 安装与初始化(两台均执行):
      • 更新与安装:sudo yum update -y && sudo yum install -y mysql-server
      • 启动与自启:sudo systemctl start mysqld && sudo systemctl enable mysqld
      • 安全初始化:sudo mysql_secure_installation
    • 主库配置(/etc/my.cnf 或 /etc/mysql/my.cnf):
      • 在 [mysqld] 下添加:
        • server-id=1
        • log_bin=/var/log/mysql/mysql-bin.log
        • binlog_do_db=your_db(可选,按需)
        • auto_increment_increment=2
        • auto_increment_offset=1
      • 重启:sudo systemctl restart mysqld
    • 从库配置(/etc/my.cnf):
      • 在 [mysqld] 下添加:
        • server-id=2
        • relay_log=/var/log/mysql/mysql-relay-bin.log
        • log_bin=/var/log/mysql/mysql-bin.log
        • binlog_do_db=your_db(与主库一致)
        • auto_increment_increment=2
        • auto_increment_offset=2
        • read_only=1
      • 重启:sudo systemctl restart mysqld
    • 建立复制账号与同步:
      • 主库执行:
        • CREATE USER 'replicator'@'%' IDENTIFIED BY 'StrongPass!';
        • GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
        • FLUSH PRIVILEGES;
        • SHOW MASTER STATUS;(记录 File 与 Position)
      • 从库执行(替换为实际值):
        • CHANGE MASTER TO MASTER_HOST='192.168.1.11', MASTER_USER='replicator', MASTER_PASSWORD='StrongPass!', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
        • START SLAVE;
        • SHOW SLAVE STATUS\G(确保 Slave_IO_RunningSlave_IO_Running 均为 Yes
    • 防火墙放行:sudo firewall-cmd --permanent --add-port=3306/tcp && sudo firewall-cmd --reload
  • 方案 B MySQL NDB Cluster(高可用与分片)
    • 拓扑示例:
      • 管理节点 mgmd:192.168.1.10
      • 数据节点 ndbd1:192.168.1.11,ndbd2:192.168.1.12
      • SQL 节点 mysqld1:192.168.1.11,mysqld2:192.168.1.12
    • 管理节点配置(/var/lib/mysql-cluster/config.ini):
      • 示例:
        • [NDBD DEFAULT] NoOfReplicas=2
        • [MYSQLD DEFAULT]
        • [NDB_MGMD DEFAULT]
        • [TCP DEFAULT]
        • [NDB_MGMD] HostName=192.168.1.10
        • [NDBD] HostName=192.168.1.11 DataDir=/var/lib/mysql-cluster
        • [NDBD] HostName=192.168.1.12 DataDir=/var/lib/mysql-cluster
        • [MYSQLD] [MYSQLD]
      • 启动管理节点:ndb_mgmd -f /var/lib/mysql-cluster/config.ini
    • 数据节点与 SQL 节点配置(/etc/my.cnf):
      • 在 [mysqld] 与 [mysql_cluster] 下添加:
        • ndbcluster
        • ndb-connectstring=192.168.1.10
      • 首次初始化数据节点:/usr/local/mysql/bin/ndbd --initial(仅首次)
      • 启动 MySQL:/etc/init.d/mysqld start
    • 验证集群:ndb_mgm 进入控制台,执行 show 查看节点状态。

四 SQL Admin 集群部署

  • 准备两台管理节点:adm-01(192.168.1.21)adm-02(192.168.1.22),安装 Web 与 PHP:
    • sudo yum install -y httpd php php-mysql php-mbstring php-xml
    • 启动与自启:sudo systemctl start httpd && sudo systemctl enable httpd
    • 防火墙放行:sudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload
  • 部署 SQL Admin(两台相同操作):
    • 下载并解压至 Web 根目录(示例:/var/www/html/sqladmin
    • 配置(config.inc.php):
      • 设置强密钥:$cfg['blowfish_secret'] = '随机长字符串';
      • 可按需配置语言:$cfg['DefaultLang'] = 'en';
  • 负载均衡与 VIP(HAProxy + Keepalived)
    • 安装:sudo yum install -y haproxy keepalived
    • HAProxy 示例(/etc/haproxy/haproxy.cfg,监听 80,后端指向两台 SQL Admin):
      • frontend http-in
        • bind 192.168.1.100:80
        • default_backend sqladmin_nodes
      • backend sqladmin_nodes
        • balance roundrobin
        • server adm01 192.168.1.21:80 check
        • server adm02 192.168.1.22:80 check
    • Keepalived 示例(/etc/keepalived/keepalived.conf,主机 adm-01 为 MASTER,adm-02 为 BACKUP):
      • 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 }
        • }
      • 启动:sudo systemctl start haproxy && sudo systemctl enable haproxy
      • 启动:sudo systemctl start keepalived && sudo systemctl enable keepalived
  • 访问与管理:
    • 通过 http://192.168.1.100/sqladmin 访问
    • 在 SQL Admin 中创建只读账号或分权账号,分别连接后端数据库(主从或 NDB 集群节点),避免直接使用 root。

五 安全与运维要点

  • 账户与权限
    • 禁止在生产使用 root 远程登录;为 SQL Admin 创建最小权限账号(如仅授予目标库/表的 SELECT/INSERT/UPDATE/DELETE)。
  • 防火墙与 SELinux
    • 仅开放必要端口:80/443(管理入口)、3306(数据库)、1186(NDB 管理,如使用 NDB)、4369/节点间端口(NDB,如使用 NDB)。
    • 不建议直接关闭 SELinux,按需设置策略或日志审计。
  • 加密与传输
    • 建议启用 TLS/HTTPS(Nginx/Apache),数据库启用 SSL/TLS 连接。
  • 备份与恢复
    • 主从:定期 mysqldump 全量 + 增量 binlog 备份;NDB:使用 ndbbackup
    • 定期做恢复演练,验证备份有效性。
  • 监控与告警
    • 监控 MySQL 错误日志(/var/log/mysqld.log)、复制状态、连接数、慢查询。
    • 结合 Prometheus + Grafana 做可视化监控与阈值告警。

0