首页主机资讯Ubuntu MariaDB如何进行负载均衡

Ubuntu MariaDB如何进行负载均衡

时间2025-10-29 18:57:04发布访客分类主机资讯浏览1285
导读:Ubuntu环境下MariaDB负载均衡的常见实现方法 在Ubuntu系统中,实现MariaDB负载均衡需结合复制技术(如主从复制、Galera Cluster)与负载均衡中间件(如HAProxy、ProxySQL),以下是具体步骤及关键说...

Ubuntu环境下MariaDB负载均衡的常见实现方法

在Ubuntu系统中,实现MariaDB负载均衡需结合复制技术(如主从复制、Galera Cluster)与负载均衡中间件(如HAProxy、ProxySQL),以下是具体步骤及关键说明:

一、前提:配置MariaDB复制(负载均衡的基础)

负载均衡需先将数据分布到多个节点,MariaDB支持两种主要复制模式:

1. 主从复制(Master-Slave)

  • 主服务器配置:编辑/etc/mysql/mariadb.conf.d/50-server.cnf,添加以下参数:

    [mysqld]
    server-id = 1                # 主节点唯一ID
    log_bin = /var/log/mysql/mysql-bin.log  # 开启二进制日志
    binlog_do_db = your_database_name  # 需同步的数据库名
    

    重启服务:sudo systemctl restart mariadb
    创建复制用户并授权:

    CREATE USER 'replicator'@'%' IDENTIFIED BY 'strong_password';
        
    GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
        
    FLUSH PRIVILEGES;
        
    

    查看主节点二进制日志位置(用于从节点同步):

    SHOW MASTER STATUS;
        
    
  • 从服务器配置:编辑/etc/mysql/mariadb.conf.d/50-server.cnf

    [mysqld]
    server-id = 2                # 从节点唯一ID(需与主节点不同)
    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 mariadb
    配置从节点连接主节点:

    CHANGE MASTER TO 
      MASTER_HOST='master_ip',
      MASTER_USER='replicator',
      MASTER_PASSWORD='strong_password',
      MASTER_LOG_FILE='mysql-bin.000001',  -- 替换为主节点的LOG_FILE
      MASTER_LOG_POS=107;
                         -- 替换为主节点的LOG_POS
    START SLAVE;
          -- 启动复制
    

2. Galera Cluster(多主同步)

若需真正的多主复制(所有节点可同时读写),可使用Galera Cluster(需至少3个节点):

  • 编辑每个节点的/etc/mysql/mariadb.conf.d/99-cluster.cnf
    [mysqld]
    wsrep_on=ON
    wsrep_provider=/usr/lib/galera/libgalera_smm.so
    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=rsync                                    # 数据同步方法
    
  • 初始化集群:在第一个节点执行galera_new_cluster,其他节点重启MariaDB服务:sudo systemctl restart mariadb
    验证集群状态:mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'; "(结果应为节点数)。

二、使用HAProxy实现TCP层负载均衡

HAProxy是常用的TCP/HTTP负载均衡器,适合MariaDB的场景:

1. 安装HAProxy

sudo apt update
sudo apt install haproxy

2. 配置HAProxy

编辑/etc/haproxy/haproxy.cfg,添加以下内容:

global
  log /dev/log local0
  log /dev/log local1 notice
  daemon
  maxconn 256

defaults
  log global
  mode tcp                   # TCP模式(MariaDB基于TCP)
  option tcplog              # 记录TCP日志
  timeout connect 5000ms     # 连接超时
  timeout client 50000ms     # 客户端超时
  timeout server 50000ms     # 服务器超时

frontend mysql_front
  bind *:3306                # 监听3306端口(客户端连接端口)
  default_backend mysql_back

backend mysql_back
  balance roundrobin         # 轮询算法(也可选leastconn最少连接)
  server mariadb1 master_ip:3306 check inter 2000 rise 2 fall 3  # 主节点
  server mariadb2 slave1_ip:3306 check inter 2000 rise 2 fall 3   # 从节点1
  server mariadb3 slave2_ip:3306 check inter 2000 rise 2 fall 3   # 从节点2
  • balance:可选roundrobin(轮询)、leastconn(最少连接)、source(源IP哈希)等。
  • check:启用健康检查(定期检测节点是否可用)。

3. 启动HAProxy

sudo systemctl restart haproxy
sudo systemctl enable haproxy  # 开机自启

4. 验证负载均衡

客户端连接HAProxy的IP(如haproxy_ip:3306),执行查询,可通过HAProxy日志或MariaDB节点的SHOW PROCESSLIST; 查看请求分发情况。

三、使用ProxySQL实现应用层负载均衡(高级功能)

ProxySQL是高性能SQL代理,支持读写分离查询缓存自动故障转移等高级特性:

1. 安装ProxySQL

wget https://github.com/sysown/proxysql/releases/download/v2.3.0/proxysql_2.3.0-1_amd64.deb
sudo dpkg -i proxysql_2.3.0-1_amd64.deb

2. 配置ProxySQL

编辑/etc/proxysql.cnf,重点配置以下部分:

[mysql_servers]
# 定义后端MariaDB节点
mariadb_master 192.168.1.101 3306 100  # 主节点(权重100)
mariadb_slave1 192.168.1.102 3306 50   # 从节点1(权重50)
mariadb_slave2 192.168.1.103 3306 50   # 从节点2(权重50)

# 定义主机组(0=写组,1=读组)
mysql_query_rules
rule1 id 1 active 1 match_pattern ^SELECT.*FOR UPDATE apply 0  # 写操作走写组
rule2 id 2 active 1 match_pattern ^SELECT.* apply 1           # 读操作走读组
rule3 id 3 active 1 match_pattern ^.* apply 0                 # 其他操作走写组

[mysql_users]
# 定义客户端连接用户
admin username password default_hostgroup 0  # 默认走写组
app_user app_pass default_hostgroup 1      # 应用用户默认走读组

3. 启动ProxySQL

sudo systemctl restart proxysql
sudo systemctl enable proxysql

4. 验证读写分离

客户端连接ProxySQL的默认端口(6033),执行以下命令:

-- 写操作(应路由到主节点)
INSERT INTO test_table (name) VALUES ('test');
    
-- 读操作(应路由到从节点)
SELECT * FROM test_table;
    

通过ProxySQL的SELECT * FROM stats.stats_mysql_query_digest; 查看请求分发统计。

四、负载均衡注意事项

  1. 数据一致性:主从复制存在延迟,若对数据一致性要求高,建议使用Galera Cluster或多主同步。
  2. 健康检查:负载均衡器需开启健康检查(如HAProxy的check参数),避免将请求发送到故障节点。
  3. 性能优化:根据业务负载调整负载均衡算法(如leastconn适合写密集型场景)、增加后端节点数量。
  4. 高可用扩展:可结合Keepalived为HAProxy或ProxySQL配置主备,避免单点故障。

通过以上步骤,可在Ubuntu环境下为MariaDB实现高效的负载均衡,提升数据库的并发处理能力和可用性。

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


若转载请注明出处: Ubuntu MariaDB如何进行负载均衡
本文地址: https://pptw.com/jishu/738047.html
Ubuntu MariaDB如何配置自动备份 debian进程兼容性问题大吗

游客 回复需填写必要信息