Ubuntu中SQLAdmin集群部署指南(基于MySQL主从+Keepalived高可用)
SQLAdmin本身是一个数据库管理工具,其集群部署本质是通过数据库集群(如MySQL主从复制)实现数据冗余,再结合高可用组件(如Keepalived)避免单点故障。以下是详细步骤:
sudo apt update && sudo apt upgrade -y
sudo apt install mysql-server mysql-client keepalived -y
/etc/mysql/mysql.conf.d/mysqld.cnf(或/etc/mysql/my.cnf),开启二进制日志并设置唯一server-id(主从节点ID必须不同)。[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = your_database_name # 指定同步的数据库(可选,留空则同步所有)
auto_increment_increment = 2 # 主从节点ID增量(节点数+1)
auto_increment_offset = 1 # 主节点起始ID
sudo systemctl restart mysql
CREATE USER 'replicator'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
File(日志文件名)和Position(日志位置),后续从节点需使用。SHOW MASTER STATUS;
/etc/mysql/mysql.conf.d/mysqld.cnf,设置server-id(与主节点不同)、开启中继日志并设置为只读(防止误操作)。[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_database_name # 与主节点一致
read_only = 1 # 只读模式(管理员可临时关闭)
sudo systemctl restart mysql
CHANGE MASTER TO
MASTER_HOST='主节点IP',
MASTER_USER='replicator',
MASTER_PASSWORD='StrongPassword123!',
MASTER_LOG_FILE='记录的File值',
MASTER_LOG_POS=记录的Position值;
START SLAVE; -- 启动同步
Slave_IO_Running和Slave_SQL_Running均为Yes(表示同步正常)。SHOW SLAVE STATUS\G
-- 主节点操作
USE your_database_name;
INSERT INTO test_table (name) VALUES ('test_data');
-- 从节点查询
SELECT * FROM test_table; -- 应看到同步的数据
/etc/keepalived/keepalived.conf,定义虚拟IP(VIP)和故障转移策略(主节点优先,从节点备选)。vrrp_instance VI_1 {
state MASTER # 主节点设为MASTER,从节点设为BACKUP
interface eth0 # 网络接口(根据实际情况调整,如ens33)
virtual_router_id 51 # 集群唯一ID(1-255)
priority 100 # 主节点优先级高于从节点(如主100,从90)
advert_int 1 # 心跳间隔(秒)
authentication {
auth_type PASS
auth_pass 42 # 主从节点密码一致
}
virtual_ipaddress {
192.168.1.100 # 虚拟IP(集群访问入口)
}
}
sudo systemctl restart keepalived
ip addr show eth0 | grep 192.168.1.100
sudo systemctl stop mysql
ip addr命令确认)。priority或手动切换)。sudo tail -f /var/log/mysql/error.log
sudo tail -f /var/log/keepalived/keepalived.log
mysqldump),避免数据丢失。注意事项:
read_only模式可根据需求调整(如允许特定用户写入);virtual_router_id需在集群内唯一;