haproxy

目录

一.haproxy介绍

二.haproxy的部署步骤

三.haproxy实现http集群负载均衡

DR机部署操作

haproxy官网下载地址

RS1机部署操作

RS2机部署操作

四.haproxy实现https集群负载均衡

RS1机部署操作

RS2机部署操作

DR机部署操作 

五.haproxy状态页面


一.haproxy介绍

1.harroxy是一款开源的负载均衡软件,它支持TCP和HTTP应用,并能够通过配置文件进行高度定制。它能够在高并发环境下分发网络流量,提高服务器的性能和可靠性

2.haproxy最初是为Linux平台开发的,但现在已经支持多种操作系统。

3.haproxy具有高性能、高可靠性和可扩展性等优点,被广泛应用于高流量的网站和应用程序中。它可以将请求分发到多个服务器,从而实现负载均衡,同时还支持会话保持、健康检查、SSL终止和内容缓存等功能。

4.HAProxy支持多种负载均衡算法,包括轮询、加权轮询、最小连接和哈希等。它还提供了高可用性和故障转移功能,能够自动检测和剔除故障服务器,并将流量重新分发到可用的服务器上。HAProxy还支持SSL终止和TCP代理,可以用于构建高性能的Web应用程序和服务。

二.haproxy的部署步骤

haproxy的部署可以分为以下几个步骤:

  1. 安装haproxy:首先,需要在服务器上安装haproxy软件。可以使用系统的包管理工具,如apt或yum,来安装haproxy。

  2. 配置haproxy:接下来,需要配置haproxy以定义代理服务器的行为。配置文件通常位于/etc/haproxy/haproxy.cfg。可以使用文本编辑器打开该文件,并根据需求进行相应的配置。配置文件中包含了监听的端口、后端服务器的地址和端口、负载均衡算法等信息。

  3. 启动haproxy:配置完成后,可以使用以下命令启动haproxy服务:

    sudo systemctl start haproxy

    可以使用以下命令检查haproxy是否已成功启动:

    sudo systemctl status haproxy

  4. 测试haproxy:可以通过访问haproxy绑定的IP地址和端口来测试haproxy是否正常工作。可以使用curl或浏览器等工具进行访问,并查看返回的结果。如果配置正确,haproxy会将请求转发到后端服务器,并返回相应的内容。

  5. 高可用性和故障转移:为了实现高可用性和故障转移,可以将多个haproxy服务器组成一个集群,并使用负载均衡软件(如Keepalived)来实现故障检测和自动切换。这样,当一个haproxy服务器出现故障时,其他服务器会接管其工作,确保服务的连续性。

三.haproxy实现http集群负载均衡

实验准备

实验机ip地址系统
DR机:DR.example.com192.168.187.128

centos8

RS1机:RS1.example.com192.168.187.131centos8
RS2机:RS2.example.com192.168.187.129centos8

DR机部署操作

haproxy官网下载地址

# 1.关闭防火墙与selinux
[root@DR ~]# systemctl disable --now firewalld
[root@DR ~]# setenforce 0
[root@DR ~]# sed -i s/SELINUX=.*/SELINUX=disabled/ /etc/selinux/config

# 2.安装haproxy依赖
[root@DR ~]# yum -y install make gcc pcre-devel bzip2-devel openssl-devel systemd-devel

# 3.创建haproxy用户
[root@DR ~]# useradd -r -M -s /sbin/nologin haproxy

# 4.下载haproxy软件包
[root@DR ~]# wget https://www.haproxy.org/download/2.7/src/haproxy-2.7.10.tar.gz
[root@DR ~]# ls
anaconda-ks.cfg  haproxy-2.7.10.tar.gz
[root@DR ~]# tar xf haproxy-2.7.10.tar.gz 
[root@DR ~]# ls
anaconda-ks.cfg  haproxy-2.7.10  haproxy-2.7.10.tar.gz
[root@DR ~]# cd haproxy-2.7.10
[root@DR haproxy-2.7.10]# ls
addons    CHANGELOG     doc       INSTALL      Makefile   scripts  tests
admin     CONTRIBUTING  examples  LICENSE      README     src      VERDATE
BRANCHES  dev           include   MAINTAINERS  reg-tests  SUBVERS  VERSION

# 5.编译安装haproxy,详细阅读INSTALL,里面有安装操作
# 清理
[root@DR haproxy-2.7.10]# make clean

# 编译
[root@DR haproxy-2.7.10]# make -j $(nproc) TARGET=linux-glibc USE_OPENSSL=1 USE_PCRE=1 USE_SYSTEMD=1

# 安装时指定路径
[root@DR haproxy-2.7.10]# make install PREFIX=/usr/local/haproxy
[root@DR haproxy-2.7.10]# ls /usr/local
bin  etc  games  haproxy  include  lib  lib64  libexec  sbin  share  src
[root@DR haproxy-2.7.10]# cd /usr/local/haproxy/
[root@DR haproxy]# ls
doc  sbin  share


