Skip to content

Latest commit

 

History

History
171 lines (142 loc) · 4.23 KB

README.md

File metadata and controls

171 lines (142 loc) · 4.23 KB

HAProxy

https://www.haproxy.org/

설치

  1. haproxy設置

    dnf install haproxy
  2. 확인

    haproxy -v
    #HAProxy version 2.4.22-f8e3218 2023/02/14 - https://haproxy.org/
    #Status: long-term supported branch - will stop receiving fixes around Q2 2026.
    #Known bugs: http://www.haproxy.org/bugs/bugs-2.4.22.html
    #Running on Linux 5.14.0-427.26.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Jul 5 11:34:54 EDT 2024 x86_64

설정 (PostgreSQL HA 구성 예시)

  1. 환경변수 설정

    NODE_NAME1=pg-node1
    NODE_NAME2=pg-node2
    NODE_NAME3=pg-node3
    IP_ADDRESS1=xxx.xxx.xxx.xxx # HOSTNAME으로 해도 문제 없음
    IP_ADDRESS2=xxx.xxx.xxx.xxx # HOSTNAME으로 해도 문제 없음
    IP_ADDRESS3=xxx.xxx.xxx.xxx # HOSTNAME으로 해도 문제 없음
  2. 원본 설정 파일 백업

    cp -p /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bkp
  3. 설정파일 작성

    vi /etc/haproxy/haproxy.cfg
    
    global
        log         127.0.0.1:514 local2
        chroot      /var/lib/haproxy
        pidfile     /var/run/haproxy.pid
        maxconn     300
        user        haproxy
        group       haproxy
        daemon
    
        # turn on stats unix socket
        stats socket /var/lib/haproxy/stats
    
    defaults
        mode                    tcp
        log                     global
        retries                 5
        timeout queue           1m
        timeout connect         10s
        timeout client          10m
        timeout server          10m
        timeout check           10s
        maxconn                 300
       
    listen stats
        mode http
        bind *:7000
        stats enable
        stats uri /
    
    listen primary
        bind *:5000
        option httpchk /primary
        http-check expect status 200
        default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
        server ${NODE_NAME1} ${IP_ADDRESS1}:5432 maxconn 150 check port 8008
        server ${NODE_NAME2} ${IP_ADDRESS2}:5432 maxconn 150 check port 8008
        server ${NODE_NAME3} ${IP_ADDRESS3}:5432 maxconn 150 check port 8008
    
    listen replica
        bind *:6000
        option httpchk /replica
        http-check expect status 200
        #balance roundrobin
        default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
        server ${NODE_NAME1} ${IP_ADDRESS1}:5432 maxconn 150 check port 8008
        server ${NODE_NAME2} ${IP_ADDRESS2}:5432 maxconn 150 check port 8008
        server ${NODE_NAME3} ${IP_ADDRESS3}:5432 maxconn 150 check port 8008

서비스 설정

  1. deamon reload

    systemctl daemon-reload
  2. haproxy_connect 설정 (SELINUX가 활성화 되어 있을 경우)

    getsebool -a | grep haproxy_connect
    #haproxy_connect_any --> off
    
    # SET
    setsebool -P haproxy_connect_any=1
    
    # CHECK
    getsebool -a | grep haproxy_connect
    #haproxy_connect_any --> on
  3. SERVICE 재시작 및 활성화

    systemctl start haproxy
    systemctl status haproxy
    systemctl enable haproxy

haproxy 동작 확인

# RW (PORT : 5000)
psql -h <host-haproxy> -U postgres -p 5000 -c "SELECT pg_is_in_recovery();"
# pg_is_in_recovery
#-------------------
# f
#(1 row)

# RO (PORT : 6000)
psql -h <host-haproxy> -U postgres -p 6000 -c "SELECT pg_is_in_recovery();"
# pg_is_in_recovery
#-------------------
# t
#(1 row)

rsyslog

  1. rsyslog 설치

    dnf install rsyslog
    
  2. 설정파일 작성

    vi /etc/rsyslog.conf
    
    ...
    # Provides UDP syslog reception
    # for parameters see http://www.rsyslog.com/doc/imudp.html
    module(load="imudp") # needs to be done just once             # 주석해제
    input(type="imudp" port="514")                                # 주석해제
    
    #### RULES ####
    
    # Save boot messages also to boot.log
    local7.*                                                /var/log/boot.log
    local2.*                                                /var/log/haproxy.log # 추가
    ...
  3. SERVICE 재시작 및 활성화

    systemctl start rsyslog
    systemctl status rsyslog
    systemctl enable rsyslog