IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> HAProxy搭建web集群 -> 正文阅读

[网络协议]HAProxy搭建web集群

目录

一,HAProxy介绍

1,HAProxy简介

2,HAProxy的主要特性

3,HAProxy常见负载均衡策略

4,LVS、Nginx、HAproxy的区别

二,配置HAProxy+Nginx负载均衡

三,HAProxy日志管理


一,HAProxy介绍

1,HAProxy简介

HAProxy是法国开发者威利塔罗(Willy Tarreau)在2000年使用C语言编写的自由及开放源代码软件,其提供高可用性,负载均衡,以及基于TCP和HTTP的应用程序代理。HProxy非常适用于并发大(并发达1w以上) web站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到网络上。

支持功能

  • TCP 和 HTTP反向代理

  • SSL/TSL服务器

  • 可以针对HTTP请求添加cookie,进行路由后端服务器

  • 可平衡负载至后端服务器,并支持持久连接

  • 支持所有主服务器故障切换至备用服务器

  • 支持专用端口实现监控服务

  • 支持停止接受新连接请求,而不影响现有连接

  • 可以在双向添加,修改或删除HTTP报文首部

  • 响应报文压缩

  • 支持基于pattern实现连接请求的访问控制

  • 通过特定的URI为授权用户提供详细的状态信息

2,HAProxy的主要特性

  1. 靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;

  2. 最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;

  3. 支持多达8种负载均衡算法,同时也支持会话保持;

  4. 支持虚拟机主机功能,从而实现web负载均衡更加灵活;

  5. 支持连接拒绝、全透明代理等独特的功能;

  6. 拥有强大的ACL支持,用于访问控制;

  7. 其独特的弹性二义树数据结构,使数据结构的复杂性上升到了0(1),即数据的查寻速度不会随着数据条日的增加而速度有所下降;·支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成;

  8. 支持TCP加速,零复制功能,类似于mmap机制;

  9. 支持响应池(response buffering) ;

  10. 支持RDP协议;

  11. 基于源的粘性,类似nginx的ip hash功能,把来自同一客户端的请求在一定时间内始终调度到上游的同一服务器;·更好统计数据接口,其web接口显示后端集群中各个服务器的接收、发送、拒绝、错误等数据的统计信息;

  12. 详细的健康状态检测,web接口中有关于对上游服务器的健康检测状态,并提供了一定的管理功能;

  13. 基于流量的健康评估机制;

  14. 基于http认证;

  15. 基于命令行的管理接口;

  16. 日志分析器,可对日志进行分析。

3,HAProxy常见负载均衡策略

(1) roundrobin,表示简单的轮询

(2) static-rr,表示根据权重

(3) leastconn,表示最少连接者先处理

( 4) source,表示根据请求源IP

(5) uri,表示根据请求的URI,做cdn需使用;

(6) url param,表示根据请求的URl参数' balance url param’requires an URL parameter name

(7) hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

(8) rdp-cookie (name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

4,LVS、Nginx、HAproxy的区别

  1. VS基于Linux操作系统实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;

  2. LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;

  3. LVs因为工作在TCP模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URI等多种状态检测方式;

  4. HAProxy功能强大,但整体性能低于4层模式的IVS负载均衡。

  5. Ngrinx主要用于web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是对群集节点健康检查功能不强,性能没有Haproxy好。

二,配置HAProxy+Nginx负载均衡

环境准备

haproxy服务器:192.168.18.100
nginx1:192.168.18.90
nginx2:192.168.18.91

配置nginx1服务:192.168.18.90

关闭防火墙和setenforce

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0

安装nginx环境依赖包

[root@localhost ~]# yum -y install pcre-devel zlib-devel gcc gcc-c++ make

解压软件包

[root@localhost opt]# ls
nginx-1.12.0.tar.gz
[root@localhost opt]# tar xzf nginx-1.12.0.tar.gz 
[root@localhost opt]# ls
nginx-1.12.0  nginx-1.12.0.tar.gz
[root@localhost opt]# cd nginx-1.12.0/
[root@localhost nginx-1.12.0]# ls
auto     CHANGES.ru  configure  html     man     src
CHANGES  conf        contrib    LICENSE  README

编译安装

[root@localhost nginx-1.12.0]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module
[root@localhost nginx-1.12.0]# make && make install

创建管理用户

[root@localhost nginx-1.12.0]# useradd -M -s /sbin/nologin nginx

添加systemctl服务

[root@localhost html]# vim /lib/systemd/system/nginx.service

t]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

开启服务

[root@localhost nginx-1.12.0]# systemctl daemon-reload
[root@localhost nginx-1.12.0]# systemctl start nginx

