CentOS7配置Haproxy(1) 编译安装haproxy

HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

该文档在CentOS7.6系统下进行编译安装haproxy 1.8.25(长期支持版本TLS)。如果要通过keepalived配置高可用,参考编译安装keepalived

主机名称ip地址操作系统角色软件版本备注
opsproxy-shqs-110.99.73.38CentOS 7.6haproxy1.8.25长期支持版本LTS

一、编译安装haproxy

1.1 下载haproxy源码包

wget http://www.haproxy.org/download/1.8/src/haproxy-1.8.25.tar.gz
tar zxvf haproxy-1.8.25.tar.gz

1.2 编译安装haproxy

我的编译软件统一安装在/opt/app/install/目录下面,然后软连接到/opt/app/下面。所以这里设置haproxy的安装目录为/opt/app/install/haproxy

# 准备编译环境
yum install -y gcc gcc-c++ pcre pcre-devel openssl openssl-devel systemd-devel

# 切换到haproxy源码根目录
cd haproxy-1.8.25

# 编译 linux内核版本大于2.6.28的都可以使用TARGET=linux2628
make ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 PREFIX=/opt/app/install/haproxy

# 安装
make install PREFIX=/opt/app/install/haproxy

# 可执行文件拷贝一份到系统执行文件目录,该目录在path变量里面,可以直接使用haproxy命令
cp haproxy /usr/sbin/

# 软连接(这一步谨是我自己对软件目录管理的需求)
ln -s /opt/app/install/haproxy /opt/app/haproxy

# 配置haproxy用户和组。因为yum安装haproxy生成的也是这个ID,这里组/用户ID设置为188,仅仅是为了保持一致,其实设置为多少都可以。
groupadd -g 188 haproxy
useradd -u 188 -g 188 -r -s /sbin/nologin haproxy

# haproxy附加参数文件,这个可以不用设置的,这里是为了和yum安装方式保持一致。
touch /etc/sysconfig/haproxy
vi /etc/sysconfig/haproxy
OPTIONS=""

# pid文件放置目录,目录可以自己定义在启动脚本里面使用
mkdir /opt/app/haproxy/run 

# socket方式的相关文件目录,这里没有用到
# mkdir /var/lib/haproxy
# chown -R haproxy:haproxy /var/lib/haproxy/

1.3 haproxy配置文件

这里仅仅是一个简单的配置文件,只是配置了一个统计服务stats,并没有配置实际的业务服务代理。部署验证这些就够了。
配置文件目录/opt/app/haproxy/haproxy.cfg

vi /opt/app/haproxy/haproxy.cfg

global
  user     haproxy
  group    haproxy
  daemon
  nbproc   2
  #cpu-map  1  0
  #cpu-map  2  1
  maxconn  100000
  chroot   /opt/app/haproxy
  pidfile  /opt/app/haproxy/run/haproxy.pid
  log      127.0.0.1 local0 info

defaults
  log      global
  option   httplog
  option   http-keep-alive
  option   redispatch
  option   forwardfor
  maxconn  100000
  mode     http
  retries  3
  timeout  check 5s
  timeout  connect 5s
  timeout  client 60s
  timeout  server 60s
  timeout  http-request 10s
  timeout  queue 1m

listen stats
  bind     0.0.0.0:1234
  log      global
  mode     http
  stats    enable
  stats    hide-version
  stats    realm Haproxy\ Statistics
  stats    uri     /stats
  stats    refresh 5s
  stats    auth    admin:admin

1.4 配置system自启动文件

  • 编写配置文件

    vi /usr/lib/systemd/system/haproxy.service
    
    [Unit]
    Description=HAProxy Load Balancer
    After=syslog.target network.target
    
    [Service]
    EnvironmentFile=/etc/sysconfig/haproxy
    ExecStartPre=/usr/sbin/haproxy -f /opt/app/haproxy/haproxy.cfg -c -q
    ExecStart=/usr/sbin/haproxy -Ws -f /opt/app/haproxy/haproxy.cfg -p /opt/app/haproxy/run/haproxy.pid
    ExecReload=/bin/kill -USR2 $MAINPID
    KillMode=mixed
    
    [Install]
    WantedBy=multi-user.target
    
  • 加载文件

    systemctl daemon-reload
    
  • 配置自启动

    systemctl enable haproxy
    
  • 启动服务

    systemctl start haproxy
    systemctl status haproxy
    
    netstat -pltn
    tcp        0      0 0.0.0.0:1234            0.0.0.0:*               LISTEN      20808/haproxy 
    
  • 访问http://10.99.73.38:1234/stats
    *

