haproxy服务部署

haproxy

一、haproyx是什么

HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性高可用性,负载均衡负载均衡,以及基于TCP和HTTP的应用程序代理代理。

HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程多进程/9796976)或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型事件驱动模型/1419787)因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

二、负载均衡类型

二层负载均衡(mac)

用于虚拟mac地址方式,外部对虚拟mac地址请求,负载均衡接收后分配给后端实际的mac地址响应。

三层负载均衡(ip)

一般用于虚拟ip地址的方式,外部对虚拟ip地址请求,负载均衡接收后分配给后端实际的ip地址响应。

四层负载均衡(tcp)

在三层负载均衡的基础上,用ip+port接收请求,在转发到对应的机器上。

产品大概有:F5,lvs,nginx,haproxy……

七层负载均衡(http)

根据虚拟的url或者ip,主机名接收请求,在转发到相应的处理服务器上。

产品大概有:haproxy,nginx,apache,mysql proxy……

三、部署haproxy

haproxy源码包下载网站地址

主机名称 IP地址 需要安装的应用 系统版本 LB 192.168.111.141 haproxy centos 8 RS1 192.168.111.142 httpd centos 8 RS2 192.168.111.143 httpd centos 8 client 192.168.111.144 无 centos 8

1.源码部署haproxy

//安装编译环境
[root@LB ~]# yum -y install make gcc pcre-devel bzip2-devel openssl-devel systemd-devel --allowerasing

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

//下载,解压和安装
[root@LB ~]# wget https://src.fedoraproject.org/repo/pkgs/haproxy/haproxy-2.1.3.tar.gz/sha512/4728c1177b2bba69465cbc56b1ed73a1b2d36891ba2d94d29bb49714ad98ccfac4b52947735aded211f0cd8070002f5406ddd77cabd2f8230b00438189dd7a60/haproxy-2.1.3.tar.gz
[root@LB ~]# tar -xzf haproxy-2.1.3.tar.gz
[root@LB ~]# cd haproxy-2.1.3
[root@LB haproxy-2.1.3]# make clean
[root@LB haproxy-2.1.3]# make -j $(grep 'processor' /proc/cpuinfo |wc -l)  \
> TARGET=linux-glibc  \
> USE_OPENSSL=1  \
> USE_ZLIB=1  \
> USE_PCRE=1  \
> USE_SYSTEMD=1
[root@LB haproxy-2.1.3]# make install PREFIX=/usr/local/haproxy
[root@LB haproxy-2.1.3]# cp haproxy  /usr/sbin/

//设置Linux内核参数
[root@LB haproxy-2.1.3]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1
[root@LB haproxy-2.1.3]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1

//配置haproxy服务
[root@LB haproxy-2.1.3]# mkdir /etc/haproxy
[root@LB haproxy-2.1.3]# vim /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 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
    balance roundrobin
    cookie SESSION_COOKIE insert indirect nocache
    server web01 192.168.111.142:80 check inter 2000 fall 5
    #server web01 192.168.111.143:80 cookie web01 check inter 2000 fall 5

//启动haproxy,配置haproxy.service服务单元文件
[root@LB ~]# vim /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@LB ~]# systemctl daemon-reload

//配置日志信息
[root@LB ~]# vim /etc/rsyslog.conf
local0.*        /var/log/haproxy.log
[root@LB ~]# systemctl restart rsyslog
[root@LB ~]# systemctl enable rsyslog
[root@LB ~]# systemctl restart haproxy
[root@LB ~]# systemctl enable haproxy

2.Haproxy搭建http负载均衡

//LB、RS1、RS2都关闭防火墙和selinux
//RS1和RS2部署httpd
#RS1
[root@RS1 ~]# yum -y install httpd
[root@RS1 ~]# echo RS1 > /var/www/html/index.html
[root@RS1 ~]# systemctl enable --now httpd
#RS2
[root@RS2 ~]# yum -y install httpd
[root@RS2 ~]# echo RS2 > /var/www/html/index.html
[root@RS2 ~]# systemctl enable --now httpd
//修改LB的内核参数
[root@LB ~]# vim /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
[root@LB ~]# sysctl -p
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1

//修改haproxy配置文件
[root@LB ~]# vim /etc/haproxy/haproxy.cfg
global
    daemon
    maxconn 256

defaults
    mode http
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

frontend http-in
    bind *:80
    default_backend servers

backend servers
    server web01 192.168.111.142:80
    server web02 192.168.111.143:80

[root@LB ~]# systemctl restart haproxy

//客户端验证
[root@client ~]# curl http://192.168.111.141
RS1
[root@client ~]# curl http://192.168.111.141
RS2
[root@client ~]# curl http://192.168.111.141
RS1
[root@client ~]# curl http://192.168.111.141
RS2

//使用WEB网页访问测试
[root@LB ~]# vim /etc/haproxy/haproxy.cfg
global
    log 127.0.0.1 local0  info
    #log loghost local0 info
    maxconn 256
