2008년 3월 21일 금요일

Linux Socket Programming중 Bind에 대한 이야기....

Linux Socket 프로그래밍을 하던중...

서버 프로그램을 강제로 Control+C키를 눌러 종료시킨 후, 재 실행시키면 Bind가 되지 않는 문제가 발생하였다.

어느정도 시간이 되면, 다시 Bind가 되긴 하지만, 1초라도 쉬고 있으면 안되는 데몬역할을 수행할 프로그램이었기에, 반드시 해결해야 되는 문제였다.

예전에 머드 서버 프로그램을 작업할 때, 본 기억이 있었는데... 기억이 가물가물 -_-;;;;;;

"Address already in use"

TCP로 통신을 할 때는 "TIME-WAIT"라는게 존재한다고 한다.
데이터가 완전히 전송되지 않았는데, 통신이 끊어지는 것을 막기위한 방법이라고 하는데, 자세한 내용은 "TIME-WAIT"로 검색해보면 될듯...

Linux에서 "TIME-WAIT"의 디폴트 시간은 45초이다. 따라서, 서버 데몬이 죽은후 45초가 경과하면 다시 데몬을 실행시킬 수가 있는 것인데, 데몬이 죽은 경우 바로 데몬을 띄워주기 위해서는

#include <sys/types.h>
#include <sys/socket.h>

int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);
int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);

RETURN VALUE
On success, zero is returned. On error, -1 is returned, and errno is set appropriately.

ERRORS
EBADF The argument s is not a valid descriptor.

ENOTSOCK
The argument s is a file, not a socket.

ENOPROTOOPT
The option is unknown at the level indicated.

EFAULT The address pointed to by optval is not in a valid part of the process address space. For getsockopt, this error may also be
returned if optlen is not in a valid part of the process address space.

EINVAL optlen invalid in setsockopt

setsockopt(
Socket,
SOL_SOCKET,
SO_REUSEADDR , <--- 바로 요놈!
&optval, <- Default : 0
sizeof(optval)
);.

SO_REUSEADDR을 사용하여 주면, 데몬이 죽은 후 45초가 경과하지 않더라도 바로 Bind를 할 수 있게 된다. 디폴트 값이 0인데, 이걸 1로 바꿔주면 바로바로 소켓에 주소가 할당되고 또 사라졌다가 다시 할당된다.

2008년 3월 19일 수요일

[Linux rsync]서버백업 및 동기화


로컬 호스트 시스템을 백업하는 방법으로는 tar 아카이브를 이용하여 묶거나 압축하는 방법이 있고, cpio, dump, dd 유틸리티를 이용하여 하드 디스크를 백업하는 방법이 있다.


이러한 유틸리티를 사용하지 않고, 미러링(Mirroring) 기능을 이용하여 로컬시스템 또는 원격서버의 데이터를 그대로 복사하여 백업하는 방법에 대해서 알아봅니다......


# 1. 미러링(Mirroring)



레드햇 리눅스 사이트의 다운로드 페이지에 보면 FTP 미러 사이트들이 많이 링크되어 있

음을 발견할 수 있다. 미러 사이트는 주 사이트의 데이터를 그대로 옮겨와 주 사이트와 똑

같은 서비스를 제공하는 것이다. 원격 서버의 데이터를 원본 그대로 복사해 와서 원격 서

버와 똑같은 데이터 상태를 유지시키는 것을 미러링(Mirroring) 이라 하는데 다른 표현으로

는 서버 동기화(server syncronization)라고도 한다.

미러링에 의해서 원격 서버의 데이터가 변하면 미러링 서버도 그에 따라서 변하게 되며

항상 미러링 서버는 원격 서버의 동일한 데이터 상태를 유지하게 된다. 미러링은 로컬 시스

템의 데이터를 백업할 때도 적용할 수 있으며 서버마다 동일한 데이터 구조를 유지하고자

할 때 이 방법이 사용된다.



# 2. 미러링 도구(rsync)



