首页主机资讯MariaDB在Ubuntu上的高可用性如何实现

MariaDB在Ubuntu上的高可用性如何实现

时间2025-11-07 16:00:04发布访客分类主机资讯浏览896
导读:MariaDB在Ubuntu上的高可用性实现方案 1. 使用MariaDB Galera Cluster(多主同步集群) MariaDB Galera Cluster是多主同步复制解决方案,支持任意节点读写、自动数据同步、故障自动转移和强一...

MariaDB在Ubuntu上的高可用性实现方案

1. 使用MariaDB Galera Cluster(多主同步集群)

MariaDB Galera Cluster是多主同步复制解决方案,支持任意节点读写、自动数据同步、故障自动转移和强一致性,是企业级高可用的主流选择。
前提条件:至少3台Ubuntu服务器(建议奇数节点,如3/5台),MariaDB版本≥10.1,Galera库版本匹配。
配置步骤

  • 安装MariaDB与Galera插件:在所有节点执行sudo apt update & & sudo apt install mariadb-server mariadb-client galera-3,安装MariaDB及Galera依赖。
  • 配置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用户及密码(需提前创建)
    
  • 初始化集群:在第一个节点上执行以下命令创建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),则集群部署成功。

2. 使用MariaDB主从复制(Master-Slave)

主从复制是异步多主/单主解决方案,适合读扩展和基础高可用(需额外工具实现故障转移)。
配置步骤

  • 配置主服务器(Master)
    编辑/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;
        
    
    获取主服务器状态(记录FilePosition,后续从服务器需要):
    SHOW MASTER STATUS;
        
    
  • 配置从服务器(Slave)
    编辑/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_RunningSlave_SQL_Running是否为Yes,表示复制正常。

3. 使用Keepalived+LVS(负载均衡+故障转移)

Keepalived通过VRRP协议实现虚拟IP(VIP)漂移,LVS(Linux Virtual Server)实现负载均衡,组合方案可提升数据库的可用性和并发处理能力。
配置步骤

  • 安装软件:在所有节点执行sudo apt update & & sudo apt install keepalived lvs-tools
  • 配置Keepalived:编辑主节点的/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改为BACKUPpriority改为更低值(如90)。
  • 配置LVS:使用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自动漂移至备节点,实现故障转移。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: MariaDB在Ubuntu上的高可用性如何实现
本文地址: https://pptw.com/jishu/745200.html
Debian上Node.js如何日志管理 Ubuntu如何配置MariaDB主从复制

游客 回复需填写必要信息