[Haproxy] HAProxy 설치 방법

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

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