1.5 配置记录Haproxy访问日志

  • 根据haproxy.cfg配置文件里面配置log 127.0.0.1 local0 info进行配置
    yum -y install rsyslog
    touch /etc/rsyslog.d/haproxy.conf
    
    vi /etc/rsyslog.d/haproxy.conf
    
    $ModLoad imudp
    $UDPServerRun 514
    local0.* /var/log/haproxy.log
    
    
  • 重新启动rsyslog生效配置
    systemctl restart rsyslog
    
  • 日志访问
    # 需要访问过haproxy才会生成文件以及内容
    tail -f /var/log/haproxy.log
    
    Jul  2 22:50:51 localhost haproxy[18038]: 127.0.0.1:46154 [02/Jul/2020:22:50:51.310] stats stats/<STATS> -1/-1/-1/-1/0 401 262 - - PR-- 1/1/0/0/3 0/0 "GET /stats HTTP/1.1"
    Jul  2 22:50:51 localhost haproxy[18038]: 127.0.0.1:46154 [02/Jul/2020:22:50:51.310] stats stats/<STATS> -1/-1/-1/-1/0 401 262 - - PR-- 1/1/0/0/3 0/0 "GET /stats HTTP/1.1"
    

二、配置业务代理

2.1 docker镜像仓库harbor代理实例配置

主机名称ip地址操作系统角色端口备注
opsharbor-shqs-110.99.73.38CentOS 7.6docker hub<主节点>80 自动跳转443
443
前面实际是一个nginx
opsharbor-shqs-210.99.73.39CentOS 7.6docker hub<从节点>80 自动跳转443
443
前面实际是一个nginx

这里我们使用haproxy来代理harbor,并使用tcp协议代理,实际处理流程交给后端的nginx处理

client --> haproxy-1(master-vip)  --> harbor-1 
           |                      \  /
           |                       / \
           + haproxy-2(backup)     -->   harbor-2
这里的配置适合haproxy+keepalived与harbor不在同一组服务器上的方式,如果在同一组服务器上由于VIP只在一台服务器上,haproxy相同的配置导致从节点监控VIP:port无法启动。

如果确实在一组服务器上,需要配置一个健康脚本,让VIP所在节点haproxy运行,而非VIP节点haproxy停止运行。并实时监控切换。
global
  user     haproxy
  group    haproxy
  daemon
  nbproc   2
  #cpu-map  1  0
  #cpu-map  2  1
  maxconn  100000
  chroot   /opt/app/haproxy
  pidfile  /opt/app/haproxy/run/haproxy.pid
  log      127.0.0.1 local0 info

defaults
  log      global
  mode     http
  maxconn  100000
  option   httplog
  option   dontlognull
  option   http-keep-alive
  option   redispatch
  #option   forwardfor
  retries  3
  timeout  check 10s
  timeout  connect 100s
  timeout  client 3600s
  timeout  server 3600s
  timeout  http-request 100s
  timeout  queue 1m

listen stats 
  bind     0.0.0.0:1234
  log      global
  mode     http
  stats    enable
  stats    hide-version
  stats    realm Haproxy\ Statistics
  stats    uri /stats
  stats    auth    admin:admin

listen harbor_http
  bind :80
  balance first
  mode tcp
  option tcplog
  server harbor_1 10.99.73.38:80 check inter 20000 rise 2 fall 5
  server harbor_2 10.99.73.39:80 backup check inter 20000 rise 2 fall 5

listen harbor_https
  bind :443
  balance first
  mode tcp
  option tcplog
  server harbor_1 10.99.73.38:443 check inter 20000 rise 2 fall 5
  server harbor_2 10.99.73.39:443 backup check inter 20000 rise 2 fall 5

重启haproxy服务

systemctl restart haproxy.service
systemctl status haproxy.service

netstat -plnt |grep haproxy
tcp        0      0 0.0.0.0:80          0.0.0.0:*               LISTEN      7087/haproxy        
tcp        0      0 0.0.0.0:443         0.0.0.0:*               LISTEN      7087/haproxy   
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值