HAProxy 설치하기
HAProxy 설치하기
Haproxy 는 소프트웨어 방식으로 TCP 기반의 HA 구성을 가능하게 해주는 오픈소스로
L4와 L7의 기능을 제공하고 설치 및 설정이 간편하기 때문에 빠른 이중화 구성이 가능하다.
게다가 버전이 올라가면서 SSL까지 정식으로 지원하게되면서 활용도가 많이 높아졌다.
기본설치부터 SSL설정까지 알아보자.
OS : CentOS 6.3 x64
1. 설치
1.5버전 부터 정식으로 ssl을 지원하므로 이후 버전을 사용하는게 좋다.
현재 최신 안정화버전은 1.6이지만 쭉 사용하던 1.5버전 기준으로 작성한다.
기본패키지 설치
yum install gcc gcc-c++ pcre-devel openssl-devel
다운로드
wget http://www.haproxy.org/download/1.5/src/haproxy-1.5.17.tar.gz
압축풀고
tar xvfz haproxy-1.5.17.tar.gz
cd haproxy-1.5.17
컴파일설치
make USE_OPENSSL=1 TARGET=linux2628 ARCH=x86_64
make install
실행파일작업
cp -a examples/haproxy.init /etc/rc.d/init.d/haproxy
chmod 700 /etc/rc.d/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/
설치끝. 엄청간단하다!
2. 설정파일
설정파일 경로만들고
mkdir -p /etc/haproxy
설정입력
vi /etc/haproxy/haproxy.cfg
# 서버관련된 사항들. 딱!! 보면 아는 옵션들...;
global
log 127.0.0.1 local0
maxconn 4096
user nobody
group nobody
daemon
tune.ssl.default-dh-param 2048
# frontend 나 backend 에 지정된 설정이 없으면 defaults 설정을 따름
defaults
log global
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
option dontlognull
option http-server-close
option tcplog
option httplog
option httpclose
option forwardfor
option accept-invalid-http-request
# 상태확인 페이지 설정. http://www.system.co.kr:8888 이런식으로 접근가능
listen admin *:8888
stats enable
stats uri /admin
stats auth admin:password
stats refresh 5s
# 각 웹서버들 앞단에 위치한 haproxy 자체에 대한 설정
frontend systemv_web_front
bind 10.0.0.1:80
bind 10.0.0.1:443 ssl crt /etc/haproxy/www.systemv.co.kr.pem
reqadd X-Forwarded-Proto:\ https
default_backend systemv_web_back
# haproxy 뒷단에 있는 real 웹서버들에 대한 설정
backend systemv_web_back
errorfile 503 /etc/haproxy/index.html
balance source
cookie SERVERID insert indirect nocache
option httpchk HEAD /index.jsp HTTP/1.0
server web1 10.0.0.10:80 cookie s1 check inter 2000 rise 2 fall 2
server web2 10.0.0.11:80 cookie s2 check inter 2000 rise 2 fall 2
설정중 몇가지만 정리해보자
errorfile
모든 웹서버가 죽었을때 보여줄 페이지다. 임의로 html 형식으로 작성하면 된다.
<img src 같은 태그는 안먹는것같다. 텍스트 위주로 쓰자.
balance
haproxy 는 여러 기준으로 로드밸런싱을 구현하는데 balance에 사용할수 있는 옵션은 아래와 같다.
roundrobin : 순차적 분배
static-rr : 각서버별로 설정한 가중치값에 따라 분배
leastconn : 접속수에 따라 분배
source : 전체 웹서버별수를 기준으로 접속자 IP를 해싱해서 분배
그외 uri, url_param, hdr,rdp-cookie 등이 더 있는데.. 일반적이지 않으므로 생략.
server
server 뒤에오는 web1, web2등의 이름은 임의로 부여가능하다.
cookie s1 은 각 서버로 접속시에 SERVERID 라는 이름으로 s1 이라는 쿠키를 굽겠다는거고
inter 2000 은 헬스체크하는 시간 간격이다(밀리세컨).
fall 2 는 헬스체크시 2번 연속 다운이면 연결을 끊겠다는거고
rise 2 는 연결 끊긴상태에서 헬스체크시 연속 2번 살았다면 HA에 다시 포함시키겠다는 거다.
fall 과 rise 설정을 통해서 failover 와 failback 이 자동으로 실행되는데 간혹 failback은 하고 싶지 않을때가 있다.
이와 관련해서는 아래 링크에서 자세히 알수있는데 약간의 꼼수를 이용해 훨씬 간단히 구현할수 있다.
( http://blog.haproxy.com/2014/01/17/emulating-activepassing-application-clustering-with-haproxy/ )
rise 값을 99999999999 처럼 어이없이 늘려놓으면 된다. 예를 들어 inter 값이 1000 이라면 3000년 이후에 failback 이 될것이다.
3. SSL
haproxy 를 사용할때는 각 웹서버에 인증서를 설치할 필요가 없다.
인증서는 haproxy 서버에만 설치하면 되며 모든 인증파일을 합쳐 하나의 파일로 만들어
bind 의 crt 옵션을 사용해 파일명을 지정해 주면된다.
SSL인증서를 발급받으면 총 4개의 파일이 딸려온다.
- 도메인인증서 : 보통 신청한 도메인명을 포함한 파일이고 crt등의 확장자가 붙어있다.
- 상위인증서 : 상위기관 인증파일이며 CA인증서라고도 한다.
- 체인인증서 : 번들인증서, 중간인증서, intermediate 인증서라고 불린다.
- 키파일 : 내가 csr 생성시 사용한 키파일이다.
haproxy 에서 사용할 단일 인증파일을 만들기는 아주 간단하다.
그냥 각 파일들을 텍스트 형식으로 오픈해 합치기만 하면 된다.
파일 합치기는 도메인인증서 -> 체인인증서 -> 상위인증서 -> 키파일 순이다.
cat 도메인 체인 상위 키파일 > crt.pem 이렇게 하면 pem 파일에 캐리지리턴값(^M) 이 들어갈 수
있기때문에 하나씩 열어서 붙여주는게 좋다.
-----BEGIN MY CERTIFICATE-----
-----END MY CERTIFICATE-----
-----BEGIN INTERMEDIATE CERTIFICATE-----
-----END INTERMEDIATE CERTIFICATE-----
-----BEGIN INTERMEDIATE CERTIFICATE-----
-----END INTERMEDIATE CERTIFICATE-----
-----BEGIN ROOT CERTIFICATE-----
-----END ROOT CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
4. 로그설정
로그 설정은 좀 더 살펴봐야 할것같은데 기본적으로 syslog 를 통해서 남기고 로그로테이트를 통해서 로그를 순환하는 방법까지만 남긴다.
vi /etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun 514
$template Haproxy,"%msg%\n"
local0.=info -/var/log/haproxy/haproxy-info.log;Haproxy
local0.notice -/var/log/haproxy/haproxy-notice.log;Haproxy
local0.* ~
vi /etc/logrotate.d/haproxy
/var/log/haproxy/*.log {
size 1k
missingok
rotate 14
compress
ifempty
delaycompress
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
'리눅스ETC' 카테고리의 다른 글
리눅스 컴파일 속도 향상시키기 make -j (0) | 2016.04.27 |
---|---|
iscsi 구성하기 (0) | 2016.04.06 |
php configure 에러 (0) | 2016.04.06 |
리눅스 CentOS / netatalk 로 타임캡슐 만들기 (0) | 2016.04.06 |
mysql 설치 에러 (0) | 2016.04.05 |