# 6.方便启动haproxy,我们给它做一个软链接
[root@DR haproxy]# ln -s /usr/local/haproxy/sbin/* /usr/sbin/
[root@DR haproxy]# which haproxy
/usr/sbin/haproxy
# 这样就能找到它了
# -V 可以查看它的版本信息
[root@DR haproxy]# haproxy -V

# 7.配置各个负载的内核参数
[root@DR ~]# echo 'net.ipv4.ip_nonlocal_bind = 1' >>  /etc/sysctl.conf
[root@DR ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@DR ~]# sysctl  -p 
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1

# 8.使用harpoxy帮助文档
[root@DR share]# pwd
/usr/local/haproxy/share
[root@DR share]# ls
man

# 这里有一个man目录,但是目前还使用不了
# 编辑/etc/man_db.conf 文件,将当前路径下的man目录写入进去
MANDATORY_MANPATH                       /usr/local/haproxy/share/man    ---接着22行按照模板写入路径

# 然后就可以用man帮助文档查看haproxy
[root@DR ~]# man haproxy

# 9.创建haproxy目录,写入配置文件
[root@DR ~]# mkdir /etc/haproxy
[root@DR ~]# cd /etc/haproxy
[root@DR haproxy]# ls
[root@DR haproxy]# 
[root@DR 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                      #  --- 监听http80端口,添加上2台RS主机的信息
    balance roundrobin
    cookie SESSION_COOKIE insert indirect nocache
    server RS1 192.168.187.131:80 check inter 2000 fall 5
    server RS2 192.168.187.129:8080 check inter 2000 fall 5
    #server web01 192.168.80.102:80 cookie web01 check inter 2000 fall 5

EOF


# 10.创建haproxy文件开机自启
[root@DR haproxy]# 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

# 11.刷新
[root@DR haproxy]# systemctl daemon-reload
# 设置开机自启haproxy
[root@DR haproxy]# systemctl enable --now haproxy
[root@DR haproxy]# ss -antl
State    Recv-Q   Send-Q     Local Address:Port       Peer Address:Port   Process   
LISTEN   0        2048             0.0.0.0:80              0.0.0.0:*                
LISTEN   0        128              0.0.0.0:22              0.0.0.0:*                
LISTEN   0        2048             0.0.0.0:8189            0.0.0.0:*                
LISTEN   0        128                 [::]:22                 [::]:*  

# 80端口和8189端口起来了

# 12.创建日志并重启rsyslog
[root@DR haproxy]# vim /etc/rsyslog.conf 
# 在66行local7.* 的前面加上这一行,将haproxy日志添加进去
local0.*                                                /var/log/harpoxy.log

# 重启rsyslog
[root@DR haproxy]# systemctl restart rsyslog

RS1机部署操作

# 1.关闭防火墙与selinux
[root@RS1 ~]# systemctl disable --now firewalld
[root@RS1 ~]# setenforce 0
[root@RS1 ~]# sed -i s/SELINUX=.*/SELINUX=disabled/ /etc/selinux/config

# 2.安装httpd
[root@RS1 ~]# yum -y install httpd
[root@RS2 ~]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@RS1 ~]# 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        511                    *:80                    *:*                
LISTEN   0        128                 [::]:22                 [::]:*    

# 3.向网页文件添加点内容
[root@RS1 ~]# echo '忘情天尊' > /var/www/html/index.html

# 这时可以通过ip访问到刚刚输入的内容

RS2机部署操作

# 1.关闭防火墙与selinux
[root@RS2 ~]# systemctl disable --now firewalld
[root@RS2 ~]# setenforce 0
[root@RS2 ~]# sed -i s/SELINUX=.*/SELINUX=disabled/ /etc/selinux/config

# 2.安装httpd
[root@RS2 ~]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@RS2 ~]# 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        511                    *:80                    *:*                
LISTEN   0        128                 [::]:22                 [::]:*  


# 3.向网页文件添加点内容
[root@RS2 ~]# echo '玄一大法师' > /var/www/html/index.html

# 这时可以通过ip访问到刚刚输入的内容

# 4.更改httpd服务的端口为8080
[root@RS2 ~]# vim /etc/httpd/conf/httpd.conf 
Listen 8080                     ----- 第59行
# 重启服务
[root@RS2 ~]# systemctl restart httpd

# 这时访问ip得添加上8080端口才能看到页面

这时可以用DR机的ip地址通过负载均衡访问到RS1,RS2的页面

[root@DR haproxy]# curl http://192.168.187.128
忘情天尊
[root@DR haproxy]# curl http://192.168.187.128
玄一大法师

四.haproxy实现https集群负载均衡

RS1机部署操作

密钥文件创建详情请看上一篇LVS负载均衡博客

LVS负载均衡博客

# 1.将密钥文件传输进来
[root@RS1 ~]# cd /etc/httpd
[root@RS1 httpd]# mkdir ssl
[root@RS1 httpd]# cd ssl/
[root@RS1 ssl]# ls
[root@RS1 ssl]# ls
httpd.crt  httpd.key


# 2.安装httpd-devel
[root@RS1 ssl]# yum -y install httpd-devel


