HAProxy
文章目录
1.HAProxy的介绍
HAProxy(High Availability Proxy)是一款高性能的开源负载均衡器和代理服务器软件,通常用于构建可靠的、高可用性的网络服务。它提供了丰富的功能,包括负载均衡、反向代理、SSL终止、健康检查、内容缓存、连接池管理等,使其成为构建大规模网络架构的强大工具。
2.HAProxy的主要特点和功能
-
负载均衡:HAProxy可以将来自多个客户端的请求分发到多个后端服务器,以平衡流量负载。它支持多种负载均衡算法,包括轮询、加权轮询、最小连接数、最小响应时间等。
-
反向代理:HAProxy充当客户端和后端服务器之间的代理,接受客户端请求并将其转发到后端服务器。这有助于隐藏后端服务器的真实信息,并提供额外的安全性。
-
SSL终止:HAProxy能够终止(解密)传入的SSL/TLS连接,从而减轻后端服务器的负担。它可以执行SSL证书的验证和握手过程,并将非加密流量转发给后端服务器。
-
健康检查:HAProxy可以定期检查后端服务器的健康状态,以确保只有正常工作的服务器接收流量。如果服务器出现故障或不可用,它会自动将流量路由到其他可用服务器。
-
内容缓存:HAProxy可以缓存响应内容,以提高性能和减少对后端服务器的请求。这对于静态内容或具有较少变化的内容特别有用。
-
连接池管理:HAProxy能够管理连接池,限制并发连接数,以防止服务器超载。它还可以处理连接的复用和超时。
-
高可用性:HAProxy支持热备份和故障转移,可以确保系统的高可用性。如果主节点出现故障,备份节点会自动接管服务。
-
动态配置:HAProxy可以通过命令行或配置文件进行实时配置更改,无需停止或重新启动服务。
-
丰富的统计信息:HAProxy提供了详细的性能统计信息和日志,使管理员能够监控系统的运行状况和性能。
-
灵活性和可扩展性:HAProxy可以在不同的网络拓扑中灵活部署,并支持IPv4和IPv6。它还可以通过插件和自定义脚本进行扩展和定制。
HAProxy是一个强大而灵活的工具,广泛用于构建高可用性的网络应用程序和服务,特别是在Web服务器和应用服务器的负载均衡方面。
3.启动httpd服务
主机 | ip |
---|---|
RHEL8 | 192.168.198.131 |
rs1 | 192.168.198.114 |
rs2 | 192.168.198.115 |
//安装httpd
[root@rs1 ~]# yum -y install httpd
[root@rs2 ~]# yum -y install httpd
//写入内容区分
[root@rs1 ~]# echo '你是' > /var/www/html/index.html
[root@rs2 ~]# echo 'sb' > /var/www/html/index.html
//启动服务
[root@rs1 ~]# systemctl enable --now httpd
[root@rs2 ~]# systemctl enable --now httpd
可以修改rs2的端口号为8080
[root@rs2 ~]# vim /etc/httpd/conf/httpd.conf
[root@rs2 ~]# grep 'Listen 8080' /etc/httpd/conf/httpd.conf
Listen 8080
[root@rs2 ~]# systemctl restart httpd //重启服务
4.安装HAProxy
[root@RHEL8 ~]# yum -y install make gcc pcre-devel bzip2-devel openssl-devel systemd-devel
[root@RHEL8 ~]# useradd -r -M -s /sbin/nologin haproxy
下载haproxy
[root@RHEL8 ~]# wget https://www.haproxy.org/download/2.7/src/haproxy-2.7.10.tar.gz //wget下载haproxy
[root@RHEL8 ~]# tar xf haproxy-2.7.10.tar.gz
[root@RHEL8 ~]# cd haproxy-2.7.10/
[root@RHEL8 haproxy-2.7.10]# less INSTALL //查看如何安装haproxy
[root@RHEL8 haproxy-2.7.10]# make clean //清除编译缓存
[root@RHEL8 haproxy-2.7.10]# make -j $(nproc) TARGET=linux-glibc \
USE_OPENSSL=1 USE_PCRE=1 USE_SYSTEMD=1
[root@RHEL8 haproxy-2.7.10]# make install PREFIX=/usr/local/haproxy
[root@RHEL8 haproxy]# ln -s /usr/local/haproxy/sbin/* /usr/sbin/ //创建软连接
5.配置各个负载的内核参数
[root@RHEL8 ~]# echo 'net.ipv4.ip_nonlocal_bind = 1' >> /etc/sysctl.conf
[root@RHEL8 ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@RHEL8 ~]# sysctl -p //查看参数
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
6.提供配置文件
mkdir /etc/haproxy
cat > /etc/haproxy/haproxy.cfg <<EOF
#--------------全局配置----------------
global
log 127.0.0.1 local0 info
#log loghost local0 info
maxconn 20480
#chroot /usr/local/haproxy
pidfile /var/run/haproxy.pid
#maxconn 4000
user haproxy
group haproxy
daemon
#---------------------------------------------------------------------
#common defaults that all the 'listen' and 'backend' sections will
#use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option dontlognull
option httpclose
option httplog
#option forwardfor
option redispatch
balance roundrobin
timeout connect 10s
timeout client 10s
timeout server 10s
timeout check 10s
maxconn 60000
retries 3
#--------------统计页面配置------------------
listen admin_stats
bind 0.0.0.0:8189
stats enable
mode http
log global
stats uri /haproxy_stats
stats realm Haproxy\ Statistics
stats auth admin:admin
#stats hide-version
stats admin if TRUE
stats refresh 30s
#---------------web设置-----------------------
listen webcluster
bind 0.0.0.0:80
mode http
#option httpchk GET /index.html
log global
maxconn 3000
balance roundrobin
cookie SESSION_COOKIE insert indirect nocache
server web01 192.168.198.114:80 check inter 2000 fall 5
server web01 192.168.198.115:8080 check inter 2000 fall 5
#server web02 192.168.80.102:80 cookie web01 check inter 2000 fall 5
EOF
//将文件里面的添加上我们使用的两台主机ip地址与端口号
server web01 192.168.198.114:80 check inter 2000 fall 5
server web02 192.168.198.115:8080 check inter 2000 fall 5
7.haproxy.service文件编写
cat > /usr/lib/systemd/system/haproxy.service <<EOF
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target
[Service]
ExecStartPre=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
ExecStart=/usr/local/haproxy/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
[root@RHEL8 ~]# systemctl enable --now haproxy
8.启动日志
[root@RHEL8 ~]# vim /etc/rsyslog.conf
local0.* /var/log/haproxy.log
[root@RHEL8 ~]# systemctl restart rsyslog
9.关闭防火墙和selinux
[root@RHEL8 ~]# systemctl disable --now firewalld //关闭防火墙
[root@RHEL8 ~]# setenforce 0 //临时关闭linux
10.测试(192.168.198.131)
11.登录haproxy
192.168.198.131:8189/haproxy_stats
账号 | 密码 |
---|---|
admin | admin |
登陆成功