一、Haproxy概述
haproxy是一款高性能的负载均衡软件。因为其专注于负载均衡这一些事情,因此与nginx比起来在负载均衡这件事情上做更好,更专业。
haproxy的特点
- 支持tcp / http 两种协议层的负载均衡,使得其负载均衡功能非常丰富。
- 支持8种左右的负载均衡算法,尤其是在http模式时,有许多非常实在的负载均衡算法,适用各种需求。
- 性能非常优秀,基于单进程处理模式(和Nginx类似)让其性能卓越。
- 拥有一个功能出色的监控页面,实时了解系统的当前状况。
- 功能强大的ACL支持,给用户极大的方便。
haproxy算法:
-
1.roundrobin
基于权重进行轮询,在服务器的处理时间保持均匀分布时,这是最平衡,最公平的算法.此算法是动态的,这表示其权重可以在运行时进行调整. -
2.static-rr
基于权重进行轮询,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效.不过,其在后端服务器连接数上没有限制 -
3.leastconn
新的连接请求被派发至具有最少连接数目的后端服务器.
二、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