测试服务

[root@localhost html]# ss -natp |grep nginx
LISTEN     0      128          *:80                       *:*                   users:(("nginx",pid=5665,fd=6),("nginx",pid=5664,fd=6))

网页测试

添加站点文件

[root@localhost sbin]# cd /usr/local/nginx/html/
[root@localhost html]# vim test.html

this is 90 web

网页测试

配置nginx2服务:192.168.18.91

?关闭防火墙和setenforce

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0

安装nginx环境依赖包

[root@localhost ~]# yum -y install pcre-devel zlib-devel gcc gcc-c++ make

解压软件包

[root@localhost opt]# ls
nginx-1.12.0.tar.gz
[root@localhost opt]# tar xzf nginx-1.12.0.tar.gz 
[root@localhost opt]# ls
nginx-1.12.0  nginx-1.12.0.tar.gz
[root@localhost opt]# cd nginx-1.12.0/
[root@localhost nginx-1.12.0]# ls
auto     CHANGES.ru  configure  html     man     src
CHANGES  conf        contrib    LICENSE  README

编译安装

[root@localhost nginx-1.12.0]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module
[root@localhost nginx-1.12.0]# make && make install

创建管理用户

[root@localhost nginx-1.12.0]# useradd -M -s /sbin/nologin nginx

添加systemctl服务

[root@localhost html]# vim /lib/systemd/system/nginx.service

t]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

开启服务

[root@localhost nginx-1.12.0]# systemctl daemon-reload
[root@localhost nginx-1.12.0]# systemctl start nginx

测试服务

[root@localhost html]# ss -natp|grep nginx
LISTEN     0      128          *:80                       *:*                   users:(("nginx",pid=7738,fd=6),("nginx",pid=7737,fd=6))

网页测试

?添加站点文件

[root@localhost sbin]# cd /usr/local/nginx/html/
[root@localhost html]# vim test.html

this is 91 web

网页测试?

haproxy服务器:192.168.18.100

关闭防火墙和setenforce

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0

安装haproxy环境依赖包

[root@localhost opt]# yum -y install pcre-devel bzip2-devel gcc gcc-c++ make

将安装包解压并切换目录

