8、负载均衡HAproxy部署
8.1、基本环境说明:
服务器名(centos7) |
ip地址 |
安装软件 |
slave-node1 |
172.16.1.91 |
haproxy1.8.15,tomcat8.5.37(8080、8081实例),JPress,jdk1.8 |
这里只介绍haproxy的部署,其它软件的部署本文就不赘述了。
8.2、编译安装haproxy:
1、安装依赖包:
[root@slave-node1 ~]# yum install openssl openssl-devel gcc pcre pcre-devel systemd-devel -y
2、下载软件包:
[root@slave-node1 ~]# cd /tools/
[root@slave-node1 tools]# wget https://src.fedoraproject.org/repo/pkgs/haproxy/haproxy-1.8.15.tar.gz/sha512/425e1f3a9ab2c2d09934c5d783ad986bd61a638ba6466dd15c20c5b6e7fc3dfad7c398e10bbd336a856ccad29bab0f23e4b9c3d0f17a54b86c8b917e4b974bcb/haproxy-1.8.15.tar.gz
3、编译安装haproxy:
[root@slave-node1 tools]# tar -xzf haproxy-1.8.15.tar.gz
[root@slave-node1 tools]# cd haproxy-1.8.15/
[root@slave-node1 haproxy-1.8.15]# uname -r
3.10.0-862.el7.x86_64
[root@slave-node1 haproxy-1.8.15]# make ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1
#通过查看系统的内核版本可知TARGET=linux310;如果内核大于2.6.28的可以使用TARGET=linux2628;
#USE_SYSTEMD=1为支持使用 -Ws 参数(systemd-aware master-worker 模式)启动Haproxy,从而实现单主进程多子进程运行模式;
[root@slave-node1 haproxy-1.8.15]# make install PREFIX=/application/haproxy-1.8.15/
[root@slave-node1 haproxy-1.8.15]# ln -s /application/haproxy-1.8.15/ /application/haproxy
[root@slave-node1 haproxy-1.8.15]# ln -s /application/haproxy/sbin/haproxy /usr/sbin/haproxy
#启动脚本中(BIN=/usr/sbin/$BASENAME)会用到 /usr/sbin/haproxy 文件。
[root@slave-node1 haproxy-1.8.15]# haproxy -v
HA-Proxy version 1.8.15 2018/12/13
Copyright 2000-2018 Willy Tarreau <willy@haproxy.org>
[root@slave-node1 haproxy-1.8.15]# cd ~
8.3、启动脚本:
[root@slave-node1 ~]# cp -a /tools/haproxy-1.8.15/examples/haproxy.init /etc/init.d/haproxy
# config: /etc/haproxy/haproxy.cfg #/etc/haproxy/是存放配置文件目录的,该目录不存在需要创建。
# pidfile: /var/run/haproxy.pid #该/var/run/是存放pid文件的,该目录存在,不需要创建。
[root@slave-node1 ~]# chmod 755 /etc/init.d/haproxy
8.4、配置文件:
1、创建haproxy用户:
[root@slave-node1 ~]# useradd -M -s /sbin/nologin haproxy
2、创建存放配置文件的目录:
[root@slave-node1 ~]# mkdir -p /etc/haproxy/
3、创建存放socket文件的目录:
[root@slave-node1 ~]# mkdir -p /var/lib/haproxy/
4、配置文件(基于source算法解决session问题):
[root@slave-node1 ~]# vim /etc/haproxy/haproxy.cfg
global
#全局配置,属于进程级的配置,和操作系统有关
log 127.0.0.1 local3 info
############################################################
#haproxy的日志输出和级别{err|waning|info|debug}
#指定使用127.0.0.1上的syslog服务中的local3日志设备,记录日志等级为info的日志
############################################################
chroot /var/lib/haproxy
#haproxy的工作目录;
pidfile /var/run/haproxy.pid
#守护进程方式下的pid文件存放位置;
maxconn 100000
#最大连接数;
user haproxy
group haproxy
#haproxy进程使用的用户和组,也可以使用uid,gid关键字替代;
daemon
#以守护进程的方式运行;
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
stats timeout 2m
#定义统计信息保存的位置,主要用于动态管理haproxy;
nbproc 1
#进程数,一般是服务器的核心数;
defaults
#默认配置,作用下面的listen,frontend,backend组件,如果下面组件有相同的配置,
#则会覆盖defaults的配置;
mode http
#{tcp|http|health},tcp是4层,http是7层,health是健康检查,只会返回OK;
log global
#引入global模块中定义的日志格式;
option httplog
#日志类别为http日志格式;
option dontlognull
#如果产生了一个空连接,那这个空连接的日志将不会记录;
option http-server-close
############################################################
#打开http协议中服务器端关闭功能,使得支持长连接,使得会话
#可以被重用;
############################################################
option forwardfor except 127.0.0.0/8
#haproxy后端服务器获取客户端的真实ip;
option redispatch
############################################################
#当haproxy后端服务器挂掉,haproxy将用户的访问转移到一个健
#康的后端服务器;
############################################################
retries 3
############################################################
#向haproxy后端服务器尝试连接的最大次数,超过此值就认为后
#端服务器不可用;
############################################################
timeout http-request 10s
#客户端发送http请求haproxy的超时时间;
timeout queue 1m
############################################################
#当haproxy后端服务器在高负载响应时,把haproxy发送来的
#请求放进队列中的超时时间;
############################################################
timeout connect 10s
#haproxy与后端服务器连接超时时间;
timeout client 1m
#定义客户端与haproxy的非活动连接的超时时间;
timeout server 1m
#定义haproxy与后端服务器非活动连接的超时时间;
timeout http-keep-alive 10s
#保持tcp的长连接,减少tcp重复连接的次数;
timeout check 10s
#健康监测超时时间;
maxconn 100000
#最大连接数;
listen stats
#监听haproxy实例状态配置,定义一个名为stats的部分
bind 172.16.1.91:9999
#定义监听的套接字
stats enable
#开启监听统计页面
stats refresh 30s
#设置统计页面的刷新间隔为30s
stats uri /haproxy-status
#设置统计页面的访问地址为http://172.16.1.91:9999/haproxy-status
stats auth haproxy:123456
#设置统计页面认证的用户和密码,如果要设置多个,另起一行写入即可
stats hide-version
#隐藏统计页面上的haproxy版本信息
stats realm "Private lands"
#设置统计页面认证时弹出对话框的提示内容
frontend frontend_www_example_com
#接收请求的前端虚拟节点配置;
bind 0.0.0.0:80
default_backend backend_www_example_com
backend backend_www_example_com
#后端服务器集群配置;
option forwardfor header X-REAL-IP
#获取客户端的真实ip
option httpchk HEAD / HTTP/1.0
#健康检查
balance source
#是基于请求源IP的算法,会不公平,但是能解决session问题;
server web-node1 172.16.1.91:8080 check inter 2000 rise 3 fall 2 weight 1
############################################################
#server:定义后端真实服务器;
#web-node1:定义后端服务器的名称,可以随意写;
#172.16.1.91:8080:后端服务器的ip及端口号;
#check inter 2000:开启对后端服务器健康检查的功能,时间间隔为2s;
#rise:后端服务器从故障状态转换至正常状态需要成功检查的次数;
#fall:后端服务器从正常状态转换为不可用状态需要检查的次数;
#weight:后端服务器的权重,默认1,最大256,0不参与负载均衡;
############################################################
server web-node2 172.16.1.91:8081 check inter 2000 rise 3 fall 2 weight 1
5、配置文件说明:
(1)frontend配置说明:
frontend frontend_www_liu_com
#定义一个名为frontend_www_liu_com的前端部分
bind 0.0.0.0:80
#frontend_www_liu_com定义前端部分监听的套接字
acl www_chang_com hdr_dom(host) -i www.chang.com
#定义一个名叫www_chang_com的acl,当使用www.chang.com域名访问时会被匹配到,-i 表示忽略域名大小写。
use_backend backend_www_chang_com if www_chang_com
#如果满足策略www_chang_com时,就将请求交予backend_www_chang_com
default_backend backend_www_liu_com
#如果不满足acl策略时,就将请求交予backend_www_liu_com
(2)Backend 配置说明(基于source算法解决session问题):
1)通过监听端口进行健康检查:
这种检测方式,haproxy 只会去检查后端 server 的端口,并不能保证服务的真正可用
backend backend_www_chang_com
option forwardfor header X-REAL-IP
#获取客户端的真实ip
option httpchk
#基于端口进行检查
balance source
#基于请求源IP的算法
server web-node1 172.16.1.91:8080 check inter 2000 rise 3 fall 2 weight 1
server web-node2 172.16.1.92:8080 check inter 2000 rise 3 fall 2 weight 1 back
server语法:
server [:port] [param*]
server:使用server关键字来设置后端服务器;
web-node2:为后端服务器所设置的内部名称,该名称将会呈现在日志或警报中;
172.16.1.92:8080:后端服务器的IP地址,支持端口映射;
check:接受健康监测;
inter 2000:监测的间隔时长,单位毫秒;
rise 3:监测正常多少次后被认为后端服务器是可用的;
fall 2:监测失败多少次后被认为后端服务器是不可用的;
weight 1:分发的权重;
back:备份用的后端服务器,当正常的服务器全部都宕机后,才会启用备份服务器。
2)通过url获取进行健康检查:
这种检测方式,通过GET后端server的web页面,基本上可以代表后端服务的可用性
backend backend_www_liu_com
option forwardfor header X-REAL-IP
option httpchk GET /index.html
balance source
server web-node1 172.16.1.93:8080 check inter 2000 rise 3 fall 2 weight 1
3)通过head消息头进行健康检查,只需加入下面一行参数即可:
option httpchk HEAD / HTTP/1.0
8.5、配置haproxy日志:
1、确保安装了rsyslog软件:
[root@slave-node1 ~]# rpm -q rsyslog
rsyslog-8.24.0-16.el7.x86_64
[root@slave-node1 ~]# systemctl start rsyslog.service
[root@slave-node1 ~]# systemctl enable rsyslog.service
2、配置/etc/rsyslog.conf参数:
(1)将如下两行注释打开:
$ModLoad imudp
$UDPServerRun 514
[root@slave-node1 ~]# sed -i 's@\#\$ModLoad imudp@\$ModLoad imudp@g' /etc/rsyslog.conf
[root@slave-node1 ~]# sed -i 's@\#\$UDPServerRun 514@\$UDPServerRun 514@g' /etc/rsyslog.conf
(2)添加haproxy日志收集设备参数到/etc/rsyslog.conf文件:
[root@slave-node1 ~]# echo "local3.* /var/log/haproxy.log" >> /etc/rsyslog.conf
(3)重启rsyslog服务:
[root@slave-node1 ~]# systemctl restart rsyslog.service
8.6、启动haproxy:
[root@slave-node1 ~]# /etc/init.d/haproxy start
Starting haproxy (via systemctl): [ 确定 ]
[root@slave-node1 ~]# netstat -tunlp | grep haproxy
8.7、启动tomcat多实例:
[root@slave-node1 ~]# for n in {0..1};do su - tomcat /application/tomcat-808$n/bin/startup.sh;sleep 10s;done
[root@slave-node1 application]# netstat -tunlp | egrep "8080|8081"
8.8、访问haproxy统计界面:
1、http://172.16.1.91:9999/haproxy-status
2、统计界面:
8.9、访问负载均衡器:
测试方法为:将tomcat8080实例干掉,发现还能够访问web服务,说明haproxy负载均衡服务搭建成功。
8.10、验证日志:
[root@slave-node1 ~]# tail -3 /var/log/haproxy.log
8.11、haproxy动态维护:
1、确保/etc/haproxy/haproxy.cfg配置文件中的global下有如下配置:
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
stats timeout 2m
2、安装socat:
该软件是用来和socket文件进行通讯的。
(1)安装:
[root@slave-node1 ~]# yum install socat -y
(2)查看关于haproxy的帮助:
[root@slave-node1 ~]# echo "help" | socat stdio /var/lib/haproxy/haproxy.sock
(3)查看 haproxy 状态信息,可以通过zabbix来监控相关的状态值:
[root@slave-node1 ~]# echo "show info" | socat stdio /var/lib/haproxy/haproxy.sock
3、haproxy维护模式:
(1)关闭backend_www_example_com下的web01-node1,即tomcat8080实例:
[root@slave-node1 ~]# echo "disable server backend_www_example_com/web-node1" | socat stdio /var/lib/haproxy/haproxy.sock
查看状态:
在web服务器是维护状态下可以对web服务进行配置。
(2)启动backend_www_example_com下的web01-node1,即tomcat8080实例:
说明:此操作对现有的server生效,不支持新增加节点。
[root@slave-node1 ~]# echo "enable server backend_www_example_com/web-node1" | socat stdio /var/lib/haproxy/haproxy.sock
查看状态:
8.12、补充:
1、haproxy的本地端口会出现用尽的情况,解决办法如下:
(1)调整文件描述符大小:
echo '* - nofile 65535' >>/etc/security/limits.conf
ulimit -SHn 65535
ulimit -n
(2)内核参数设置:
1)配置内核参数:
cat >>/etc/sysctl.conf<<EOF
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65535
EOF
说明:
net.ipv4.tcp_tw_reuse = 1
# 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭。
net.ipv4.ip_local_port_range = 1024 65535
#指定外部连接的端口范围。默认值为32768 61000
2)内核参数生效:
sysctl -p
2、haproxy和nginx的比较:
8、负载均衡HAproxy部署的更多相关文章
- Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)
Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...
- LVS负载均衡群集部署——DR模式
LVS负载均衡群集部署--DR模式 1.LVS-DR概述 2.部署实验 1.LVS-DR概述: LVS-DR(Linux Virtual Server Director Server)工作模式,是生产 ...
- LVS负载均衡群集部署——NAT模式
LVS负载均衡群集部署--NAT模式 1.群集应用概述 2.NAT模式LVS负载均衡群集部署 1.群集应用概述: 存在的问题: 互联网应用中,随着站点对硬件性能.响应速度.服务稳定性.数据可靠性等要求 ...
- NAT模式 LVS负载均衡群集部署
NAT模式 LVS负载均衡群集部署的操作步骤 实验环境准备: 负载调度器:内网关 ens33:172.16.10.1,外网关 ens37:12.0.0.1 Web节点服务器1:172.16.10.10 ...
- 一个空行引起的阿里云负载均衡上部署https证书的问题
今天在阿里云上购买了WoSign的https证书,在证书签发后,在控制台下载证书文件,一共有2个文件,一个是.key文件(私钥文件),一个是.pem文件(证书文件). 然后在阿里云负载均衡“证书管理” ...
- 七层负载均衡——HAProxy
HAProxy入门 HAProxy是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的.借助HAProxy可以快速并且可靠的提供基于TCP ...
- 负载均衡-haproxy安装配置
HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持 ...
- 使用Ansible实现nginx+keepalived高可用负载均衡自动化部署
本篇文章记录通过Ansible自动化部署nginx的负载均衡高可用,前端代理使用nginx+keepalived,端web server使用3台nginx用于负载效果的体现,结构图如下: 部署前准备工 ...
- 高可用负载均衡 haproxy+keepalived
服务器 20.0.0.206 10.0.0.206 bs-hk-hk01 高可用负载均衡节点 2c2g 20.0.0.207 10.0.0.207 bs-hk-hk02 高可用负载均衡节点 ...
随机推荐
- [web] 虚拟机网络设置
三种模式 桥接(Bridged):主机网卡--虚拟网桥--虚拟机网卡,把主机虚拟为交换机,虚拟机ip需与主机设置在同一网段,网关与DNS与主机网卡一致 地址转换(NAT):主机网卡--虚拟NAT设备- ...
- CSS中的颜色、长度、角度、时间
一.颜色的表示方法 颜色是通过对红.绿和蓝光的组合来显示的. 1.颜色名 1 <!DOCTYPE html> 2 <html lang="en"> 3 &l ...
- 攻防世界(一)baby_web
攻防世界系列:baby_web 方法一: 按照提示,初始界面自然想到index.php,访问后界面(注意到URL)仍是1.php 打开hackbar查看响应,发现确实有index.php点开看到了Fl ...
- MYSQL导入/迁移后事件不执行
mysql迁移后事件不执行 查看数据库是否开启事件支持 mysql> show variables like 'event_scheduler'; +-----------------+---- ...
- 【排除解决】System.Runtime.InteropServices.ExternalException (0x80004005): GDI+ 中发生一般性错误
前言: 今天项目发布上线,发布到正式环境验证功能的时候忽然方向之前做的一个图片合成的功能报错了提示:System.Runtime.InteropServices.ExternalException ( ...
- 004:ZYNQ_AXI总线学习笔记(1)
1. WHAT IS AXI? AXI是一种高级可扩展接口,是ARM AMBA的一部分. 2. WHAT IS AMBA? AMBA是高级微控制器总线架构,开放的片内互联总线标准. 3.A ...
- (续篇)Selenium 安装配置以及如何解决('chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/ch)或者(unknown error:cannot find Chrome binary)问题?
注:本帖针对小小白哦~~(づ ̄3 ̄)づ╭- 接pip安装的帖子,不需要的直接跳过... 首先上图,出现如下的错误,那你可是找到知己了: 或者: 抱歉抱歉,这图截的不太清晰,凑合着用吧,但是也能看出来错 ...
- Yolo:实时目标检测实战(上)
Yolo:实时目标检测实战(上) YOLO:Real-Time Object Detection 你只看一次(YOLO)是一个最先进的实时物体检测系统.在帕斯卡泰坦X上,它以每秒30帧的速度处理图像, ...
- MindSpore应用目标
MindSpore应用目标 以下将展示MindSpore近一年的高阶计划,会根据用户的反馈诉求,持续调整计划的优先级. 总体而言,会努力在以下几个方面不断改进. 1. 提供更多的预置模型支持. 2. ...
- MindInsight张量可视设计介绍
MindInsight张量可视设计介绍 特性背景 张量可视,能够帮助用户直观查看训练过程中的Tensor值,既支持以直方图的形式呈现Tensor的变化趋势,也支持查看某次step的具体Tensor值. ...