2014년 10월 26일 일요일

[CDN 구축 시리즈 1편] 기본 프로그램 설치하기

지금부터는 CDN을 구축하도록 하겠습니다.

CDN은 Contents delivery network의 약자로 원하는 파일 또는 컨텐츠를 보다 빠르고 쾌적한 환경에서 전송하기 위한 서비스라고 할 수 있습니다.

이번 포스트는 연습 삼아서 구축하는거라 hyper-v로 vm을 구성해서 진행할거고 여기에 설치되는 프로그램은 mrtg, awstats, nginx, snmp, lvs, lsync 입니다.

먼저 구축할 서버는 메인 서버입니다. 메인 서버에는 mrtg, ftp, lsync를 설치할 예정입니다.

1. ftp 설치하기


가장 쉬운 ftp부터 설치하도록 하겠습니다. ftp의 용도는 메인 서버에 자료를 업로드하는 용도로 사용됩니다.

ftp는 간단하고 보안도 훌륭한 vsftpd로 설치하겠습니다.
vsftpd 설치는
#yum install vsftpd 로 해주시고 기본적으로 되어있는 세팅은 root로 접속이 안되기 때문에 새로운 사용자를 만들어주셔야 합니다.
그리고 iptables에 21번 포트 오픈해주세요.
마지막으로
#chkconfig --level 35 vsftpd on 하면 vsftpd 설치는 안료되었습니다.

2. lsync를 설치하기

lsync는 가장 최근 버전인 2.1.5를 이용해서 설치하겠습니다.

lsync를 설치하기에 앞서 lua를 설치해줘야 합니다.
#yum install asciidoc lua*

lua를 설치했으면 이제 본격적으로 lsync를 설치합니다.

#cd /usr/local/src
#wget https://lsyncd.googlecode.com/files/lsyncd-2.1.5.tar.gz
#tar zxvf lsyncd-2.1.5.tar.gz
#cd lsyncd-2.1.5
#./configure --prefix=/usr/local/lsyncd
#make && make install

설치가 완료되면 /etc/lsyncd.conf라는 파일을 만들어서 아래 내용을 추가해줍니다.
ds 서버는 총 8대이기 때문에 sync는 8개를 만듭니다.

settings {
        statusFile = "/tmp/lsyncd.stat",
        logfile = "/var/log/lsyncd.log",
        statusInterval = 1,
}

sync {
        default.rsync,
        source="/home/cdn",
        target="192.168.137.111::CDN",
        exclude="/log",
}

sync {
        default.rsync,
        source="/home/cdn",
        target="192.168.137.112::CDN",
        exclude="/log",
}

이런 방법으로 sync를 8개까지 붙입니다.

다음은 lsyncd 파일을 만들어주세요.

#vi /etc/init.d/lsyncd

아래 내용을 입력해주세요.

#!/bin/bash
#
# chkconfig: - 85 15
# description: Lightweight inotify based sync daemon
#
# processname:  lsyncd
# config:       /etc/lsyncd.conf
# config:       /etc/sysconfig/lsyncd
# pidfile:      /var/run/lsyncd.pid

# Source function library
. /etc/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

OPTIONS="-pidfile /var/run/lsyncd.pid /etc/lsyncd.conf"

#if [ -e /etc/sysconfig/lsyncd ]; then
#       /etc/sysconfig/lsyncd
#fi

RETVAL=0

prog="lsyncd"
thelock=/var/lock/subsys/lsyncd

start() {
        [ -f /etc/lsyncd.conf ] || exit 6
        echo -n $"Starting $prog: "
        if [ $UID -ne 0 ]; then
                RETVAL=1
                failure
        else
                daemon /usr/local/lsyncd/bin/lsyncd $OPTIONS
                RETVAL=$?
                [ $RETVAL -eq 0 ] && touch $thelock
        fi;
        echo
        return $RETVAL
}

stop() {
        echo -n $"Stopping $prog: "
        if [ $UID -ne 0 ]; then
                RETVAL=1
                failure
        else
                killproc /usr/local/lsyncd/bin/lsyncd
                RETVAL=$?
                [ $RETVAL -eq 0 ] && rm -f $thelock
        fi;
        echo
        return $RETVAL
}

reload(){
        echo -n $"Reloading $prog: "
        killproc /usr/local/lsyncd/bin/lsyncd -HUP
        RETVAL=$?
        echo
        return $RETVAL
}

restart(){
        stop
        start
}

condrestart(){
        [ -e $thelock ] && restart
        return 0
}

case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        restart)
                restart
                ;;
        reload)
                reload
                ;;
        condrestart)
                condrestart
                ;;
         status)
                 status lsyncd
                 RETVAL=$?
                 ;;
         *)
                 echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
                 RETVAL=1
esac

exit $RETVAL

여기까지 입력이 잘 되었다면 이번에는 파일의 권한을 바꿔주세요.

chmod 755 /etc/init.d/lsyncd

메인 서버에 싱크 오리진 디렉토리를 만들어주세요.

#mkdir /home/cdn

lsync는 아직 시작하지 말고 조금만 기다립시다.

설정이 다 끝났으면 iptables에 24007:24009 포트를 오픈해주세요.

3. DS에 rsync 설치하기

싱크를 받을 DS 서버로 이동합니다.

먼저 싱크를 받을 디렉토리를 생성해주세요.

#mkdir /home/cdn

다음은 xinetd를 설치합니다.

#yum install -y xinetd

다음은 밑줄친 빨간 부분처럼 바꿔줍니다.

service rsync
{
        disable = no
        flags           = IPv6
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}

바꿔주었으면 /etc/rsyncd.conf를 만들고 밑에 내용을 입력합니다.

#vi /etc/rsyncd.conf

[CDN]
path = /home/cdn
hosts allow = *
hosts deny = *
read only = no
uid = 0
gid = 0
chroot = yes

입력했으면 iptables에 873 포트를 입력해주세요.

마지막으로 /home/cdn 디렉토리의 소유자가 root인지 확인하고 selinux가 켜져있는지도 확인합니다.

selinux 켜져있는지 모르고 진행하다가 몇시간을 날렸어요...

다음 iptables와 xinetd 재시작.

#/etc/init.d/xinetd restart
#/etc/init.d/iptables restart

이런 방식으로 8개 DS 모두 설정해주세요.

다 설정을 했으면 이제 main으로 가서 lsync를 실행시킵니다.

#/etc/init.d/lsyncd start

잘 시작 되었다면 /home/cdn에 파일 하나를 만들고 기다려봅시다.
설정이 잘 되었다면 만든 파일이 DS 서버로 가 있을겁니다.

이렇게 1편을 마치겠습니다.