Ubuntu MariaDB如何进行负载均衡
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;
查看请求分发统计。
四、负载均衡注意事项
- 数据一致性:主从复制存在延迟,若对数据一致性要求高,建议使用Galera Cluster或多主同步。
- 健康检查:负载均衡器需开启健康检查(如HAProxy的
check参数),避免将请求发送到故障节点。 - 性能优化:根据业务负载调整负载均衡算法(如
leastconn适合写密集型场景)、增加后端节点数量。 - 高可用扩展:可结合Keepalived为HAProxy或ProxySQL配置主备,避免单点故障。
通过以上步骤,可在Ubuntu环境下为MariaDB实现高效的负载均衡,提升数据库的并发处理能力和可用性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu MariaDB如何进行负载均衡
本文地址: https://pptw.com/jishu/738047.html
