Haproxy

导读:本篇文章讲解 Haproxy,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、Haproxy概述

haproxy是一款高性能的负载均衡软件。因为其专注于负载均衡这一些事情,因此与nginx比起来在负载均衡这件事情上做更好,更专业。

haproxy的特点

  • 支持tcp / http 两种协议层的负载均衡,使得其负载均衡功能非常丰富。
  • 支持8种左右的负载均衡算法,尤其是在http模式时,有许多非常实在的负载均衡算法,适用各种需求。
  • 性能非常优秀,基于单进程处理模式(和Nginx类似)让其性能卓越。
  • 拥有一个功能出色的监控页面,实时了解系统的当前状况。
  • 功能强大的ACL支持,给用户极大的方便。

haproxy算法:

  • 1.roundrobin
    基于权重进行轮询,在服务器的处理时间保持均匀分布时,这是最平衡,最公平的算法.此算法是动态的,这表示其权重可以在运行时进行调整.

  • 2.static-rr
    基于权重进行轮询,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效.不过,其在后端服务器连接数上没有限制

  • 3.leastconn
    新的连接请求被派发至具有最少连接数目的后端服务器.

haproxy官网

二、Haproxy负载均衡http

环境说明:

主机名 ip 职责
item 192.168.91.134 Haprosy
task1 192.168.91.135 web界面
task2 192.168.91.137 web界面
item 准备工作
// 关闭防火墙和selinux
[root@item ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@item ~]# setenforce 0
task1 准备工作
// 关闭防火墙和selinux
[root@task1 ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@task1 ~]# setenforce 0

// 启动httpd,添加web内容
[root@task1 ~]# yum -y install httpd
[root@task1 ~]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@task1 ~]# echo "amu" > /var/www/html/index.html
[root@task1 ~]# curl 127.0.0.1
amu
task2准备工作
// 关闭防火墙和selinux
[root@task2 ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@task2 ~]# setenforce 0

// 启动httpd,添加web内容
[root@task2 ~]# yum -y install httpd
[root@task2 ~]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@task2 ~]# echo "gf" > /var/www/html/index.html
[root@task2 ~]# curl 127.0.0.1
gf
安装haproxy
// 安装编译工具以及依赖包
[root@item ~]# yum -y install make gcc pcre-devel bzip2-devel openssl-devel systemd-devel vim

// 创建一个服务用户
[root@item ~]# useradd -r -M -s /sbin/nologin haproxy
[root@item ~]# id haproxy
uid=994(haproxy) gid=991(haproxy) groups=991(haproxy)

// 把之前下好的haproxy包传上去
[root@item ~]# ls
anaconda-ks.cfg  haproxy-2.4.0.tar.gz
// 解压编译
[root@item ~]# tar xf haproxy-2.4.0.tar.gz 
[root@item ~]# ls
anaconda-ks.cfg  haproxy-2.4.0  haproxy-2.4.0.tar.gz
[root@item ~]# cd haproxy-2.4.0
[root@item haproxy-2.4.0]# make clean
[root@item haproxy-2.4.0]# make -j $(grep 'processor' /proc/cpuinfo |wc -l)  \
TARGET=linux-glibc  \
USE_OPENSSL=1  \
USE_ZLIB=1  \
USE_PCRE=1  \
USE_SYSTEMD=1
[root@item haproxy-2.4.0]# make install PREFIX=/usr/local/haproxy

// copy启动文件
[root@item haproxy-2.4.0]# cd /usr/local/haproxy/sbin/
[root@item sbin]# ls
haproxy
[root@item sbin]# cp haproxy /usr/sbin/
[root@item sbin]# which haproxy
/usr/sbin/haproxy
配置各个内核的负载参数
[root@item sbin]# cd
[root@item ~]# echo 'net.ipv4.ip_nonlocal_bind = 1' >>  /etc/sysctl.conf
[root@item ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@item ~]# sysctl  -p
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
提供配置文件
[root@item ~]# mkdir /etc/haproxy
[root@item ~]# vim /etc/haproxy/haproxy.cfg
[root@item ~]# cat /etc/haproxy/haproxy.cfg 
#--------------全局配置----------------
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 httplogZZZZ
    #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 task1 192.168.91.135:80 check inter 2000 fall 5  //task1 服务器ip
    server task2 192.168.91.137:80 check inter 2000 fall 5  //task2 服务器ip
