HAProxy 实现 MySQL 服务器负载均衡实验
一、实验目标
通过配置 HAProxy 实现对 MySQL 服务器的负载均衡,确保请求能够均匀分配到后端的多个 MySQL 数据库服务器上,提高系统的可用性和性能。
二、实验环境
-
服务器 IP 分配:
haproxy节点 192.168.65.131 mysql服务器1 192.168.65.132 mysql服务器2 192.168.65.133
三、实验步骤
(一)安装 HAProxy
-
更新系统:
sudo yum update -y
-
安装 HAProxy:
sudo yum install haproxy -y
(二)安装 MySQL 服务
在每台 MySQL 服务器上安装 MySQL 服务。
-
更新系统:
sudo yum update -y
-
安装 MySQL :
yum install mysql-server.x86_64 -y
-
启动 MySQL 服务:
sudo systemctl start mysqld sudo systemctl enable mysqld
-
设置 MySQL 根用户密码:
alter user root@localhost identified by 'mysql@123';
按提示设置 root 用户密码,并完成安全设置。
(三)配置 MySQL 数据库
-
登录 MySQL 数据库:
mysql -u root -p
-
创建测试数据库:
CREATE DATABASE testdb_1; #mysql服务器1 CREATE DATABASE testdb_2; #mysql服务器2
为了确保 HAProxy 节点能够连接到后端 MySQL 数据库服务器,需要在每台 MySQL 服务器上授权远程连接。
-
登录 MySQL 数据库:
mysql -u root -p
-
授权远程连接:
USE mysql; CREATE USER 'root'@'192.168.65.131' IDENTIFIED BY 'mysql@123'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.65.131' WITH GRANT OPTION; FLUSH PRIVILEGES;
-
重启 MySQL 服务:
sudo systemctl restart mysqld
(五)配置 HAProxy
-
编辑 HAProxy 配置文件:
sudo vi /etc/haproxy/haproxy.cfg
-
配置内容:
global log /dev/log local0 log /dev/log local1 notice stats timeout 30s daemon defaults log global mode tcp option tcplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 frontend mysql_front bind *:3306 mode tcp default_backend mysql_back backend mysql_back mode tcp balance roundrobin server mysql1 192.168.65.132:3306 check server mysql2 192.168.65.133:3306 check listen stats bind *:8080 mode http stats enable #启用统计页面 stats uri /stats #定义统计页面的访问路径为 /stats stats realm "HAProxy Statistics" #设置访问统计页面时的认证提示信息 stats auth admin:password #设置访问统计页面的用户名和密码
-
重启 HAProxy 服务:
sudo systemctl restart haproxy
(六)验证负载均衡
-
多次在客户端连接 MySQL:
mysql -h 192.168.65.131 -P 3306 -u root -p
-
-
由于默认采用轮询算法,所以第一次连接后数据库为testdb_1,第二次为testdb_2
(七)监控 HAProxy 状态
-
访问 HAProxy 状态页面: 在浏览器中访问 http://192.168.65.131:8080/stats并输入用户名和密码
-
查看后端服务器状态: 确保所有后端 MySQL 服务器状态为
UP
。
四、实验结果
通过 HAProxy 配置,MySQL 服务器的请求被成功均衡分配到后端的三台 MySQL 服务器上,实现了负载均衡。客户端通过 HAProxy 连接 MySQL 时,能够正常访问数据库,并且后端服务器的负载得到了有效分担。