在Linux系统中配置高可用的数据库代理,能够有效分担数据库读写压力,避免单点故障导致服务不可用,是提升数据库服务稳定性的重要手段。本文以常用的ProxySQL为例,介绍完整的配置流程。

环境准备
首先需要准备两台Linux服务器作为代理节点,一台作为主节点,一台作为备节点,同时准备至少两台数据库服务器组成数据库集群。所有服务器需要提前配置好网络互通,关闭防火墙或者开放对应端口,本文使用的系统为CentOS 7,ProxySQL版本为2.4.4。
安装ProxySQL
在两台代理节点上分别执行以下命令安装ProxySQL:
# 下载ProxySQL安装包 wget https://github.com/sysown/proxysql/releases/download/v2.4.4/proxysql-2.4.4-1-centos7.x86_64.rpm # 安装依赖 yum install -y perl-DBD-MySQL # 安装ProxySQL rpm -ivh proxysql-2.4.4-1-centos7.x86_64.rpm
配置ProxySQL基础参数
修改主节点的ProxySQL配置文件/etc/proxysql.cnf,核心配置如下:
datadir="/var/lib/proxysql"
admin_variables=
{
admin_credentials="admin:admin"
mysql_ifaces="0.0.0.0:6032"
}
mysql_variables=
{
threads=4
max_connections=2048
default_query_delay=0
default_query_timeout=36000000
have_compress=true
poll_timeout=2000
interfaces="0.0.0.0:6033"
default_schema="information_schema"
stacksize=1048576
server_version="5.7.30"
connect_timeout_server=3000
monitor_username="monitor"
monitor_password="monitor_pass"
monitor_history=600000
monitor_connect_interval=60000
monitor_ping_interval=10000
monitor_read_only_interval=1500
monitor_read_only_timeout=500
ping_interval_server_msec=120000
ping_timeout_server=500
commands_stats=true
sessions_sort=true
connect_retries_on_failure=10
}
配置完成后启动主节点ProxySQL服务:
systemctl start proxysql systemctl enable proxysql
添加数据库节点到ProxySQL
登录ProxySQL管理端,添加后端数据库服务器信息:
-- 登录管理端,端口为6032 mysql -u admin -padmin -h 127.0.0.1 -P 6032 -- 添加后端数据库节点,假设两台数据库IP为192.168.0.10和192.168.0.11 INSERT INTO mysql_servers (hostgroup_id, hostname, port, weight, comment) VALUES (1, '192.168.0.10', 3306, 100, 'master_db'); INSERT INTO mysql_servers (hostgroup_id, hostname, port, weight, comment) VALUES (1, '192.168.0.11', 3306, 50, 'slave_db'); -- 配置读写分离规则,读请求走hostgroup 1,写请求走hostgroup 2 INSERT INTO mysql_query_rules (rule_id, active, match_digest, destination_hostgroup, apply) VALUES (1, 1, '^SELECT.*FOR UPDATE$', 2, 1); INSERT INTO mysql_query_rules (rule_id, active, match_digest, destination_hostgroup, apply) VALUES (2, 1, '^SELECT', 1, 1); -- 加载配置到运行时并保存到磁盘 LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK; LOAD MYSQL QUERY RULES TO RUNTIME; SAVE MYSQL QUERY RULES TO DISK;
配置高可用集群
使用Keepalived实现两个ProxySQL节点的高可用,在主备节点安装Keepalived:
yum install -y keepalived
主节点Keepalived配置文件/etc/keepalived/keepalived.conf内容如下:
global_defs {
router_id proxy_ha_1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.0.100/24
}
}
备节点配置文件修改state为BACKUP,priority为90,其余配置保持一致。启动Keepalived服务:
systemctl start keepalived systemctl enable keepalived
故障转移测试
停止主节点的ProxySQL服务,观察虚拟IP是否自动漂移到备节点:
systemctl stop proxysql ip addr show eth0
如果备节点的eth0网卡上出现192.168.0.100这个虚拟IP,说明高可用配置生效。此时应用端连接192.168.0.100:6033即可正常访问数据库,无需修改连接配置。
注意事项
- ProxySQL的监控用户需要在后端数据库中存在,并且拥有对应的权限
- Keepalived的虚拟IP需要和服务器同网段,避免网络不通
- 定期备份ProxySQL的配置文件和磁盘数据,避免配置丢失
- 可以根据实际业务需求调整ProxySQL的连接数、线程数等参数