# 3.安装mod_ssl模块
[root@RS1 httpd]# yum list all | grep mod_ssl
mod_ssl.x86_64                                         1:2.4.37-62.module_el8+657+88b2113f                   appstream 
[root@RS1 httpd]# yum -y install mod_ssl


# 4.查询文件ssl.conf已生成
[root@RS1 httpd]# ls /etc/httpd/conf.d/
autoindex.conf  README  ssl.conf  userdir.conf  welcome.conf

# 5.修改ssl文件
[root@RS1 httpd]# vim /etc/httpd/conf.modules.d/00-ssl.conf
[root@RS1 httpd]# cat /etc/httpd/conf.modules.d/00-ssl.conf
LoadModule ssl_module modules/mod_ssl.so

# 6.修改DocumentRoot,ServerName,SSLCertificateFile,SSLCertificateKeyFile
# 因为我们没有创建虚拟主机文件,所以我们直接创建一个虚拟主机家目录,然后写一个index.html文件进去,这里指定那个域名目录
[root@RS1 ~]# mkdir -p /var/www/html/www.pupu.com
[root@RS1 ~]# echo "https to RS1" > /var/www/html/www.pupu.com/index.html

# 43 #DocumentRoot "/var/www/html"  取消注释并改为 DocumentRoot "/var/www/html/www.pupu.com"
# 44 ServerName www.pupu.com:443  取消注释
# 85 SSLCertificateFile /etc/pki/tls/certs/localhost.crt 改为 SSLCertificateFile /etc/httpd/ssl/httpd.crt
# 93 SSLCertificateFile /etc/pki/tls/certs/localhost.key 改为 SSLCertificateKeyFile /etc/httpd/ssl/httpd.key

[root@RS1 ssl]# systemctl restart httpd

# 这时通过ip可以看到https的页面

 

RS2机部署操作

# 1.将密钥文件传输进来
[root@RS2 ~]# cd /etc/httpd
[root@RS2 httpd]# ls
conf  conf.d  conf.modules.d  logs  modules  run  state
[root@RS2 httpd]# mkdir ssl
[root@RS2 httpd]# cd ssl/
[root@RS2 ssl]# ls
[root@RS2 ssl]# ls
httpd.crt  httpd.key

# 2.安装httpd-devel
[root@RSs ssl]# yum -y install httpd-devel

# 3.安装mod_ssl模块
[root@RS2 httpd]# yum list all | grep mod_ssl
mod_ssl.x86_64                                         1:2.4.37-62.module_el8+657+88b2113f                   appstream 
[root@RS2 httpd]# yum -y install mod_ssl

# 4.查询文件ssl.conf已生成
[root@RS2 httpd]# ls /etc/httpd/conf.d/
autoindex.conf  README  ssl.conf  userdir.conf  welcome.conf

# 5.修改ssl文件
[root@RS2 httpd]# vim /etc/httpd/conf.modules.d/00-ssl.conf
[root@RS2 httpd]# cat /etc/httpd/conf.modules.d/00-ssl.conf
LoadModule ssl_module modules/mod_ssl.so

# 6.修改DocumentRoot,ServerName,SSLCertificateFile,SSLCertificateKeyFile
# 因为我们没有创建虚拟主机文件,所以我们直接创建一个虚拟主机家目录,然后写一个index.html文件进去,这里指定那个域名目录
[root@RS2 ~]# mkdir -p /var/www/html/www.pupu.com
[root@RS2 ~]# echo "https to RS1" > /var/www/html/www.pupu.com/index.html

# 43 #DocumentRoot "/var/www/html"  取消注释并改为 DocumentRoot "/var/www/html/www.daozhang.com"
# 44 ServerName www.daozhang.com:443  取消注释
# 85 SSLCertificateFile /etc/pki/tls/certs/localhost.crt 改为 SSLCertificateFile /etc/httpd/ssl/httpd.crt
# 93 SSLCertificateFile /etc/pki/tls/certs/localhost.key 改为 SSLCertificateKeyFile /etc/httpd/ssl/httpd.key

# 7.重启httpd服务
[root@RS2 ssl]# systemctl restart httpd

# 这时通过ip可以看到https的页面

DR机部署操作 

# 1.编辑haproxy.cfg文件
# 在上一个监听模板的后面加上这一个模板,表示监听https
[root@DR haproxy]# vim /etc/haproxy/haproxy.cfg 
 listen webclustr_https
    bind 0.0.0.0:443
    mode tcp
    #option httpchk GET /index.html
    log global
    maxconn 3000
    balance roundrobin
    cookie SESSION_COOKIE insert indirect nocache
    server RS1_https 192.168.187.131:443 check inter 2000 fall 5
    server RS2_https 192.168.187.129:443 check inter 2000 fall 5
    #server web01 192.168.80.102:80 cookie web01 check inter 2000 fall 5

# 2.重启服务
[root@DR haproxy]# systemctl restart haproxy

这时可以通过DR机的ip经过负载均衡访问RS1,RS2机的页面

五.haproxy状态页面

通过DR机的8189端口,可以访问haproxy服务的状态页面

用户 admin

密码 admin

登录之后可以看到这样的一个页面,这就是haproxy的状态页面

上面有负载均衡集群几台机器的状态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值