HAProxy或高可用性代理是一个开源的TCP和HTTP负载平衡器和代理服务器软件。 HAProxy已由C编写,它支持SSL,压缩,保持活动,自定义日志格式和标题重写。 HAProxy是一款快速轻便的代理服务器和负载平衡器,具有较小的内存占用和低CPU占用率。 它被大型网站(如Github,StackOverflow,Reddit,Tumblr,Twitter等)使用。 它已经成为过去几年中最受欢迎的软件负载均衡器和代理服务器。
在本教程中,我将引导您通过HAProxy安装和配置3台服务器,一个负载平衡器和两个Nginx Web服务器。 我们将在单个服务器上安装HAProxy,然后在其他服务器上安装Nginx Web服务器。 HAProxy作为Nginx Web服务器的负载均衡器。
基本概念与HAProxy
第4层和第7层
HAProxy可以以两种模式运行:TCP模式第4层和HTTP模式层7.在第4层TCP模式下,HAProxy将RAW TCP数据包从客户端转发到应用程序服务器。 在第7层HTTP模式下,HAProxy在转发到应用服务器之前解析HTTP头。 在本教程中,我们将使用Nginx作为仅支持第7层HTTP模式的Web服务器。
平衡算法
这是HAProxy在进行负载平衡时选择服务器的算法。 提供以下模式:
Roundrobin
这是最简单的平衡算法。 对于每个新的连接,它将由下一个后端服务器处理。 如果到达列表中的最后一个后端服务器,它将从后端列表的顶部重新开始。
Lastconn
新连接将由具有最少连接数量的后台服务器处理。 当请求的时间和负载变化很大时,这很有用。
资源
这是针对粘性会话,客户端IP将被散列以确定从该IP接收到最后一个请求的后端服务器。 因此,IP A将始终由后端1处理,IP B将始终由banckend2处理,不会中断会话
还有其他算法 - 有关详细信息,请查看官方HAProxy站点。
先决条件
- 3 CentOS 7
负载平衡器
192.168.1.102
nginx1
192.168.1.104
nginx2
192.168.1.105
- 所有3台服务器的根权限。
第1步 - 配置/ etc / hosts文件
登录到负载平衡器服务器并编辑/ etc / hosts文件。
ssh loadbalancer@192.168.1.102
sudo su
vi /etc/hosts
添加nginx1和nginx2主机名:
192.168.1.104 nginx1.loadbalancer.me nginx1
192.168.1.105 nginx2.loadbalancer.me nginx2
保存文件并退出编辑器。
接下来,编辑Nginx服务器(nginx1和nginx2)上的hosts文件:
ssh nginx1@192.168.1.104
ssh nginx2@192.168.1.105
在hosts文件中编辑并添加负载均衡器的新行:
vi /etc/host
在每个nginx服务器上添加loadbalancer主机名:
192.168.1.102 loadbalancer
在nginx1和nginx2服务器上执行此操作。
第2步 - 安装和配置HAProxy
HAProxy在CentOS 7存储库中可用,登录到负载平衡器服务器并更新软件包列表:
ssh loadbalancer@192.168.1.104
yum -y update
现在使用这个yum命令安装HAProxy:
yum -y install haproxy
安装完成后,转到“/ etc / haproxy /”目录并备份原始配置文件:
cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg.orig
接下来,使用vi编辑器添加一个新的HAProxy配置文件“haproxy.cfg”文件:
vi haproxy.cfg
粘贴以下配置:
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2 #Log configuration
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy #Haproxy running under user and group "haproxy"
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
#---------------------------------------------------------------------
#HAProxy Monitoring Config
#---------------------------------------------------------------------
listen haproxy3-monitoring *:8080 #Haproxy Monitoring run on port 8080
mode http
option forwardfor
option httpclose
stats enable
stats show-legends
stats refresh 5s
stats uri /stats #URL for HAProxy monitoring
stats realm Haproxy\ Statistics
stats auth youcl:youcl #User and Password for login to the monitoring dashboard
stats admin if TRUE
default_backend app-main #This is optionally for monitoring backend
#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------
frontend main
bind *:80
option http-server-close
option forwardfor
default_backend app-main
#---------------------------------------------------------------------
# BackEnd roundrobin as balance algorithm
#---------------------------------------------------------------------
backend app-main
balance roundrobin #Balance algorithm
option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost #Check the server application is up and healty - 200 status code
server nginx1 192.168.1.104:80 check #Nginx1
server nginx2 192.168.1.105:80 check #Nginx2
保存配置文件并退出。
接下来,配置hsroxy的rsyslog。
我们将配置rsyslog守护程序来记录HAProxy统计信息。 编辑rsyslog.conf文件以启用rsyslog使用UDP端口514。
vi /etc/rsyslog.conf
取消注释此行以启用UDP连接:
$ModLoad imudp
$UDPServerRun 514
如果要使用特定IP,可以添加如下所示的新行:
$UDPServerAddress 127.0.0.1
保存文件并退出。
然后为rsyslog创建新的haproxy配置文件:
cd /etc/rsyslog.d/
vi haproxy.conf
粘贴配置如下:
local2.=info /var/log/haproxy-access.log #For Access Log
local2.notice /var/log/haproxy-info.log #For Service Info - Backend, loadbalancer
保存并退出。
现在重新启动rsyslog,然后启动haproxy:
systemctl restart rsyslog
systemctl start haproxy
在启动时添加haproxy开始:
systemctl enable haproxy
第3步 - 安装和配置Nginx
在本节中,我们将从nelx1和nginx2服务器上的epel库中安装Nginx。
登录服务器:
ssh nginx1@192.168.1.104
ssh nginx2@192.168.1.105
使用下面的yum命令安装epel仓库:
yum -y install epel-release
现在你可以安装Nginx:
yum -y install nginx
Nginx已安装。 转到Web目录并更改索引文件,以便我们可以看到两台服务器中提供了哪些html文件:
cd /usr/share/nginx/html/
echo "<h1>nginx1.loadbalance.me</h1>" > index.html #For nginx1 server
echo "<h1>nginx2.loadbalance.me</h1>" > index.html #For nginx2 server
接下来,添加Nginx在启动时启动,然后启动它:
systemctl enable nginx
systemctl start nginx
确保您在nginx1和nginx2服务器上执行此步骤。
第4步 - 测试
通过访问负载平衡器IP: 192.168.1.102从浏览器测试
用curl命令测试:
curl 192.168.1.102
测试登录到使用用户名和密码“youcl”在端口8080上运行的HAProxy Web监控:
http://192.168.1.102:8080/stats
HAProxy正在成功工作,充当我们两个Nginx Web服务器的负载均衡器。
结论
HAProxy或High Availability代理是一种开源软件,为基于TCP的服务提供高可用性,它作为HTTP负载平衡器和代理服务器运行。 该软件用C编写,支持SSL,保持活动和压缩。 HAProxy是每个需要负载平衡器和代理服务器的人的正确选择,该服务器快速轻便,占用空间小,CPU使用率低。 Haproxy可以在第4层TCP模式和第7层HTTP模式下运行。 Nginx只支持HAProxy的第7层HTTP模式。 如果要使用第4层TCP模式,可以使用其他Web服务器,如apache。 在CentOS 7上,HAProxy在默认存储库中可用。 它很容易安装和配置。