여러대의 서버를 분산하여 서버를 동기화하는데 rsync 유틸리티가 많이 사용된다.

rsync는 루트의 권한없이 서버로부터 데이터로 빠르게 전송받을 수 있으며, 원격 서버와

미러 서버와 전송 데이터를 비교하여 변화된 데이터를 저장할 수 있다.

또한 SSH를 이용하면 rsync 서버가 구축되어 있지 않아도 미러링을 할 수 있는 이점이 있

다.



# 3. rsync 설치



레드햇 리눅스 9에서는 최신 버전의 rsync RPM 패키지를 지원하므로 간단히 RPM 패키지

를 설치하여 사용한다. 그러면 우선, rsync 패키지가 설치되어 있는지를 확인해 본다...

[root@localhost root]# rpm -qa grep rsync

rsync-2.5.5-4

[root@localhost root]# _ ----->대기중인 커서를 의미함.



상기 화면과는 달리 아무런 rsync 버전 정보가 표시되지 않는다면 rsync가 시스템에 설치

되어 있지 않는 것이므로, rsync-2.5.5-4.i386.rpm 패키지를 구해 다음과 같이 설치한다.

설치전에 반드시 미리 구한 패키지가 있는 디렉토리로 들어간후 설치하는것을 잊지 말자.

[root@localhost RPMS]# rpm -ivh rsync-2.5.5-4.i386.rpm

준비 중... ############################ [100%]

1 : rsync ############################ [100%]

[root@localhost RPMS]# _

@ [참고사항] - rsync RPM 패키지 설치시 의존성 오류가 나올때

rsync RPM 패키지는 redhat-lsb 패키지와 의존성을 가지므로, 설치시

의존성 오류가 나올 때는 redhat-lsb-1.3-1.i386.rpm을 먼저 설치한 후

에 rsync 패키지를 설치한다.



# 4. SSH를 이용한 원격 서버 데이터 미러링



rsync 서버를 구축하지 않은 상태에서 rsync로 SSH를 이용하여 데이터를 백업하는 방법

은 다음과 같다. rsync 사용법에 관한 자세한 것은 잠시 후에 살펴보기로 하자...



rsync -avzr --delete -e ssh 원격서버:데이터경로 백업경로


그러면 192.168.1.13 클라이언트에서 192.168.1.1 원격 서버의 FTP 데이터를 SSH를 이용

하여 미러링하는 방법은 다음과 같다...

[root@localhost root]# rsync -avz --delete -e ssh 192.168.1.1:/ftp/pub/redhat9/

/mirror/redhat9

root's password:

receiving file list ... done

./

shrike-i386-disc1.iso

shrike-i386-disc2.iso

shrike-i386-disc3.iso

wrote 64 bytes read 1855717755 bytes 2449792.50 bytes/sec

total size is 1855094784 speedup is 1.00

[root@localhost root]# _



원격 서버의 주소와 미러링하고자 하는 데이터의 경로를 지정한 후에 -e ssh 옵션을

사용하여 원격 서버에 접속을 하게 되면 패스워드를 묻게 되는데, 원격 서버의 루트 패스

워드를 입력한다. 만일 일반 사용자 계정으로 이 명령을 수행한다면 원격 서버에도 동일한

계정이 존재하여야 하며, 원격 서버의 계정 패스워드를 입력한다.

SSH로 원격 서버에 접속이 이뤄지면 rsync에 의해서 원격 서버의 데이터를 미러링 서버

의 지정된 경로로 다운로드됨을 볼 수 있다.

@ [ 참고사항 ] - SSH를 이용한 rsync 데이터 동기화를 위한 원격 서버의 환경

클라이언트에서 rsync로 SSH를 이용하여 원격 서버에 접속하기 전에

원격 서버는 반드시 SSH 서버가 작동하고 있어야 접속이 가능하다.

즉, /etc/init.d/sshd restart를 실행하여 클라이언트가 SSH 서버에 접

