搭建HAProxy高可用负载均衡系统
一、HAProxy简介
Haproxy 是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及==基于TCP和HTTP==的应用程序代理。
haproxy优点
1. Haproxy支持两种代理模式 TCP(四层)和HTTP(七层),也是支持虚拟主机的。
2. Haproxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。
3. Haproxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲Haproxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
4. Haproxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡。
5. HAProxy负载均衡策略非常多:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)。
二、实验配置
1.安装Haproxy,并启用
dnf install haproxy -y
systemctl start haproxy
systemctl enable haproxy
2.配置服务器配置文件/etc/haproxy/haproxy.cfg
3.关闭防火墙、核心防护
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
4.重启Haproxy,测试负载均衡
5.配置健康检查
6.重启并测试
for i in {1..10}; do curl http://172.25.254.100; sleep 0.5; done
7.配置ACL访问控制
frontend webserver
bind *:80
acl block_curl hdr_sub(User-Agent) -i curl
http-request deny if block_curl
default_backend webcluster
8.重启并测试
将curl的请求头伪装为Firefox 128.0 浏览器,绕过基于User-Agent的拦截规则。
9.配置https
1)生成自签名证书; 2)合并证书和私钥; 3)修改HAProxy配置文件
mkdir /etc/haproxy/certs
openssl req -newkey rsa:2048 -nodes -keyout /etc/haproxy/certs/haproxy.key -x509 -days 365 -out /etc/haproxy/certs/haproxy.crt
cat /etc/haproxy/certs/haproxy.key /etc/haproxy/certs/haproxy.crt > /etc/haproxy/certs/haproxy.pem
4)重启并测试
10.配置网站状态页
重启并访问
11.动态调整后端服务器权重
1)安装socat 2)修改HAProxy配置文件 3)设置权重
dnf install socat -y
[root@haproxy ~]# echo "get weight webcluster/web1" | socat stdio /var/lib/haproxy/stats
1 (initial 1)
[root@haproxy ~]# echo "get weight webcluster/web2" | socat stdio /var/lib/haproxy/stats
1 (initial 1)
[root@haproxy ~]# echo "set weight webcluster/web2 2" | socat stdio /var/lib/haproxy/stats
[root@haproxy ~]# echo "get weight webcluster/web2" | socat stdio /var/lib/haproxy/stats
2 (initial 1)
4)重启并测试
12.配置四层负载均衡
1)修改HAProxy配置文件
2)安装并启动mariadb
dnf install mariadb-server -y # 安装
systemctl start mariadb # 启动
systemctl enable mariadb # 开机自启
3)配置数据库区分标识
vim /etc/my.cnf
[mysqld]
server-id=101 # 唯一标识,区分不同服务器
vim /etc/my.cnf
[mysqld]
server-id=102
systemctl restart mariadb
4)授权数据库访问
mysql -e "grant all on *.* to 'admin'@'%' identified by 'admin';"
mysql -e "flush privileges;" # 刷新权限
负载均衡生效