#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 5000ms
    timeout client 50000ms
    timeout server 50000ms
    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 web01 192.168.111.142:80 check inter 2000 fall 5
    server web02 192.168.111.143:80 cookie web01 check inter 2000 fall 5
[root@LB ~]# systemctl restart haproxy
[root@LB ~]# ss -anlt
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                                0.0.0.0:8189                            0.0.0.0:*
LISTEN           0                128                                0.0.0.0:80                              0.0.0.0:*
LISTEN           0                128                                   [::]:22                                 [::]:*

访问测试

http://IP:8189/haproxy_stats
用户名和密码都为admin

haproxy服务部署

haproxy服务部署

Original: https://www.cnblogs.com/Their-own/p/16735669.html
Author: 事愿人为
Title: haproxy服务部署

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611459/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 最左前缀有手就会,那索引下推呢?

    联合指数的最左侧前缀原则属于高频面试题,大多数学生都必须知道,但不符合最左侧前缀的部分会发生什么(指数向下推) [En] The leftmost prefix principle…

    数据库 2023年5月24日
    084
  • 关于form表单action属性的问题

    通过另一个jsp表单的action跳转到当前jsp undefined* 通过servlet跳转到当前jsp,也就是通过请求转发 <form action="fir…

    数据库 2023年6月16日
    069
  • 数据库设计案例

    简单构建设计数据库 数据库设计案例 描述:简单构建设计数据库 sql代码实现 /* 数据库设计案例 */ — 音乐表 CREATE TABLE Music ( title VAR…

    数据库 2023年6月16日
    0110
  • 使用Docker安装FastDFS

    1. 获取镜像 可以利用已有的FastDFS Docker镜像来运行FastDFS。 获取镜像可以通过下载: sudo docker image pull delron/fastd…

    数据库 2023年6月14日
    096
  • 【SQL实战】一条SQL统计全国各地疫情分布情况

    — 疫情表,三个字段:城市/地区 省份 当前确诊人数DROP TABLE IF EXISTS yiqing;CREATE TABLE datacenter.yiqing…

    数据库 2023年5月24日
    098
  • ajax与thymeleaf分别实现数据传输

    小杰笔记篇: 1:第一种:利用Model和thymeleaf引擎来完成: Controller层: html:引入引擎 第二种方式:ajax: 第一步:创建User实体类假装数据库…

    数据库 2023年6月6日
    090
  • 【StoneDB】从库如何规避不支持的DML和DDL

    (以下情况仅针对StoneDB 1.0版本不支持的部分DML和DDL操作,StoneDB 2.0及以上版本将无需此类操作)在主从复制中,主库的任何更新都将同步到从库。如果从库不想重…

    数据库 2023年5月24日
    091
  • Mysql 触发器

    Mysql触发器 1、1 触发器定义 ​ 触发器是由事件来触发某个操作, 事件包括 insert update delete事件, 优势: 保证数据完整性。 触发器可以帮助记录操作…

    数据库 2023年6月11日
    088
  • windows安装mysql8.0.29(ZIP解压安装版本)

    一. 下载mysql 8.0.29软件包 二. 解压,初始化安装 1,打开下载后文件所在目录,使用解压软件解压,打开文件夹!(如图,文件路径不要出现中文!) 2,创建my.ini文…

    数据库 2023年5月24日
    083
  • 磁盘空间满,如何处理?

    作为运维人员,磁盘空间报警是最寻常遇到的情况,那么遇到空间如何处理呢?这里介绍一下处理办法及处理思路。 操作系统:centos系统 、Ubuntu 1 定位目录 收到空间报警信息,…

    数据库 2023年6月14日
    085
  • MVCC多版本并发控制的理解

    前置知识 当前读与快照读 当前读什么是当前读:读取的是 &#x6700;&#x65B0;的数据,不会读到老数据。 &#x4F55;&#x65F6;&…

    数据库 2023年5月24日
    066
  • postman结合newman生成测试报告

    1. cmd窗口安装newman npm install -g newman 2. cmd窗口安装newman-html报告 nnpm install -g newman-repo…

    数据库 2023年5月24日
    074
  • day02-MySQL基础知识

    MySQL基本知识 1.数据库 1.1.创建数据库 语法: CREATE DATABASE [IF NOT EXISTS] db_name [create_specificatio…

    数据库 2023年6月11日
    095
  • day03-2无异常退出

    多用户即时通讯系统03 4.编码实现02 4.3功能实现-无异常退出系统 4.3.1思路分析 上述代码运行时,在客户端选择退出系统的时候,可以发现程序并没有停止运行,原因是: 退出…

    数据库 2023年6月11日
    083
  • 无根用户管理podman

    在允许没有root特权的用户运行Podman之前,管理员必须安装或构建Podman并完成以下配置 基础设置 cgroup V2Linux内核功能允许用户限制普通用户容器可以使用的资…

    数据库 2023年6月14日
    084
  • Question07-查询学过”张三”老师授课的同学的信息

    * SELECT DISTINCT Student.* FROM Student , SC , Course , Teacher WHERE Student.SID = SC.SI…

    数据库 2023年6月16日
    056
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球