Haproxy

发布时间 2023-04-01 11:54:26作者: A57

Haproxy

负责均衡的作用

  • Web服务器的动态水平扩展--->对用户无感知
  • 增加业务并发访问及处理能力--->解决单服务器瓶颈问题
  • 节约公网IP地址--->降低IT支持成本
  • 隐藏内部服务器IP--->提高内部服务器安全性
  • 配置简单--->固定格式的配置文件
  • 功能丰富--->支持四层和七层,支持动态下线主机(传输层:四层。应用层:七层)
  • 性能较强--->并发数万甚至数十万

负载均衡类型

与lvs的区别

  • lvs是工作在内核级别的,看不到端口,而haproxy是工作的应用层级别的
  • 四层
  • LVS: Liunx Virtual Server
  • Nginx: 1.9之后
  • HaProxy: High Availability Proxy
  • 七层
  • HAProxy
  • Nginx

应用场景

  • 四层:Redis、Mysql、RabbitMQ、Memcache等
  • 七层:Nginx、Tomcat、Apache、PHP、图片、动静分离、API等

安装与部署

  • 内网IP地址划分
# 外部网络
172.16.0.0/16

# 内部网络
10.0.0.0/24

# 可用地址范围
10.0.0.1--10.0.0.254

yum安装

dnf install haproxy -y

rpm -ql haproxy

编译安装

解决lua环境

  • Lua官网:www.lua.org
  • Lua应用场景
  • 游戏开发
  • 独立应用开发
  • Web应用脚本
  • 扩展和数据库插件,如MySQL Proxy
  • 安全系统,如入侵检测系统
# 当前系统版本
lua -v

# 安装基础命令及编译依赖环境
yum install -y gcc readline-devel

wget https://www.lua.org/ftp/lua-5.3.6.tar.gz

tar xvf lua-5.3.6.tar.gz -C /usr/local/src

cd /usr/local/src/lua-5.3.5

make linux test

# 查看编译安装的版本
src/lua -v

编译安装HAProxy

# HAProxy 1.8及1.9版本编译参数:
make ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 PREFIX=/usr/local/haproxy

# HAProxy 2.0以上版本编译参数:
yum install -y gcc openssl-devel pcre-devel systemd-devel

tar xvf haproxy-2.0.26.tar.gz

cd haproxy-2.0.26

# 查看安装方法
ll Makefile

cat README

cat INSTALL

# 编译
make -j 4 TARGET=linux-glibc USE_OPENSSL=1 USE_ZLIB=1 USE_LUA=1 USE_PCRE=1 USE_SYSTEMD=1 LUA_INC=/usr/local/src/lua-5.3.5/src LUA_LIB=/usr/local/src/lua-5.3.5/src

# 安装
make install PREFIX=/apps/haproxy

ln -s /apps/haproxy/sbin/haproxy /usr/sbin/

haproxy -v
  • HAProxy启动文件

cat /usr/lib/systemd/system/haproxy.service
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target

[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

mkdir /var/lib/haproxy/

mkdir /etc/haproxy/

# 配置man日志
vim /etc/man_db.conf
MANDATORY_MANPATH     /apps/haproxy/share/man/

# 更新man数据库
mandb

# 配置文件
vim /etc/haproxy/haproxy.cfg
global
  maxconn 100000
  chroot /apps/haproxy
  stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
  #uid 99
  #gid 99
  user haproxy
  group haproxy
  daemon
  # nbproc 4
  # cpu-map 1 0
  # cpu-map 2 1
  # cpu-map 3 2
  # cpu-map 4 3
  pidfile /var/lib/haproxy/haproxy.pid
  log 127.0.0.1 local2 info

defaults
  option http-keep-alive
  option forwardfor
  maxconn 100000
  mode http
  timeout connect 300000ms
  timeout client 300000ms
  timeout server 300000ms

listen stats
  mode http
  bind 0.0.0.0:9999
  stats enable
  log global
  stats uri    /haproxy-status
  stats auth   haadmin:123456

listen web_port
  bind 10.0.0.7:80
  mode http
  log global
  server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5


useradd -r -s /sbin/nologin -d /var/lib/haproxy haproxy

systemctl daemon-reload

systemctl enable --now haproxy