속할 수 있도록 미리 준비해 놓고 있어야 한다는 예기다....



# 5. rsync 서버 설정(/etc/rsyncd.conf)

앞서 SSH를 이용하여 미러링을 하는 방법에 대해 알아보았다. SSH 서버가 구축되지 않은

원격 서버에서는 클라이언트가 미러링할 수 있도록 rsync 서버를 구축해야 한다. rsync 서

버의 설정 파일은 /etc/rsyncd.conf 파일인데, 이 파일은 자동으로 생성되지 않으므로 사

용자가 직접 만들어 사용해야 한다. 이 파일의 설정 형식은 다음과 같다.



[rsync 서비스명]

comment = rsync서버에 대한 설명

path = 미러링될 데이터의 경로

uid = 사용자 ID

gid = 그룹 ID

use chroot = yes / no

read only = yes /no

host allow = 아이피주소

max connections = 최대접속횟수

timeout = 초단위의 시간



① [rsync 서비스명] : rsync 서비스의 이름(모듈명)이다. 사용자가 원하는 형태로 서비스명

을 지정할 수 있다. 예) rh90

② comment : rsync 서비스에 대한 설명이다. 예) Red Hat Linux 9.0 Mirror

③ path : 미러링 서비스 될 데이터의 경로를 지정한다. 예) /data/linux90

④ uid, gid : 각각 파일 전송하는 사용자와 그룹의 아이디로, 익명 접속이 가능하도록 기본값

은 nobody로 설정되어 있으므로 이 값을 그대로 사용한다.

⑤ use chroot : path로 지정된 경로를 root 상위 디렉토리로 사용한다. 사용자가 다른 상위

디렉토리로 접근하지 못하도록 하기 위해서 보안상 필요로 하므로 yes로 설

정한다.

⑥ read only : 클라이언트가 서버에서 데이터만 다운로드 하는 경우에는 이 옵션을 yes로 설

정하여 읽기 전용 권한을 부여해야 한다. 만일 업로드가 가능하도록 하려면

no로 설정하지만 특별한 경우가 아니라면 yes로 설정한다.

⑦ host allow : 접속 호스트를 제한하지 않으면 누구나 데이터를 가져갈 수 있기 때문에 익

명의 FTP 미러 서버가 아니라면 보안상 rsync 서버에 접속 가능한 호스트의

아이피를 지정하는 것이 안전하다.

⑧ max connections : 동시에 접속 가능한 접속횟수를 설정한다. 무제한은 0으로 설정한다.

⑨ timeout : 클라이언트의 접속이 idle 상태에 있을 때 접속을 끊어버릴 시간을 설정한다.

기본값은 60초이다.



다음은 지금까지 살펴본 설정을 가지고 작성한 /etc/rsyncd.conf 예제 설정 파일이다.

[root@localhost /]# cat > /etc/rsyncd.conf

[rh9iso]

comment = Red Hat Linux 9 ISO Mirror

path = /data/ftp/pub/redhat9

uid = nobody

gid = nobody

use chroot = yes

read only = yes

host allow = 192.168.1.13

max connections = 5

timeout = 60



[root@localhost /]# _



# 6. /etc/xinetd.d/rsync 설정



rsync 서비스는 슈퍼데몬 xinetd에 의해서 작동하기 때문에 /etc/xinetd.d/rsync 파일을

설정해 주어야 한다. RPM 패키지 설치시 이 파일이 제공되므로 이 파일 가운데에서 다음

화면과 같이 disable = yes를 disable = no로 변경한다.



-------------------------------------------------------------------------------

root@localhost:/

-------------------------------------------------------------------------------

service rsync

{

disable = no

socket_type = stream

wait = no

user = root

server = /usr/bin/rsync

log_on_failure += USER ID

}

_ ----->대기중인 커서를 의미함.

~



[영어][완성][두벌식] 11,0-1 모두

--------------------------------------------------------------------------------

그런 다음 xinetd 슈퍼 데몬을 다시 실행하여 rsync서비스가 작동될 수 있도록 한다.

