728x90
반응형

keepalived

사전 준비

LVS의 사전 준비 참조

설치

yum에서 패키지 설치.

# yum install keepalived

설정

설정 파일은 /etc/keepalived/keepalived.conf.

로그의 설정

로그는 local3의 설비로 출력하도록 한다.
/etc/sysconfig/keepalived 편집

KEEPALIVED_OPTIONS="-D -S3"

로 변경.

 

iptables

vrrp의 프로토콜 통신을 대상 서버에서 허용할 필요가 있으므로 아래를 iptables의 설정에 추가.

# VRRP
-A INPUT -m state --state NEW -p vrrp -j ACCEPT

 

keepalived.conf

vrrp_script chk_haproxy {
    script      "/usr/bin/killall -0 haproxy"
    interval    2
    weight      20
}
 
## group을 만들면 vrrp_script가 잘 움직이지 않습니다.
#vrrp_sync_group VG {
#    group {
#        VI_bond1
##        VI_eth0
#    }
#    # 이벤트 발생시 스크립트 입니다.
#    notify_master   "/opt/sbin/ccn-keepalived_notify master"
#    notify_backup   "/opt/sbin/ccn-keepalived_notify backup"
#    notify_fault    "/opt/sbin/ccn-keepalived_notify fault"
#}
 
