MariaDB在Ubuntu上的高可用性实现方案
MariaDB Galera Cluster是多主同步复制解决方案,支持任意节点读写、自动数据同步、故障自动转移和强一致性,是企业级高可用的主流选择。
前提条件:至少3台Ubuntu服务器(建议奇数节点,如3/5台),MariaDB版本≥10.1,Galera库版本匹配。
配置步骤:
sudo apt update && sudo apt install mariadb-server mariadb-client galera-3,安装MariaDB及Galera依赖。/etc/mysql/conf.d/galera.cnf(或/etc/mysql/mariadb.conf.d/50-server.cnf),添加以下核心配置:[mysqld]
bind-address = 0.0.0.0 # 允许远程连接
wsrep_provider = /usr/lib/galera/libgalera_smm.so # Galera库路径
wsrep_cluster_address = gcomm://<node1_ip>,<node2_ip>,<node3_ip> # 所有节点IP列表
wsrep_node_address = <current_node_ip> # 当前节点IP
wsrep_node_name = <node1> # 当前节点名称(自定义)
wsrep_sst_method = xtrabackup-v2 # 数据同步方法(推荐xtrabackup)
wsrep_sst_auth = sst_user:sst_password # SST用户及密码(需提前创建)
CREATE USER 'sst_user'@'%' IDENTIFIED BY 'sst_password';
GRANT ALL PRIVILEGES ON *.* TO 'sst_user'@'%';
FLUSH PRIVILEGES;
然后重启MariaDB服务:sudo systemctl restart mariadb。wsrep_cluster_address为完整节点列表,重启MariaDB即可自动加入集群。SHOW STATUS LIKE 'wsrep_cluster_size';,若返回值等于节点数量(如3),则集群部署成功。主从复制是异步多主/单主解决方案,适合读扩展和基础高可用(需额外工具实现故障转移)。
配置步骤:
/etc/mysql/mysql.conf.d/mysqld.cnf,添加:[mysqld]
server-id = 1 # 唯一ID(主从不同)
log_bin = /var/log/mysql/mysql-bin.log # 开启二进制日志
auto_increment_increment = 2 # 主从ID增量(节点数)
auto_increment_offset = 1 # 主节点起始ID
重启MariaDB:sudo systemctl restart mariadb。CREATE USER 'replicator'@'%' IDENTIFIED BY 'replicator_password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
获取主服务器状态(记录File和Position,后续从服务器需要):SHOW MASTER STATUS;
/etc/mysql/mysql.conf.d/mysqld.cnf,添加:[mysqld]
server-id = 2 # 唯一ID
relay_log = /var/log/mysql/mysql-relay-bin.log # 中继日志
read_only = 1 # 设置为只读(可选)
重启MariaDB:sudo systemctl restart mariadb。CHANGE MASTER TO
MASTER_HOST = 'master_ip',
MASTER_USER = 'replicator',
MASTER_PASSWORD = 'replicator_password',
MASTER_LOG_FILE = 'mysql-bin.000001', # 主服务器记录的File
MASTER_LOG_POS = 154; # 主服务器记录的Position
START SLAVE;
SHOW SLAVE STATUS\G,检查Slave_IO_Running和Slave_SQL_Running是否为Yes,表示复制正常。Keepalived通过VRRP协议实现虚拟IP(VIP)漂移,LVS(Linux Virtual Server)实现负载均衡,组合方案可提升数据库的可用性和并发处理能力。
配置步骤:
sudo apt update && sudo apt install keepalived lvs-tools。/etc/keepalived/keepalived.conf:vrrp_instance VI_1 {
state MASTER # 主节点为MASTER,备节点为BACKUP
interface eth0 # 网卡名称(ifconfig查看)
virtual_router_id = 51 # 虚拟路由ID(同一网络唯一)
priority = 100 # 主节点优先级(高于备节点,如备节点设为90)
advert_int = 1 # 心跳间隔(秒)
authentication {
auth_type PASS
auth_pass 1234 # 心跳认证密码
}
virtual_ipaddress {
192.168.1.100 # 虚拟IP(VIP,客户端连接此IP)
}
}
备节点将state改为BACKUP,priority改为更低值(如90)。ipvsadm配置负载均衡规则(以轮询为例):sudo ipvsadm -A -t 192.168.1.100:3306 -s rr # 添加虚拟服务(VIP:端口,轮询算法)
sudo ipvsadm -a -t 192.168.1.100:3306 -r master_ip:3306 -m # 添加主节点真实IP(masquerade模式)
sudo ipvsadm -a -t 192.168.1.100:3306 -r slave_ip:3306 -m # 添加从节点真实IP
sudo systemctl start keepalived,VIP将绑定到主节点。若主节点故障,VIP自动漂移至备节点,实现故障转移。