[root@localhost /]# /etc/init.d/xinetd restart

xinetd 를 정지함 : [ 확인 ]

xinetd (을)를 시작합니다 : [ 확인 ]

[root@localhost /]# _



rsync 서비스는 873 서비스 포트를 이용하므로, 텔넷으로 이 포트로 접속하여 rsyncd 정

보가 나오는지를 확인한다. 만일 접속이 이뤄지지 않는다면 방화벽을 점검하거나

/etc/rsyncd.conf 파일의 설정이 정확한지를 체크한다.



[root@localhost /]# telnet localhost 873

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1)

Escape character is '^]' .

@RSYNCD: 26

_ ----->대기중인 커서를 의미함.



# 7. rsync 사용법



SSH를 이용하여 rsync 미러링하는 방법에서 간단히 명령의 쓰임에 대해서 이미 살펴봤다.

그러면 rsync의 사용법에 대해서 자세히 알아보자.........



rsync [옵션] rsync서버주소::서비스명 미러경로


rsync에서 자주 사용되는 옵션은 -avzr이다. -a 옵션은 아카이브 모드이며, -v 옵션은

처리과정을 화면상에 출력되도록 하는 것이고, -z는 전송시 압축모드이며, -r 옵션은 하위

디렉토리를 의미하는 옵션이다. 그외 자세한 옵션은 man 페이지를 참고하자.

그러면 rsync로 미러링하는 방법을 연습해 보기로 하자....^_^*



7-1. rsync 서비스 모듈(서비스명과 설명) 알아보기



앞서 작성한 /etc/rsyncd.conf 예제 파일을 통하여 원격 rsync 서버에서 어떤 서비스를

현재 제공하는지를 알아보고자 할 때는 다음과 같은 명령을 실행한다.



rsync 서버주소::



[root@localhost root]# rsync 192.168.1.1::

rh9iso Red Hat Linux 9 ISO Mirror

[root@localhost root]# _

이 때 출력되는 것은 /etc/rsyncd.conf 파일에서 서비스명(모듈명)과 comment로 설정

된 메시지이다.



7-2. 로컬 시스템 데이터 백업



rsync를 이용하여 로컬 시스템의 데이터를 백업하려면 다음과 같은 명령을 사용한다.



rsync -avzr --delete 백업소스경로 백업될경로


--delete 옵션은 rsync서버의 백업할 데이터와 클라이언트의 데이터와 비교하여 변경

된 데이터를 추가하거나 삭제하고자 할 때 사용하는 데이터 비교 옵션이다.

그러면 /rh9hwp 디렉토리에 있는 파일을 /mirror/rh9hwp_backup 디렉토리로 백업해

보자.........

[root@localhost root]# rsync -avzr /rh9hwp/ /mirror/rh9hwp_backup

building file list ... done

created directory /mirror/rh9hwp_backup

./

맨드레이크 9.1.hwp

명령어사전 .hwp

제1부설치편 (60-151p).hwp

제2부 (152-731p).hwp

제3부 (732-1115p).hwp

wrote 36854994 bytes read 100 bytes 1890004.82 bytes/sec

total size is 42531514 speedup is 1.15

[root@localhost root]# ls /mirror/rh9hwp_backup

맨드레이크 9.1.hwp 제1부설치편 (60-151p).hwp 제3부 (732-1115p).hwp

명령어사전 .hwp 제2부 (152-731p).hwp

[root@localhost root]# _



/mirror/rh9hwp_backup 디렉토리로 데이터가 백업되고 있음을 확인할 수 있다.



7-3. 원격 서버의 데이터 백업



rsync -avz 서버주소::모듈명(서비스명) 백업될경로



이번에는 원격 서버의 레드햇리눅스9 배포판 이미지 파일을 미러링을 해보자.... 먼저

rsync 서버주소::를 실행하여 모듈명을 확인하여 원격 서버에 접속해 미러링되게 하면

된다.