haproxy.service文件编写
[root@item ~]# vim /usr/lib/systemd/system/haproxy.service
[root@item ~]# cat /usr/lib/systemd/system/haproxy.service
[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

// 重新加载进程
[root@item  ~]# systemctl daemon-reload
x 启动日志// 修改日志文件[root@item ~]# vim /etc/rsyslog.conf # Save boot messages also to boot.loglocal0.*                                                /var/log/boot.log​// 重启日志[root@item ~]# systemctl restart rsyslog
启动haproxy服务
[root@item ~]# ss -antl
State  Recv-Q Send-Q Local Address:Port   Peer Address:Port Process                                                     
LISTEN 0      128          0.0.0.0:80          0.0.0.0:*                                                                
LISTEN 0      128          0.0.0.0:22          0.0.0.0:*                                                                
LISTEN 0      128          0.0.0.0:8189        0.0.0.0:*                                                                
LISTEN 0      128             [::]:22             [::]:*   

web 页面访问
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三、Haproxy配置负载均衡(https)

还是以上面这些主机为例

task1上安装mod_ssl
[root@task1 ~]# yum -y install mod_ssl
// 这里就不做证书,使用默认的证书,重启服务查看443是否启动
[root@task1 ~]# systemctl restart httpd
[root@task1 ~]# ss -antl
State  Recv-Q Send-Q Local Address:Port   Peer Address:Port Process                                                     
LISTEN 0      128          0.0.0.0:22          0.0.0.0:*                                                                
LISTEN 0      128                *:80                *:*                                                                
LISTEN 0      128             [::]:22             [::]:*                                                                
LISTEN 0      128                *:443               *:*   

task2上安装mod_ssl
[root@task2 ~]# yum -y install mod_ssl
// 这里就不做证书,使用默认的证书,重启服务查看443是否启动
[root@task2 ~]# systemctl restart httpd
[root@task2 ~]# ss -atnl
State  Recv-Q Send-Q Local Address:Port   Peer Address:Port Process                                                     
LISTEN 0      128          0.0.0.0:22          0.0.0.0:*                                                                
LISTEN 0      128                *:80                *:*                                                                
LISTEN 0      128             [::]:22             [::]:*                                                                
LISTEN 0      128                *:443               *:*   
修改配置文件
[root@item ~]# vim /etc/haproxy/haproxy.cfg 
[root@item ~]# cat /etc/haproxy/haproxy.cfg 
global
    log 127.0.0.1 local2  info
    maxconn 20480
    chroot /usr/local/haproxy
    pidfile /var/run/haproxy.pid
    stats socket  /var/lib/haproxy/haproxy.sock mode 600 level admin
    user haproxy
    group haproxy
    daemon
    nbproc 1
    nbthread 4
    spread-checks 5

defaults
    mode http
    log global
    option dontlognull
    option httpclose
    option  http-keep-alive
    option redispatch
    balance roundrobin
    timeout connect 60s
    timeout client 30s
    timeout server 30s
    timeout check 10s
    maxconn 60000
    retries 3

listen https
    bind 0.0.0.0:443
    log global
    mode tcp
    balance  roundrobin 
    server task1 192.168.91.135:443 check inter 2s fall 3 rise 5  // 修改端口为443
    server task2 192.168.91.137:443 check inter 2s fall 3 rise 5  // 修改端口为443
    
[root@item ~]# mkdir /var/lib/haproxy
[root@item ~]# systemctl restart haproxy

[root@localhost ~]# ss -ant
State      Recv-Q Send-Q         Local Address:Port                        Peer Address:Port                
LISTEN     0      128                        *:80                                     *:*                  
LISTEN     0      128                        *:22                                     *:*                  
LISTEN     0      100                127.0.0.1:25                                     *:*                  
LISTEN     0      128                        *:443                                    *:*              
LISTEN     0      128                       :::22                                    :::*                  
LISTEN     0      100                      ::1:25                                    :::*                  

请添加图片描述
请添加图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/5616.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!