[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# ls
haproxy-1.4.24.tar.gz
[root@localhost opt]# tar xzf haproxy-1.4.24.tar.gz 
[root@localhost opt]# ls
haproxy-1.4.24  haproxy-1.4.24.tar.gz
[root@localhost opt]# cd haproxy-1.4.24/

?编译安装

[root@localhost haproxy-1.4.24]# make TARGET=linux2628 ARCH=X86_64
[root@localhost haproxy-1.4.24]# make install
install -d /usr/local/sbin
install haproxy /usr/local/sbin
install -d /usr/local/share/man/man1
install -m 644 doc/haproxy.1 /usr/local/share/man/man1
install -d /usr/local/doc/haproxy
for x in configuration architecture haproxy-en haproxy-fr; do \
	install -m 644 doc/$x.txt /usr/local/doc/haproxy ; \
done

将配置文件拷贝到/etc/haproxy/目录下(不破坏源文件,方便操作习惯)

[root@localhost haproxy-1.4.24]# mkdir /etc/haproxy
[root@localhost haproxy-1.4.24]# ls
CHANGELOG  examples  Makefile      ROADMAP  TODO
contrib    haproxy   Makefile.bsd  src      VERDATE
doc        include   Makefile.osx  SUBVERS  VERSION
ebtree     LICENSE   README        tests
[root@localhost haproxy-1.4.24]# cd examples/
[root@localhost examples]# ls
acl-content-sw.cfg        haproxy.cfg
auth.cfg                  haproxy.init
build.cfg                 haproxy.spec
check                     haproxy.vim
check.conf                init.haproxy
config.rc.haproxy         init.haproxy.flx0
content-sw-sample.cfg     linux-2.4.21-40.EL-custom.diff
cttproxy-src.cfg          option-http_proxy.cfg
debug2ansi                rc.highsock
debug2html                stats_haproxy.sh
debugfind                 tarpit.cfg
errorfiles                test-section-kw.cfg
examples.cfg              url-switching.cfg
haproxy-1.1.21-flx.1.pkg
[root@localhost examples]# cp haproxy.cfg /etc/haproxy/

修改配置文件

[root@localhost haproxy]# vim haproxy.cfg 

# this config needs haproxy-1.1.28 or haproxy-1.2.1

global
        log /dev/log    local0 info    ##修改日志文件都是local0
        log /dev/log    local0 notice
        #log loghost    local0 info
        maxconn 4096
        #chroot /usr/share/haproxy     ##注释掉根目录
        uid 99
        gid 99
        daemon
        nbproc 1                       ##设置服务器1核
        #debug
        #quiet

defaults                               ##此处配置默认即可
        log     global               
        mode    http
        option  httplog
 option  dontlognull
        retries 3
        redispatch                
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000
  
listen  webcluster 0.0.0.0:80             ##监控端口选择nginx服务端口80端口   
        option httpchk GET /test.html     ##定义站点文件
        balance roundrobin
        server  inst1 192.168.18.90:80  check inter 2000  fall 3     ##定义真实服务器
        server  inst1 192.168.18.91:80  check inter 2000  fall 3

设置service启动

[root@localhost examples]# cp haproxy.init /etc/init.d/haproxy   #让service可以启动服务
[root@localhost examples]# cd /etc/init.d/
[root@localhost init.d]# ls
functions  haproxy  netconsole  network  README
[root@localhost init.d]# chmod +x haproxy 
[root@localhost init.d]# chkconfig --add haproxy
[root@localhost init.d]# ln -s /usr/local/sbin/haproxy /usr/sbin/  #添加进全局变量

开启服务

[root@localhost haproxy]# service haproxy start 
Starting haproxy (via systemctl):                          [  确定  ]
[root@localhost haproxy]# 

测试负载均衡

[root@localhost haproxy]# curl 192.168.18.100/test.html
this is 91 web
[root@localhost haproxy]# 
[root@localhost haproxy]# curl 192.168.18.100/test.html
this is 90 web
[root@localhost haproxy]# curl 192.168.18.100/test.html
this is 91 web
[root@localhost haproxy]# curl 192.168.18.100/test.html

网页测试负载均衡

三,HAProxy日志管理

在haproxy服务器上修改配置文件

[root@localhost haproxy]# vim /etc/haproxy/haproxy.cfg 

# this config needs haproxy-1.1.28 or haproxy-1.2.1

global
        log 127.0.0.1   local0 info
        log 192.168.18.91       local6 info      ##定义日志位置

重启服务

[root@localhost haproxy]# service haproxy restart 
Restarting haproxy (via systemctl):                        [  确定  ]

在192.168.18.91上修改日志配置文件

[root@localhost haproxy]# vim /etc/rsyslog.conf 
 11 #$ModLoad imklog # reads kernel messages (the same are read from     journald)
 12 #$ModLoad immark  # provides --MARK-- message capability
 13 
 14 # Provides UDP syslog reception
 15 $ModLoad imudp                    ##将15,16行注释打开
 16 $UDPServerRun 514


73 local7.*                                            /var/log/boot.log  #复制73行
74 local6.*                                            /var/log/haproxy.log ##定义日志路径

重启服务

[root@localhost haproxy]# service haproxy restart 

在haproxy上访问服务

[root@localhost haproxy]# curl 192.168.18.100/test.html
this is 90 web
[root@localhost haproxy]# curl 192.168.18.100/test.html
this is 91 web
[root@localhost haproxy]# curl 192.168.18.100/test.html
this is 90 web
[root@localhost haproxy]# curl 192.168.18.100/test.html
this is 91 web

在192.168.18.91上查看是否有日志

[root@localhost /]# cd /var/log
[root@localhost log]# cat haproxy.log 
[root@localhost log]# cat haproxy.log 
Nov 22 16:23:59 192.168.18.100 haproxy[17683]: 192.168.18.100:54542 [22/Nov/2021:16:23:59.937] webcluster webcluster/inst1 0/0/0/0/0 200 250 - - ---- 0/0/0/0/0 0/0 "GET /test.html HTTP/1.1"
Nov 22 16:24:01 192.168.18.100 haproxy[17683]: 192.168.18.100:54550 [22/Nov/2021:16:24:01.495] webcluster webcluster/inst1 0/0/0/0/1 200 250 - - ---- 0/0/0/0/0 0/0 "GET /test.html HTTP/1.1"
Nov 22 16:29:34 192.168.18.100 haproxy[17683]: 192.168.18.100:55220 [22/Nov/2021:16:29:34.590] webcluster webcluster/inst1 0/0/0/0/0 200 250 - - ---- 0/0/0/0/0 0/0 "GET /test.html HTTP/1.1"
Nov 22 16:29:35 192.168.18.100 haproxy[17683]: 192.168.18.100:55226 [22/Nov/2021:16:29:35.715] webcluster webcluster/inst1 0/0/0/0/0 200 250 - - ---- 0/0/0/0/0 0/0 "GET /test.html HTTP/1.1"

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-23 12:43:57  更:2021-11-23 12:45:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:43:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码