[root@localhost root]# rsync 192.168.1.1::

rh9iso Red Hat Linux 9 ISO Mirror

[root@localhost root]# rsync -avz 192.168.1.1::rh9iso /mirror/redhat9

receiving file list ... done

./

shrike-i386-disc1.iso

shrike-i386-disc2.iso

shrike-i386-disc3.iso

wrote 118 byets read 1855717775 bytes 4995202.94 bytes/sec

total size is 1855094784 speedup is 1.00

[root@localhost root]# _





소형주택강세는 일시적이다

2006년 가을부터 서울 강북권(정확히는 노원구)에서 시작된 소형 평형 아파트값 강세가 2007년을 거쳐 2008년 들어서도 계속되고 있습니다.

이번 닥터아파트(www.DrApt.com) 오윤섭의 부자노트에서는 소형 아파트값 강세의 원인을 수요와 공급측면에서 조명해보고 소형 주택 강세가 언제까지 지속될 것인가를 전망해보겠습니다.

원인1: 공급물량 절대부족설

먼저 소형 강세 원인이 2003년 참여정부가 들어선 후 소형 아파트 공급물량이 감소했기 때문이라는 것입니다.

정부는 2001년 12월 이후 지속적으로 재개발 재건축 단지에 대한 소형 평형 의무건설 비율을 강화했지만 2003년 참여정부 들어 강도 높은 규제정책으로 신규 주택공급물량이 급감했습니다.

또 건설사들은 민간택지에 20평형대를 아예 짓지 않거나 전체 가구수의 20%만 건립했습니다.

소형 평형 의무건설 비율은 국민의 정부가 출범한 98년 민간택지와 재건축 사업에서 잇따라 폐지됐다 2001년 12월 다시 부활됐습니다. 이에 따라 수도권 과밀억제권역에서 3백가구 이상 짓는 민간택지와 재건축 단지에서는 전용면적 18평 이하를 의무적으로 20% 이상 건립토록 했습니다.

소형 주택 감소는 수도권에서 전체 공급물량의 50% 이상을 차지한 재개발 재건축에 대한 규제정책으로 주택공급물량이 급감했기 때문입니다.

서울 인천 경기 등 수도권 18평 이하(20평형대) 소형 주택공급물량을 연도별로 보면 2002년 14만4천가구를 정점으로 2003년 9만7천가구, 2004년 7만7천가구, 2005년 6만1천가구, 2006년 5만3천가구로 격감했습니다. 통상 3년 뒤 입주한다고 볼 때 공급부족 후유증은 2006년부터 시작돼 2009년까지 지속될 가능성이 높습니다.

기존아파트시장에서 소형 매물 부족도 원인입니다. 다주택자가 양도소득세 중과 부담을 피해 2006년 말까지 소형 평형을 처분하면서 매물이 소진됐습니다.

더욱이 2004~2005년 중대형 가격 폭등으로 소형과 중대형 가격 차이가 벌어지면서 소형 집주인이 중대형으로 갈아탈 수 없다는 점도 매물 부족을 부추기고 있습니다.

원인2: 자연발생적 수요증가설

소형 평형을 찾는 수요자들이 크게 늘었기 때문이라는 것입니다.

급등한 중대형 아파트값을 보면서 불안감을 느낀 실수요자들이 2006년 가을 성수기부터 상대적으로 오름폭이 적은 소형 평형을 매입하려는 사람이 늘어나기 시작했습니다.

또한 2006년부터 주택담보대출 규제 등 규제정책으로 중대형 평형 상승세가 꺾이면서 규제가 상대적으로 덜하고 저평가된 소형이 실수요자들에게 주목받았습니다.

최근 강남권에서는 20평형대(평당 1천8백만원)와 30평형대(2천3백만원)의 평당 매매가 차이가 5백만원까지 벌어지면서 투자자들이 20평형대를 매입에 나서고 있습니다.