vrrp_instance VI_bond1 {
    state               BACKUP
    interface           bond1
    virtual_router_id   51
    garp_master_delay   5
    priority            100
    # vrrp 체크 간격입니다.
    advert_int          1
#    nopreempt
    virtual_ipaddress {
        219.112.248.20 dev bond1
    }
    track_script {
        chk_haproxy
    }
    # 이벤트 발생시 스크립트 입니다.
    notify_master   "/opt/sbin/ccn-keepalived_notify master"
    notify_backup   "/opt/sbin/ccn-keepalived_notify backup"
    notify_fault    "/opt/sbin/ccn-keepalived_notify fault"

 

환경

OS / keepalived

CentOS6 64bit
keepalived-1.2.7-3.el6.x86_64

 

Ubuntu에서 vrrp_sync_group 만들어도 잘 작동한다는 정보도 있고.

아래는 포인트.

  • vrrp_sync_group을 만들지 않는다
    • 설정하면 vrrp_script가 잘 동작하지 않음
    • 복수의 인터페이스를 설정할 수 없다
  • 2대의 노드를 모두 같은 설정으로 한다
    • state는 MASTER/BACKUP 어느 쪽이라도 좋다
    • priority도 마찬가지
    • nopreempt를 설정하지 않는다
728x90

이 설정으로 아래의 동작을 확인 후.

  • MASTER측이 정지했을 때 1대로 페일 오버
    • 복구 하더라도 페일 백은 하지 않는다
  • HAProxy의 프로세스가 다운되면 페일 오버
    • HAProxy가 높아지고도 페일 백은 하지 않는다

또한, 이벤트 발생 시의 스크립트는 Git으로 관리되고 있는 optsbin속에 들어 있습니다.

 

확인

# ip addr show bond1
11: bond1: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    link/ether e0:db:55:12:bb:59 brd ff:ff:ff:ff:ff:ff
    inet 219.112.248.1/26 brd 219.112.248.63 scope global bond1
    inet 219.112.248.20/32 scope global bond1

등 VIP이 한쪽으로 표시되어 있으면 OK.
MASTER의 정지나 HAProxy의 정지로 이미 한쪽에 VIP가 이동되어야 문제 없이 동작하는 것

 

# watch -n1 ip addr show bond1

로 표시하며 전환한다고 알기 쉽다. 또 디버깅은 tcpdump에서 패킷을 확인하면 OK.

 

# tcpdump -s0 -pni bond1 host 224.0.0.18
tcpdump: listening on bond1, link-type EN10MB (Ethernet), capture size 65535 bytes
19:36:10.424813 IP (tos 0xc0, ttl 255, id 507, offset 0, flags [none], proto VRRP (112), length 40)
    219.112.248.2 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 120, authtype none, intvl 1s, length 20, addrs: 219.112.248.20
19:36:11.424928 IP (tos 0xc0, ttl 255, id 508, offset 0, flags [none], proto VRRP (112), length 40)
    219.112.248.2 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 120, authtype none, intvl 1s, length 20, addrs: 219.112.248.20

이로써 VRRP패킷만 확인할 수 있다. 주로 prio값을 주시하면 된다.

 

 

관리

설정 파일을 변경한 경우는 이하의 순서로.

  1. 체크 스크립트에서 확인
# keepalived-check /etc/keepalived/keepalived.conf
 
  1. 설정 리로드
# service keepalived reload

 

재부팅을 원하는 경우, MASTER 노드를 교체하고 싶지 않은 경우 아래와 같은 절차로 대기측을 정지시키고 실행한다(restart하면 MASTER가 전환되므로).

 

Standby를 정지

# service keepalived stop

MASTER  재기동

# service keepalived restart

 

Standby 기동

# service keepalived start
 

 

728x90
300x250

'IT > Haproxy' 카테고리의 다른 글

HAProxy 설치 및 설정  (0) 2021.08.09
728x90
반응형

HAProxy 설치는 OS 기본 yum으로 설치 가능

# yum install haproxy

패키지로 설치했을 경우의 설정 파일은 /etc/haproxy/haproxy.cfg. 오리지날 설정 파일의 복사를 해 두면 된다.

# cp /etc/haproxy/haproxy.cfg{,-orig}

 

 

haproxy.cfg

설정 단위

설정 파일에서기본 단위는 밀리 초

마이크로초. 1마이크로 초=1/1000000초
밀리 초. 1밀리 초=1/1000초.이것이 기본 단위.
초. 1s=1000ms
부분. 1m=60s=60000ms
때. 1h=60m=3600s=3600000ms
날. 1d=24h=1440m=86400s=86400000ms

섹션

설정 파일에는 섹션이 존재한다.

defaults <name>frontend <name>backend <name>listen <name>

다른 섹션에서 사용되는 공통의 디폴트 설정. 나중에 이어defaults섹션에서 값을 초기화할 수 있다.
클라이언트의 접속을 접수 소켓의 정의
프록시에서 접속 백 엔드 측의 서버의 정의
frontend와 backend의 설정을 정리하여 기술할 수 있다.TCP모드의 트래픽만으로 사용이라고 쓰기 쉽다.

name임의의 값을 사용할 수 있다.가독성을 높이도록 설정하는 게 권장.
사용할 수 있는 것은

  • 대 소문자(대문자와 소문자는 구별된다)
  • 숫자
  • '-' (dash), '_' (underscore) , '.' (dot), ':' (colon)

설정 키 워드

각 키워드가 어느 섹션에서 이용 가능한지의 목록.

global파라미터

설정 항목은 이하.

Globals - haproxy-docs - Global Parameters - HAProxy Documentation - Google Project Hosting

maxconnulimit-n

프로세스가 함께 받는 최대 연결 수.ulimit-n값은 이 값에 맞추어 자동적으로 조정된다.
프로세스가 오픈할 수 있는 최대 파일 수.자동으로 계산된다.

 

 

HAProxy의 status취득

HAProxy에서는 접속 상황 통계 보고서 화면이 존재한다.
설정함으로써 web페이지로 표시할 수 있다.
구체적으로는 아래를 haproxy.cfg에 추가한다.

#---------------------------------------------------------------------
# HAProxy 상태
#---------------------------------------------------------------------
listen hastats
    mode        http
    bind        127.0.0.1:8080
    bind        192.168.101.186:8080
    stats       enable
    stats       show-legends
    stats       uri /haproxy-status
  • hastats
    이름에 대해서는 임의
  • stats uri
    위상을 표시하는 URI. 자유롭게 설정할 수 있다.

이로써 127.0.0.1:8080/haproxy-status에 접속함으로써 정보를 받을 수 있게 된다.
Munin등으로 모니터링 하는 경우 이 설정으로 OK.
외부 참조하는 경우는 listen하는 IP주소의 bind설정을 추가하고 인증 설정한다.
참고로 127.0.0.1:8080/haproxy-status;csv로 접근한 경우는 CSV형식으로 데이터의 취득이 가능(Munin에서의 데이터 수집에서 URL등에서 사용한다).

728x90

 

haproxy.cfg 예

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # syslog경유로(log는 최대 2개까지 기술 가능)
    log         log-0 local2
    # chroot 환경에서 움직입니다.
    chroot /var/lib/haproxy
    # pid화일이요
    pidfile /var/run/haproxy.pid
    # 이 값에 의해 오픈하는 최대 파일의 수가 자동으로 조정됩니다
    maxconn 30000
    # 동작시키는 유저와 그룹입니다.
    user haproxy
    group haproxy
    # 데몬으로서 움직입니다
    daemon
 
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats
 
#---------------------------------------------------------------------
# 이 섹션의 설정 값은 이후 섹션에 설정되지 않는 경우의 값입니다
#---------------------------------------------------------------------
defaults
    # 디폴트tcp입니다
    mode                    tcp
    log                     global
    option                  dontlognull
    option                  forwardfor except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout check           5s
    maxconn                 300000
 
#---------------------------------------------------------------------
# http 프론트엔드 입니다.
#---------------------------------------------------------------------
frontend Connect-http
    mode                    http
    bind                    219.112.248.20:80
    bind                    192.168.101.186:80
    option                  httplog
    option                  http-server-close
    timeout http-request    10s
    timeout http-keep-alive 10s
    # backend
    default_backend         Connect-AP
 
#---------------------------------------------------------------------
# backend 서버 정의(for Connect AP)입니다.
#---------------------------------------------------------------------
backend Connect-AP
    mode        http
    balance     roundrobin
    option      httpchk /check.html
    server      msg-ap-0 192.168.101.133 check port 80
    server      msg-ap-1 192.168.101.135 check port 80
 
#---------------------------------------------------------------------
# HAProxy의 상태 입니다.
#---------------------------------------------------------------------
listen hastats
    mode    http
    bind    127.0.0.1:8080
    bind    192.168.101.186:8080
    stats   enable
    stats   show-legends
    stats   uri /haproxy-status

 

 

728x90
300x250

'IT > Haproxy' 카테고리의 다른 글

HAProxy와 keepalived와의 연계  (0) 2021.08.09

+ Recent posts