1.yum 설치
# yum -y install haproxy
(낮은 버젼으로 설치됨 haproxy-1.5.18-9.el7_9.1.x86_64)
서비스 시작
# systemctl start haproxy
기본 프로세스
| [root@test /SW/haproxy/haproxy-2.7.1]# ps -ef | grep haproxyroot 29915 1 0 10:16 ? 00:00:00 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pidhaproxy 29919 29915 0 10:16 ? 00:00:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Dshaproxy 29922 29919 0 10:16 ? 00:00:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds |
서비스 종료
# systemctl stop haproxy
재부팅 시 자동으로 서비스 시작
# systemctl enable haproxy
기본 환경파일(/etc/haproxy/haproxy.cfg)
/etc/haproxy/haproxy.cfg
| #———————————————————————# Example configuration for a possible web application. See the# full configuration options online.## http://haproxy.1wt.eu/download/1.4/doc/configuration.txt##———————————————————————#———————————————————————# Global settings#———————————————————————global # to have these messages end up in /var/log/haproxy.log you will # need to: # # 1) configure syslog to accept network log events. This is done # by adding the ‘-r’ option to the SYSLOGD_OPTIONS in # /etc/sysconfig/syslog # # 2) configure local2 events to go to the /var/log/haproxy.log # file. A line like the following can be added to # /etc/sysconfig/syslog # # local2.* /var/log/haproxy.log # log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon # turn on stats unix socket stats socket /var/lib/haproxy/stats#———————————————————————# common defaults that all the ‘listen’ and ‘backend’ sections will# use if not designated in their block#———————————————————————defaults mode http log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000#———————————————————————# main frontend which proxys to the backends#———————————————————————frontend main *:5000 acl url_static path_beg -i /static /images /javascript /stylesheets acl url_static path_end -i .jpg .gif .png .css .js use_backend static if url_static default_backend app#———————————————————————# static backend for serving up images, stylesheets and such#———————————————————————backend static balance roundrobin server static 127.0.0.1:4331 check#———————————————————————# round robin balancing between the various backends#———————————————————————backend app balance roundrobin server app1 127.0.0.1:5001 check server app2 127.0.0.1:5002 check server app3 127.0.0.1:5003 check server app4 127.0.0.1:5004 check |
2.컴파일 설치
1)패키지 설치
-기본: sudo yum -y install gcc pcre-devel tar make
-추가 옵션 적용: sudo yum -y gcc openssl openssl-devel pcre-static pcre-devel systemd-devel
2)다운로드 및 묶음 해제
다운로드 페이지: http://www.haproxy.org/#down
# wget http://www.haproxy.org/download/2.7/src/haproxy-2.7.1.tar.gz# tar -zxvf haproxy-2.7.1.tar.gz
management.txt 파일에서 설치 옵션(USE_XXX) 및 기동 방법 대한 정보를 확인 할 수 있다.
기본 설치
# make TARGET=linux-glibc
옵션 추가
# make TARGET=linux-glibc USE_OPENSSL=1 USE_PCRE=1 USE_ZLIB=1 USE_SYSTEMD=1
# 싱글 스레드
make TARGET=linux-glibc \
USE_LUA=1 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 \
USE_SYSTEMD=1 USE_PROMEX=1
# 병렬 스레드
make -j 4 TARGET=linux-glibc \
USE_LUA=1 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 \
USE_SYSTEMD=1 USE_PROMEX=1
# make install
설치 화면
| [root@test /SW/haproxy/haproxy-2.7.1]# make TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_PROMEX=1 CC src/ev_poll.o CC src/ev_epoll.o CC src/cpuset.o CC src/ssl_sock.o CC src/ssl_ckch.o CC src/ssl_sample.o CC src/ssl_crtlist.o CC src/cfgparse-ssl.o CC src/ssl_utils.o CC src/jwt.o CC addons/promex/service-prometheus.o CC src/namespace.o CC src/mux_h2.o CC src/mux_fcgi.o CC src/mux_h1.o CC src/tcpcheck.o CC src/stream.o CC src/stats.o CC src/http_ana.o CC src/server.o CC src/stick_table.o CC src/sample.o CC src/flt_spoe.o CC src/tools.o CC src/log.o CC src/cfgparse.o CC src/peers.o CC src/backend.o CC src/resolvers.o CC src/cli.o CC src/connection.o CC src/proxy.o CC src/http_htx.o CC src/cfgparse-listen.o CC src/pattern.o CC src/check.o CC src/haproxy.o CC src/cache.o CC src/stconn.o CC src/http_act.o CC src/http_fetch.o CC src/http_client.o CC src/listener.o CC src/dns.o CC src/vars.o CC src/debug.o CC src/tcp_rules.o CC src/sink.o CC src/h1_htx.o CC src/task.o CC src/mjson.o CC src/h2.o CC src/filters.o CC src/server_state.o CC src/payload.o CC src/fcgi-app.o CC src/map.o CC src/htx.o CC src/h1.o CC src/pool.o CC src/cfgparse-global.o CC src/trace.o CC src/tcp_sample.o CC src/flt_http_comp.o CC src/mux_pt.o CC src/flt_trace.o CC src/mqtt.o CC src/acl.o CC src/sock.o CC src/mworker.o CC src/tcp_act.o CC src/ring.o CC src/session.o CC src/proto_tcp.o CC src/fd.o CC src/channel.o CC src/activity.o CC src/queue.o CC src/lb_fas.o CC src/http_rules.o CC src/extcheck.o CC src/flt_bwlim.o CC src/thread.o CC src/http.o CC src/lb_chash.o CC src/applet.o CC src/compression.o CC src/raw_sock.o CC src/ncbuf.o CC src/frontend.o CC src/errors.o CC src/uri_normalizer.o CC src/http_conv.o CC src/lb_fwrr.o CC src/sha1.o CC src/proto_sockpair.o CC src/mailers.o CC src/lb_fwlc.o CC src/ebmbtree.o CC src/cfgcond.o CC src/action.o CC src/xprt_handshake.o CC src/protocol.o CC src/proto_uxst.o CC src/proto_udp.o CC src/lb_map.o CC src/fix.o CC src/ev_select.o CC src/arg.o CC src/sock_inet.o CC src/mworker-prog.o CC src/hpack-dec.o CC src/cfgparse-tcp.o CC src/sock_unix.o CC src/shctx.o CC src/proto_uxdg.o CC src/fcgi.o CC src/eb64tree.o CC src/clock.o CC src/chunk.o CC src/cfgdiag.o CC src/signal.o CC src/regex.o CC src/lru.o CC src/eb32tree.o CC src/eb32sctree.o CC src/cfgparse-unix.o CC src/hpack-tbl.o CC src/ebsttree.o CC src/ebimtree.o CC src/base64.o CC src/auth.o CC src/uri_auth.o CC src/time.o CC src/ebistree.o CC src/dynbuf.o CC src/wdt.o CC src/pipe.o CC src/init.o CC src/http_acl.o CC src/hpack-huff.o CC src/hpack-enc.o CC src/dict.o CC src/freq_ctr.o CC src/ebtree.o CC src/hash.o CC src/dgram.o CC src/version.o LD haproxy CC dev/flags/flags.o LD dev/flags/flags[root@test /SW/haproxy/haproxy-2.7.1]# make install |
※ make 오류 발생시: sudo yum -y install openssl-devel or “openssl*”
| [root@test /SW/haproxy/haproxy-2.7.1]# make TARGET=linux-glibc USE_OPENSSL=1 USE_PCRE=1 USE_ZLIB=1 USE_SYSTEMD=1CC src/ssl_sock.oIn file included from src/ssl_sock.c:62:0:include/haproxy/openssl-compat.h:10:24: fatal error: openssl/bn.h: 그런 파일이나 디렉터리가 없습니다#include <openssl/bn.h>^compilation terminated.make: *** [src/ssl_sock.o] 오류 1 |
3)haproxy 복사 or 링크 설정
-> /usr/local/sbin/haproxy를 /usr/sbin으로 복제하거나 소프트 링크를 설정한다
# cp -p /usr/local/sbin/haproxy /usr/sbin/
# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
서비스 시작
# haproxy -f 환경파일명.cfg
# haproxy -D -f 환경파일명.cfg (데몬으로 실행: 콘솔 끊어져도 프로세스 유지됨)
# haproxy -f /etc/haproxy.cfg \ -D -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid) (권장)
-init 파일에서 HAProxy를 시작하는 안전한 방법은 데몬 모드를 강제 실행하고, 기존 pid값은를 pid 파일에 저장하고,
이 pid 파일을 사용하여 이전 프로세스를 종료하기 전에 종료하도록 알리는 것입니다.
# haproxy -f /etc/haproxy.cfg \ -D -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)
-구성이 몇 개의 특정 파일로 분할된 경우(예: tcp vs http)
# haproxy -f /etc/haproxy/global.cfg -f /etc/haproxy/stats.cfg \
-f /etc/haproxy/default-tcp.cfg -f /etc/haproxy/tcp.cfg \
-f /etc/haproxy/default-http.cfg -f /etc/haproxy/http.cfg \
-D -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)
-고객별 파일과 같이 알 수 없는 수의 파일이 예상되는 경우 고정 크기 시퀀스 번호로 시작하는 이름을 지정하고 “–“를 사용하여 일부 기본값을 로드한 후 로드하는 것이 좋습니다.
# haproxy -f /etc/haproxy/global.cfg -f /etc/haproxy/stats.cfg \
-f /etc/haproxy/default-tcp.cfg -f /etc/haproxy/tcp.cfg \
-f /etc/haproxy/default-http.cfg -f /etc/haproxy/http.cfg \
-D -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid) \
-f /etc/haproxy/default-customers.cfg — /etc/haproxy/customers/*
서비스 등록 방법
1)haproxy.init 파일 복사
# cp -p /SW/haproxy/haproxy-2.7.1/examples/haproxy.init /etc/init.d/haproxy
# chmod 755 /etc/init.d/haproxy
2)haproxy 환경파일 생성
경로: /etc/haproxy/haproxy.cfg
3)데몬 리로드
# systemctl daemon-reload