荐 Haproxy Haproxy+Nginx负载均衡实战
程序员文章站
2022-04-15 16:59:44
Haproxy概述ha-proxy是一款高性能的负载均衡软件。因为其专注于负载均衡这一些事情,因此与nginx比起来在负载均衡这件事情上做更好,更专业。Haproxy的特点ha-proxy 作为目前流行的负载均衡软件,必须有其出色的一面。下面介绍一下ha-proxy相对LVS,Nginx等负载均衡软件的优点。•支持tcp / http 两种协议层的负载均衡,使得其负载均衡功能非常丰富。•支持8种左右的负载均衡算法,尤其是在http模式时,有许多非常实在的负载均衡算法,适用各种需求。•性....
Haproxy概述
ha-proxy是一款高性能的负载均衡软件。因为其专注于负载均衡这一些事情,因此与nginx比起来在负载均衡这件事情上做更好,更专业。
Haproxy的特点
ha-proxy 作为目前流行的负载均衡软件,必须有其出色的一面。下面介绍一下ha-proxy相对LVS,Nginx等负载均衡软件的优点。•支持tcp / http 两种协议层的负载均衡,使得其负载均衡功能非常丰富。
•支持8种左右的负载均衡算法,尤其是在http模式时,有许多非常实在的负载均衡算法,适用各种需求。•性能非常优秀,基于单进程处理模式(和Nginx类似)让其性能卓越。
•拥有一个功能出色的监控页面,实时了解系统的当前状况。
•功能强大的ACL支持,给用户极大的方便。
Haproxy算法
1.roundrobin 基于权重进行轮询,在服务器的处理时间保持均匀分布时,这是最平衡,最公平的算法.此算法是动态的,这表示其权重可以在运行时进行调整.
2.static-rr 基于权重进行轮询,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效.不过,其在后端服务器连接数上没有限制
3.leastconn 新的连接请求被派发至具有最少连接数目的后端服务器.
Haproxy Nginx环境介绍(基于Centos7.x)
Server1 |
192.168.179.101 |
Haproxy |
Server2 |
192.168.179.102 |
Web Server Nginx1 |
Server3 |
192.168.179.104 |
Web Server Nginx2 |
Haproxy的安装
#Centos7环境下安装你的haproxy软件
[root@master ~]# yum install epel* haproxy -y
#我这里不演示keepalived,后面博客演示,这里只有一台haproxy,没有backup haproxy
[root@localhost ~]# hostnamectl set-hostname master 192.168.179.101 haproxy
Nginx安装部署
#192.168.179.103 104上部署Nginx
systemctl stop firewalld && setenforce 0
wget -c http://nginx.org/download/nginx-1.16.1.tar.gz
mv nginx-1.16.1.tar.gz /usr/src/
cd /usr/src/
tar xf nginx-1.16.1.tar.gz
cd nginx-1.16.1
yum install -y gcc pcre pcre-devel openssl openssl-devel gd gd-devel
./configure --prefix=/usr/local/nginx
make && make install
/usr/local/nginx/sbin/nginx
#修改主机名
[root@localhost ~]# hostnamectl set-hostname real-server1 192.168.179.103 nginx
[root@localhost ~]# hostnamectl set-hostname real-server2 192.168.179.104 nginx
#为了负载均衡结果更加清晰展示,修改html页面内容
[root@real-server1 ~]# /usr/local/nginx/sbin/nginx -s reload
[root@real-server1 ~]# echo "this is http server nginx 192.168.179.103" > /usr/local/nginx/html/index.html
[root@real-server1 ~]# vim /usr/local/nginx/conf/nginx.conf
keepalive_timeout 0;
[root@real-server2 ~]# vim /usr/local/nginx/conf/nginx.conf
keepalive_timeout 0;
[root@real-server2 ~]# echo "this is http server nginx 192.168.179.104" > /usr/local/nginx/html/index.html
[root@real-server2 ~]# /usr/local/nginx/sbin/nginx -s reload
Haproxy配置配置文件
[root@master ~]# cat /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2 info
pidfile /var/run/haproxy.pid
maxconn 4096
user haproxy
group haproxy
daemon
nbproc 1
defaults
mode http
log global
retries 3
option redispatch
maxconn 4000
timeout connect 5000
timeout client 5000
timeout server 5000
timeout check 5000
listen stats
bind *:81
stats enable
stats uri /haproxy
stats auth lulei:123
log 127.0.0.1 local2 err
stats admin if TRUE
stats hide-version
stats refresh 30s
frontend web
mode http
bind *:80
option httplog
option forwardfor
option httpclose
log global
acl html url_reg -i \.html$
use_backend httpservers if html
default_backend httpservers
backend httpservers
balance roundrobin
option redispatch
option abortonclose
cookie SERVERID
server http1 192.168.179.103:80 maxconn 2000 cookie server1 weight 1 check inter 1s rise 2 fall 2
server http2 192.168.179.104:80 maxconn 2000 cookie server2 weight 1 check inter 1s rise 2 fall 2
Haproxy配置详解
global部分:
global
log 127.0.0.1 local2 info
pidfile /var/run/haproxy.pid
maxconn 4096
user haproxy
group haproxy
daemon
nbproc 1
□ log:全局的日志配置,local0是日志设备,info 表示日志级别。其中日志级别有err、
warning、info、debug四种可选。这个配置表示使用127.0.0.1上的rsyslog服务中
的local0日志设备,记录日志等级为 info
log指定收集哪个机器的log,log的收集是通过系统工具来实现的,在centos6版本之前以syslog来收集日志,6版本变为了rsysylog。这些都是用于收集系统的日志,local 0指定设备,info表示输出日志的级别,error级别是在报错的时候才会输出。info只要有正常信息都会进行输出
口 maxconn:设定每个haproxy进程可接受的最大并发连接数,此选项等同于Linux命令行选项"ulimit -n"
maxconn:可接受的最大并发连接数(不是最大连接数),注意是针对haproxy进程来说的,相当于操作系统的ulimit -n,如果设置了maxconn 4096,那么linux ulimit -n 也要设置为大于等于4096
口 user/group:设置运行haproxy进程的用户和组,也可使用用户和组的uid和gid值来替代
口 nbproc:设置HAProxy启动时可创建的进程数,此参数要求将 HAProy运行模式设
置为"daemon",默认只启动一个进程。根据使用经验,该值的设置应该小于服务器的CPU核数。创建多个进程能够减少每个进程的任务队列,但是过多的进程可能会导致进程的崩溃。
nbproc 1 #工作进程数量 cpu内核是几就写几
这个参数重要,设置haproxy启动的进程数。默认值是1,默认启动一个进程,如果访问量比较大需要将该值增加,这个值大小一般建议设置小于服务器cpu的核数,这个核数是物理核不是逻辑核,如两个4核cpu那就是8个核,也就是这个值最多设置为8,而不是通过超线程来实现。
创建过多的进程并不一定会有好的效果,进程数不能太大,也不能太小,最大不要超过cpu核数
nbproc 1 #工作进程数量 cpu内核是几就写几
这个参数重要,设置haproxy启动的进程数。默认值是1,默认启动一个进程,如果访问量比较大需要将该值增加,这个值大小一般建议设置小于服务器cpu的核数,这个核数是物理核不是逻辑核,如两个4核cpu那就是8个核,也就是这个值最多设置为8,而不是通过超线程来实现
创建过多的进程并不一定会有好的效果,进程数不能太大,也不能太小,最大不要超过cpu核数
口 pidfle:指定haproxy进程的pid文件,启动进程的用户必须有访问此文件的权限
Haproxy 日志的配置
两台机器都配置haproxy的日志:需要打开注释并添加 (如果有backup,backup上面也需要配置)
[root@master ~]# vim /etc/rsyslog.conf
# Provides UDP syslog reception #由于haproxy的日志是用udp传输的,所以要启用rsyslog的udp监听
$ModLoad imudp
$UDPServerRun 514
找到 #### RULES #### 下面添加
local2.* /var/log/haproxy.log
[root@master ~]# systemctl restart rsyslog
[root@master ~]# systemctl restart haproxy
[root@master ~]# tail -f /var/log/haproxy.log #实时查看日志
Jul 15 05:00:13 master systemd: Stopping HAProxy Load Balancer...
Jul 15 05:00:13 master haproxy-systemd-wrapper: haproxy-systemd-wrapper: exit, haproxy RC=0
Jul 15 05:00:13 master systemd: Started HAProxy Load Balancer.
Jul 15 05:00:13 master systemd: Starting HAProxy Load Balancer...
Jul 15 05:00:13 localhost haproxy[16683]: Proxy stats started.
Jul 15 05:00:13 localhost haproxy[16683]: Proxy web started.
Jul 15 05:00:13 localhost haproxy[16683]: Proxy web started.
Jul 15 05:00:13 localhost haproxy[16683]: Proxy httpservers started.
Jul 15 05:00:15 localhost haproxy[16684]: Connect from 192.168.179.4:57940 to 192.168.179.101:81 (stats/HTTP)
测试是否配置成功查看结果
本文地址:https://blog.csdn.net/qq_34556414/article/details/107364506