소형 평형 수요증가에는 1인 가구 또는 2인 가구가 2000년 이후 급증하고 있다는 점에서도 원인이 있습니다.

2005년 말 현재 1인가구가 3백만을 넘어섰고 이중 소형 구매력 계층인 25∼55세가 2백80만가구에 달합니다. 또 1인 또는 2인 가구가 전체 가구의 42.2%를 차지, 5년 전인 2000년(34.6%)보다 7.6%포인트나 급증했습니다. 또 고령화로 쾌적한 주거환경의 소형 아파트 수요가 지속적으로 늘어날 것입니다.

원인3: 일시적 수요증가설

소형 아파트에 이어 소형 연립 및 다세대주택까지 가격이 강세를 보이는 것은 대규모 재개발로 이주수요가 급증하고 있으나 소형 주택 재고는 부족하기 때문이라는 것입니다.

특히 강북권의 경우 2008년 입주물량이 전년보다 줄어든 반면 뉴타운 재개발 사업이 몰려 있어 이주수요에 비해 공급물량이 부족하다는 것입니다.

건설산업연구원은 2008년 서울에만 재개발 재건축에 따른 소형 평형 이주수요가 5만5천가구에 달할 것으로 내다보고 있습니다. 또 서울시정개발연구원에 따르면 지난 2002~2006년 서울에서 주택 15만7천6백가구가 재개발 재건축으로 철거됐습니다. 앞으로도 서울에서 10만2천가구의 소형 주택이 헐릴 예정입니다.

여기에 재개발 뉴타운 개발이 본격화됨으로써 이주수요는 더욱 늘어날 예정입니다. 서울에만 현재 재개발구역 1백여곳이 개발중에 있으며 광역 재개발사업인 뉴타운 1~3차 25곳이 추진되고 있습니다. 경기도도 뉴타운 21곳이 추진중입니다.

원인4: 규제정책 수요증가설

주택담보대출이나 세제 등 규제정책이 소형 아파트 수요를 부추긴다는 것입니다.

총부채상환비율(DTI)과 주택담보인정비율(LTV) 등 대출 규제가 투기지역 내 6억원 초과 아파트 등 중대형 평형에 집중되고 종합부동산세나 양도세 등 세 부담이 커지다보니 소형 평형에 수요자들이 몰리고 있습니다.

또 2007년 9월 시행된 청약가점제에 따라 가점 점수가 낮은 신혼부부 등이 아예 청약을 포기하고 내집마련용으로 소형 주택을 매입하고 있습니다.

소형 주택 강세에 대한 제 결론은 이렇습니다. 소형 강세는 일시적이지만 최소한 2008년까지 계속된다는 것입니다. 규제정책에 따른 실수요자 중심의 주택시장에서 소형 수요는 지속될 것입니다.

대출 및 세제 등 규제완화 정책이 일러야 2008년 하반기부터 시행될 것으로 예상되는 데다 소형 소유자가 중대형으로 이사 가기가 어려워 당분간 매물부족이 계속될 것입니다.

하지만 소형 아파트값 강세는 중대형과 차이가 좁혀져 어느 정도 균형(서울 강북권 아파트 기준으로 20평형대가 30평형대의 93% 안팎이 될 때. 또는 24평형과 32평형 매매가 차이가 1억원 미만으로 떨어질 때)을 이루는 시점에서 수그러들 것입니다.

특히 규제 완화로 소형을 팔고 중대형으로 갈아탈 수 있는 여건이 마련된다면 실수요자 중심으로 중대형 수요가 늘어나 소형 아파트값은 상승세에서 강보합세로 돌아설 것입니다.

또 2009년부터 2013년까지 수도권 2기 신도시 아파트 입주물량으로 40만가구가 예정돼 있으며 이중 중소형이 22만가구에 달해 소형 아파트값 강세는 진정될 것입니다.

다시 말해 2009년부터 소형 주택 입주물량이 늘어나고 규제완화로 주택시장이 정상화될 때 중대형 매수세는 본격적으로 살아날 것입니다.