'전체 글'에 해당되는 글 89건

  1. 2007.08.08 [펌] Linux 정리 #1
  2. 2007.08.07 [김동렬컬럼] 디워, 전쟁이 시작되었다. 충무로를 타격하라.
  3. 2007.07.25 [펌]MySql 복구 방법
  4. 2007.07.25 [펌]MySQL Cluster

[펌] Linux 정리 #1

|
###  http://truth.egloos.com/1283504 ####

Linux 정리 #1
== Kernel
프로그램들이 시스템의 지원에 접근할 수 있도록 서비스를 제공하는 역할
※ version ex)2.4.17
2 : 획지적인 변화
4 : 짝수-안정, 홀수-개발버전
17 : 패치회수


== Grub(boot loader)
디스크상에서 커널의 물리적인 위치를 알 필요없이 단지 파일명과 커널이 위치하고 있는 파티션만 알고 있으면 커널을 로드할 수 있다.
※ /boot/grub/grub.conf
※ /dev/had의 MBR에 문제가 발생하면 /sbin/grub-install /dev/had로 GRUB를 인스톨 한다.


== 예약
# atq : <- /var/spool/at
# atrm at#

#crontab -l <- /var/spool/cron
#crontab -e
#crontab -r

※ #chsh :shell변경


== 정보보호 3대 목표
Confidential(기밀성) -> 군사, 암호학
Integrity(무결성) -> 금융, DB
Availity(가용성) -> IT, ERP
Accountability(책임추적성,책임추긍성) -> IT, Log


== Security
1. 물리적 통제
2. 논리적(기술적)
3. 관리적
4. BCP&DRP(Business Continuity Plan & Disaster Recovery Plan) - 업무에 대한 지속성 보장 계획 & 재난 복구 계획


== boot sequence
BIOS가 시스템 이상 여부 테스트
-> Booting 할 drive선택
-> 선택된 드라이브의 Master Boot Sector읽어들임
-> MBR이 파티션 테이블을 읽어 Booting할 파티션을 알아냄
-> Booting 파티션의 Boot Sector에 가지고 있는 프로그램이 해당 운영체제를 읽어들임
-> Kernel 압축해제
-> 장착된 Hardware검사, 장치 드라이버 설정
-> Kernel 이 '/'를 read-only로 mount
-> FileSystem검사
-> '/'를 read/write로 다시 mount
-> '/sbin/init' 실행(kernel이 최초로 실행하는 program으로 PID가 '1'
-> /etc/inittab에서 init실행을 위한 설정 내용 확인
-> /etc/rc.d/rc.syinit 실행(Hostname, Swapping, 시스템점검, 커널 모듈 로딩)
-> /etc/rc.d/rc 실행(inittab에 정의된 Default runlevel를 실행)
-> /etc/rc.d/rc.local (매버 실행할 내용을 넣어둠)
-> /etc/rc.d/rc.serial (시리얼 포트를 초기화한다)
-> login(getty) / X-Window(xfm)

※ /etc/inittab : sbin/init 실행을 위한 설정 내용 ->> init q (inittab설정 적용)
※ /etc/login.defs : 정책파일


== 시작 프로세스
# linuxconf <- X window
# ntsysv
# chkconfig --list service_name
# chkconfig --add service_name
# chkconfig --del service_name
# chkconfig [--level run_level] service_name <on|off|reset>


== 계정및 시스템 관리 보안
# pwunconv : shadow 에서 일반 패스워드로 전환
# pwconv : 일반 패스워드에서 shadow로 전환


== Network설정
#netconfig
#netcfg : Xwindow

※ /etc/sysconfig : booting시 참조되는 파일들
H/W, S/W, network설정, locale, firewall등읠 설정 파일들이 위치

ifconfig : Network Interface Card 설정, 수정, 상태
#ifconfig eth0 10.1.6.7.78 netmask 255.255.255.0 broadcast 10.1.6.255 up
#service network restart
※ /etc/hosts
※ /etc/syconfig/network-scripts/ifcfg-eth0(eth1) : ip
※ /etc/syconfig/network : gateway
※ /etc/resolv.conf

1. 설정tool이용(netconfig,netcfg)
2. prompt(ifconfig)
3. 설정파일 수동설정(/etc/syconfig/network-scripts/ifcfg-eth#)

※ /etc/rc.d/init.d/network : 시스템 부팅시 network를 구동

● nslookup, dig, host
● tcpdump : 특정 host에서 오는 packet dump
# tcpdump -x -X port 514 and host 10.1.6.71

== inetd daemon(<- /etc/hosts.allow, /etc/hosts.deny)
inetd : /etc/inetd.conf, /etc/serivces
tcpd : tcp wrapper

==> Xinetd(tcp,udp,(rpc)서비스에 대한 접근을 제어, tcp wrapper필요없음.)
/etc/xinetd.conf

- PAM package(/etc/pam.d/) : reference monitor
#vi /etc/pam.d/su : su제한
auth required /lib/security/$ISA/pam_wheel.so use_uid
#vi /etc/group : wheel그룹에 속한 user만이 su할수 있다
wheel:x:10:root,redhope

/etc/pam.d/login : 접속시간 제한(<- /etc/security/time.conf) p.157


== RPM
rpm -qa | grep tcpdump


== ssh
# ssh user_id@host : 이때 키는 데이터 암호화에 사용됨.
client : public key /$HOME/.ssh/unknown_host
server : private key /etc/ssh

# ssh-keygen -t rsa : 이때 키는 로그인에 사용됨.
/$HOME/.ssh/id_rsa : private key
/$HOME/.ssh/id_rsa.pub : public key

# scp id_rsa.pub test@10.1.6.99:~/.ssh/authorized_key2

● 시스템 관련 보안 설정
- /etc/securetty : 루트가 접속할 수 있는 터미널을 표시, 레드햇 리눅스에는 지역 가상 콘솔 (local virtual consoles: vtys)만을 기본 값으로 가지며 다른 원격 콘솔에서는 root로 접속하지 못하도록 한다.
- /etc/fstab : SUID/SGID 파일을 제한한다. 일반적으로 /var 파티션을 포함한 사용자의 홈 파티션에 "nosuid" 옵션을 설정한다.
- /etc/exports : 와일드카드를 사용하지 않도록 하며, 가능한 읽기 전용으로만 마운트하도록 한다.
- /etc/profile : 사용자의 파일생성 umask를 지정하며, 가능한 제한된 값으로 조정한다. 자주 쓰이는 값은 022, 033이고, 가장 제한적인 값은 077이다.
- /etc/pam.d/limits.comf: 파일시스템 제한을 설정할 수 있다. 기본 값인 "무제한"이 아닌 다른 값으로 설정하여 파일시스템의 사용을 제한한다.
- /etc/issue : telnet 등을 이용하여 시스템 버전 정보 유출을 방지한다.
- /etc/pam.d/login : .rhosts 파일을 사용하지 못하도록 한다.

● 네트워크 관련 보안 설정
네트워크 서비스는 주로 /etc/inetd.conf, /etc/services, /etc/rc.d/rcN.d(N은 시스템 런 레벨을 표시), 그리고 TCP-Wrapper의 설정 파일인 /etc/hosts.allow, /etc/hosts.deny 파일로 제어가 가능하다.
- /etc/inetd.conf : 불필요한 모든 네트워크 서비스들을 주석 처리하여 막도록 한다.
- /etc/rc.d/rcN.d : 시스템 시작시 실행되는 서버로 이 중 사용하지 않는(named, nfs 등) 서버를 삭제하도록 한다.
- /etc/services : 서비스를 주석 처리하거나 삭제할 수 있으나 보안에는 큰 영향을 미치지 않는다.
- /etc/hosts.allow : 네트워크 서비스에 접근할 필요가 있는 호스트를 등록한다.
- /etc/hosts.deny : ALL: ALL 로 설정하여 hosts.allow에서 허가한 호스트 이외의 모든 접근을 막는 것이 바람직하다.
- rpm -e : 레드햇에서 어떠한 패키지 전체를 삭제할 수 있는 명령
- dpkg : 데비안에서 어떠한 패키지 전체를 삭제할 수 있는 명령

-- Log관련
/etc/syslog.conf
/var/run/utmp : w,who
/var/log/wtmp : 성공한 로그인, 로그아웃 정보 - last [user_id]
/var/log/lastlog : 각 사용자의 최종기록 - lastlog [-u user_id]
/var/log/btmp : 실패한 로그인 (/var/log/btmp만들어주고 root,600 permission)

== ROOT만
chmod 600 /etc/inetd.conf
chown -R 700 /etc/rc.d/init.d/*

== Name Server
http://www.superuser.co.kr/dns/power-dns/page02_5_3.htm
Iterative 모드에서는
질의의 답을 모르면 알만한 다른 서버로 질의를 보내라고만 응답하기 때문에 자기는 응답에 대한 책임을 가지고 있지 않는다.
응답 가능한 NS의 목록을 전달한다.

Recursive 모드에서는
오직 실제 답과 에러 메시지만을 리턴 한다.
먼저 클라이언트는 로컬 네임 서버로 질의를 전달한다.
로컬 서버는 요청된 데이터를 도메인 내에서 찾으면 그에 해당하는 IP어드레스를 돌려주게 된다.
만약 로컬 네임 서버가 요청된 데이터를 찾지 못하면 다른 네임 서버로 질의를 전달한다.
최악의 경우 로컬 네임 서버의 질의는 DNS 트리의 최상위에 있는 루트 네임 서버에서 시작하여 요청된 데이터가 발견될 때까지 아래로 전달되게 된다

# nslookup -sil
> set type=any

# dig ns.dankook.ac.kr
# dig @ns.dankook.ac.kr dankook.ac.kr axfr

- Forwaard DNS Zone file
/var/named : localhost.zone named.ca named.local
#cp localhost.zone ilovekorea.com.zone
#vi /var/named/ilovekorea.com.zone

- RR의 종류들
domain이름이나 hostname은 여러종류의 속성을 가질수 있다.
SOA(Start of Authority) domain 권한의 시작을 알려주고 slave dns서버와 zone동기화 schedule들, TTL값을 소개
NS(Name Server)
MX(mail exchanger):mail server지정
A(Address)우측에 IP가 옴(A속성외에 IP가 오는 경우는 없음), (domain, hostname을 ip로 번역:forward lookup)
IN(Internet Class)
CNAME(CANOCICAL NAME정의:별명설정시 사용) ex) web IN CNAME www.hrd.co.kr.

- reverse lookup시 PTR(Pointer:A속성이랑 반대로 ip->hostname찾을때)사용
#cp named.local 2.68.192.rzone
#vi /var/named/2.68.192.rzone
78 IN PTR hrd78.hpec.co.kr.

- zone transfer 제어
#vi /etc/named.conf의 options에서
allow-transfer { 10.1.6.78; };
allow-transfer { 10.1.6.0/24; };
allow-transfer { none; };

- allow-update
/etc/named.conf에서
zone "redhope.com" IN {
type master;
file "redhope.com.zone";
allow-update { 10.1.6.78; };
};
일 경우

#nsupdate
>prereq nxdomain linux.redhope.com.
>update add linux.redhope.com. 300 A 10.1.6.77
>

- reverse-dns
/etc/named.conf에서
zone "6.1.10.in-addr.arpa" IN {
type master;
file "redhope.com.rev";
allow-update { none; };
};

== NameServer 확인
1. name server 등록
#vi /etc/resolv.conf
namesesrver 10.1.6.##

2. restart network
#/etc/init.d/network restart (service network restart)

3. restart named
#/etc/init.d/named restart (service named restart)

4. 확인
#nslookup
>one.com
..
>192.168.1.##
..

>set q=mx
>one.com
..
>set q=ns
>one.com
..

== IPtables <- kernel 2.4
/etc/sysconfig/iptables
ipchains(2.2), ipfwadm(2.0)
3개의 테이블(default(filter), nat(network address trasration),mangle)
5개의 chain(INPUT, FORWARD, OUTPUT, PREROUTING, POSTROUTING) <- filtering
PREROUTING : INPUT 이전에 <- proxy
POSTROUTING : INPUT 이후에 <-

iptables
tcp_wrappers

# iptables -L
# iptables -L -t nat : 주소전환이 필요할때
# iptables -L -t mangle : 부가적 제어할때
# iptables -P INPUT DROP : input policy change
# iptables -P INPUT ACCEPT
# iptables -A INPUT -s 10.1.6.0/24 -d 10.1.6.0/24 -j ACCEPT
# iptables -A INPUT -s 10.1.6.0/24 -d 10.1.6.0/24 -j DROP
# iptables -D INPUT -s 10.1.6.0/24 -d 10.1.6.0/24 -j ACCEPT
# iptables -D INPUT ACCEPT 1
# iptables-save > /etc/sysconfig/iptables : 설정된 내용을 file 화
# iptables -t nat -A POSTROUTING -s 10.1.6.0/24 -d 0.0.0.0/0 -j MASQUERADE

/proc/sys/ : kernel dump file system
/etc/sysctl.conf : kernel parameter control
# sysctl -p

== MASQUERADE Setting(사설IP에서 인터넷 가능하게 하기)
1. eth0 - 10.1.6.78, eth0:0 - 192.168.0.254
2. routing table에 외부 gateway추가
3. /etc/sysctl.conf 에서 net.ipv4.ip_forward = 0 : routing available
4. # iptables -t nat -A POSTROUTING -s 10.1.6.0/24 -d 0.0.0.0/0 -j MASQUERADE

# ifconfig eth0 192.168.0.254
# ifconfig eth0:0 10.1.6.78
# route add default gw 10.1.6.254
# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
# iptables -t nat -A POSTROUTING -s 192.168.5.0/24 -d 0.0.0.0/0 -j MASQUERADE



========== 가상호스트/Redirect

아래의 예는 dbakorea.pe.kr로 오면, www.dbakorea.pe.kr로 redirect시킨다.
본인은 아파치말고, packet filtering으로 처리하려했으나 실력부족과 게으름으로 인해
그만두었다.

ServerName dbakorea.pe.kr
Redirect / http://www.dbakorea.pe.kr

<VirtualHost 여긴아이피>
ServerName aaaa.co.kr
ServerAlias www.aaaa.co.kr bbbb.co.kr www.bbbb.co.kr
Redirect / http://aaaa.com
</VirtualHost>

============ 가상호스트의 전형적인예

ServerAdmin kang@dbakorea.pe.kr
DocumentRoot /webhosting/dbakorea-mobile
ServerName mobile.dbakorea.pe.kr
ErrorLog /usr/local/apache/logs/mobile.dbakorea.pe.kr-error_log
CustomLog /usr/local/apache/logs/mobile.dbakorea.pe.kr-access_log common
ScriptAlias /cgi-bin/ /webhosting/dbakorea-mobile/cgi-bin/
DirectoryIndex login.html

자주쓰는 명령어 모음





공사중에 로그인 막기
시스템을 공사중일 때, root 이외의 다른 사용자를 로그인 못하게 해야 할 때가 있죠?
그럴 때는, /etc/nologin 이라는 파일을 만들어,
공사중 또는 Under Construction이라는 공지를 넣으면 됩니다.

크기가 가장 큰 파일, 디렉토리 찾기
가장 큰 디렉토리를 찾으려면,
du -S | sort -n

cf) 솔라리스의 경우
du -sk `ls -1 | grep '/$'`|sort +n

가장 큰 파일을 찾으려면,
ls -lR | sort +4n

디스크 Full발생시 쓸모없는 파일 제거
오브젝트파일만 제거하는 예제
find . -name '*.o' -print -exec rm -f {} ;

실행파일들 출력
find . -type f -perm +u+x -print

find의 일반적인 용례
name 파일명 지정한 파일명에 해당하는 파일을 검색
메타문자를 사용할 경우 파일명을 ''기호 내에 기입

-size 파일 크기 지정된 크기의 파일을 검색. 크기는 블록 단위, 1 블록 = 512 바이트
-mtime 숫자 지정된 날짜 이전에 수정된 파일을 검색
-ctime 숫자 가장 최근에 변경된 것이 지정된 날짜 전인 파일 검색
-user 사용자명 지정된 사용자 수용의 파일 검색
-print 검색 결과를 화면에 표시
-atime 숫자 지정된 날짜 이전에 접근 된 파일을 검색
-perm 접근권한 지정

-type 파일 유형 지정된 유형의 파일을 검색
b: 블록 특수 파일
c: 문자 특수 파일
d: 디렉토리
f: 일반파일
l: 링크파일
p: 파이프 파일

-exec 명령어 {} ;
실행 결과를 입력 파일로 받아들여 명령어 실행.
명령어의 끝은 ;
{} : 현재 경로명으로 대치

현재 디렉토리의 크기만을 파악할때
[root@dev2 local]# du -c -h --max-depth=0 *
6.4M apache
35M bin
43M dns
1.7M doc
42k etc
1.0k games
42k geektalkd
1.1M gnuws
1.1M include
41k info
19M jakarta-tomcat-3.2.3
0 jre
15M jre118_v3
25M lib
62k libexec
1011k man
1.3M mm.mysql.jdbc-1.2c
937k sbin
3.8M share
1.8M shoutcast-1-8-3-linux-glibc6
5.2M ssl
159M total

시스템 정보 감추기
/etc/inetd.conf 파일을 열어서,
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h


어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기
ps -aux | sort +4n
또는
ps -aux | sort +5n

FTP로 들어온 사용자 확인하기
ftpwho
ftpcount


원하지 않는 사용자 죽이기
[root@dream /root]# skill -KILL sunny
위의 명령을 내리면 sunny 라는 사용자를 완전히 추방시킬수 있습니다.
그런데 이렇게 완전히 추방시키는게 아니구, 특정 터미널에 접속해있는 사용자만 추방시켜야 할 때도 있겠죠?
그럴때는

[root@dream /root]# skill -KILL -v pts/14
이런식으로 하면 된다 그럼 pts/14 에 연결되어 있는 사용자가 죽게 됩니다.

less 결과를 vi로 보기
less상태에서 v를 누르면 바로 vi로 감


vi에서 블럭 설정하기
alt+v 하면, 라인 단위로 블럭 설정을 할 수 있으며, 해제 하시려면 Esc를 누르면 됩니다.

또한 ctl+v를 하시면, 블럭 단위로 블럭을 설정하실 수 있습니다.

블럭을 설정 하신 뒤,

삭제를 하려면 x
복사를 하려면 y
붙여넣기는 p

man 페이지 프린트하기
vi에 대한 매뉴얼을 ps(postscript파일)로 저장
man -t vi > vi.ps

man 페이지를 일반파일로 갈무리하려면 man vi | col -b > aa.txt

ping 무시하기
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

동시에 여러개의 하위 디렉토리 만들기
mkdir -p music/koreanmusic/ost

리로 다시 살리기
boot : vmlinuz root=/dev/hda6

특정 사용자 ftp 접근 막기
/etc/ftpusers 파일에 로그인 네임을 추가하면 됩니다.

'Computing > Linux' 카테고리의 다른 글

Subversion 사용 HOWTO  (0) 2007.09.04
[펌] Qmail 메뉴얼  (1) 2007.08.09
리눅스 프로그래머를 위한 가이드  (0) 2007.08.08
[펌] Linux 정리 #2  (0) 2007.08.08
tar 분할 압축하기  (4) 2007.07.23
And

[김동렬컬럼] 디워, 전쟁이 시작되었다. 충무로를 타격하라.

|
http://www.dailyseop.com/section/article_view.aspx?at_id=61196

[김동렬컬럼] 디워, 전쟁이 시작되었다. 충무로를 타격하라.
데일리 서프라이즈
이건 전쟁이다. 처음은 몇몇 평론가와 네티즌 사이의 작은 설전으로 시작되었다. 이 전쟁이 전면전쟁으로 비화된 것은 언제나 그렇듯이 일부 욕심많은 군수업자들의 농간 때문이었다. 언론이라는 이름의 표지를 건 군수업자들이 이송희일, 김조광수씨의 숨어있는 개인 블로그를 귀신같이 찾아내어 광장에 모여든 군중들 앞에 전시하고 외쳐댄 것이다. ‘보라! 여기 너희들이 타격해야 할 적이 있다’고. 그러자 곧 거대한 장이 들어섰다. 이 정도면 볼 만 하게 된 것이다.

이제 전쟁은 충무로와 일부 언론 대 전체 대중들 사이의 전쟁으로 확대되었다. 이 전쟁에서 대중이 이기면 충무로는 어떻게 되고 충무로가 이기면 또 충무로는 어떻게 되는가? 충무로는 반드시 대중을 패배자로 만들어야 하는가? 대중이 패배자가 되면 충무로는 어떤 전리품을 챙기는가? 생산자가 소비자를 적으로 만들어서 어떤 이익을 얻는다는 말인가? 분노한 소비자가 지갑을 닫아버리면 그 피해는 어디로 가는가?

이왕 벌어진 전쟁이다. 이제와서 전쟁을 말리려 해봤자 때리는 시어미보다 말리는 시누이가 더 밉다는 격으로 전쟁은 더욱 확대될 뿐이다. 길은 하나 뿐이다. 이 전쟁에서 충무로가 져야 한다. 잘난 척 하는 평론가들이 져야 한다. 색안경을 들이댄 일부 언론이 져야 한다. 참패해야 한다. 관객이 승리하고 대중이 승리해야 한다. 그것이 충무로가 살고 평론가가 살고 모두가 사는 길이다. 그리고 패배한 쪽은 굴욕을 당해야 한다. 마땅히 반성하고 사과하고 변해야 한다. 충무로가 바뀌어야 한다. 관객은 지금 그것을 요구하고 있다.

이 전쟁은 관객들의 충무로에 대한 불만이 누적된 상태에서 심형래라는 기폭제가 우연히 작용한 것이다. 심형래는 관객과 충무로 사이에서 전쟁을 일으킬 의도가 없었다. 그는 단지 한 사람의 영화감독으로 인정받기를 바랬을 뿐이다. 그렇다. 이건 사고다. 우연히 충무로가 그 비열한 속마음을 들켜버린 것이다.

관객들은 누적된 불만을 터뜨릴 기회를 잡은 것이다. 그러므로 이 싸움은 일정 부분 의도된 것이며 본질에서는 심형래의 영화와 무관한 것이다. 관객들과 충무로 사이에는 본래부터 태풍전야의 긴장이 조성되어 있었으며 심형래는 우연히 그 긴장의 한가운데에 들어서서 태풍의 눈이 되어버린 것이다. 1988년의 칠수와 만수처럼.

이 사건을 투박하게 재구성하면 충무로가 ‘심형래 길들이기’를 하고 있다는 사실을 우연히 눈치챈 관객들이 일제히 달려들어 ‘충무로 길들이기’에 나서버린 것이다. 그렇다. 이건 우리가 무수히 보아온 낯익은 풍경이다. 군대에서도 보았고 사회에서도 보아온 신고식 말이다. 면신례라고도 하고 신참례라고 한다. 고려시대부터 있었다고 전한다. 텃세라고도 한다. 어디를 가나 이 사회에는 그 바닥이라는 것이 있고 신참은 기득권들의 집요한 공격을 당해야 한다.

그리고 언제나 그렇듯이 새로 진입한 신참을 물어뜯는 개떼 역할은 그 기득권 그룹의 막내가 담당하는 것이다. 가장 최근에 신참 딱지를 뗀 사람이 신고식의 총대를 맨다. 충무로 변두리 하고도 말석의 막내인 새내기 일병 이송희일과 김조광수에게 이등병 길들이기 역할이 돌아가는 것은 너무나 당연하다.

그들은 집단의 생리를 충실히 따라서 심형래에게 ‘너도 감독이냐?’ 하고 ‘전학생 괴롭히기’를 시도했고 그러한 내막을 본능적으로 감(感) 잡아버린 네티즌들이 ‘너희도 당해봐라’하고 ‘역 전학생 길들이기’를 시도한 것이다.

이제 절대 다수의 관객과 충무로는 적이 되어버렸다. 루비콘 강을 건넜다. 돌이킬 수 없게 되었다. 영화를 만드는 업에 종사하는 사람이 ‘(누구의) 영화를 보지 말라’고 선동한다. 기업하는 사람이 소비자에게 ‘(누구의) 물건 사지 말라’고 압박한다. 세상이 미쳐 돌아가고 있다. 충무로가 드디어 미쳐버린 것이다. 자기 밥그릇을 차도 유분수지 말이다. 심형래라는 빅브라더 예비후보의 탄생을 불편하게 여겨 견제작업 들어간다는 것이 잘못되어 결과적으로 그렇게 되어 버렸다. 이건 철저하게 정치적 사건이다.

아무 생각없이 디워를 본 순수한 관객을 모독하는 저 안하무인의 태도를 보라. 너무나 겸손하지 않다. 동업자 정신을 발휘하여 수준이하의 영화에도 주례사비평의 호평을 던져주던 몰상식한 자들이 심형래 신참에게만 유독 악평을 던지는데서 알 수 있듯이 그들의 평은 하나같이 증오를 담고 있다.

악착같이 텃세를 부리고 신고식을 시키고 기어코 물을 먹이겠다는 것이다. 손을 봐주겠다는 것이다. 누가 명령하고 사주하지 않았는데도 손발이 척척 맞는 것은 스크린쿼터 투쟁으로 손발을 맞춰온 충무로 특유의 끈끈한 결속력 때문이다.

결국 아무 생각없이 디워에 박수를 보낸 관객을 물먹이고 관객에 대해 증오의 감정을 쏟아낸 결과로 된 것이다. 심형래의 일련의 돌출행동은 많아 봤자 일년에 서너차례나 극장을 찾을 뿐인 평균적인 한국 관객의 심사를 정확하게 대변하고 있다. 그들은 평균적인 한국관객의 평균적인 수준을 적대시한 것이다. 디워를 이미 보았거나 앞으로 볼 계획인 일천만 이상의 관객들에게 ‘너희 벌거숭이 애들은 너무 수준이 낮아서 상종을 못하겠어!’ 하고 모욕을 가한 것이다. 왜 이렇게 되었을까?

이 모든 것의 기저에는 ‘충무로의 권력화’라는 본질이 숨어 있다. 불행하게도 이 사회가 실력을 위주로 평가되는 사회가 아니라 권력을 중심으로 평가되는 사회이기 때문이다. 그것을 잘 알기 때문에 피해의식을 가지고 자기보호를 위해 스스로 권력화를 시도한 심형래의 돌출행동에 비위가 상한 충무로 권력이 새로운 빅브라더(?) 심형래를 견제한 것이다. 순전히 권력적인 동기로 말이다. 아니라고 말할 자 누구인가?

왜 이렇게 되었는가? 왜 다수의 관객이 충무로에 환멸을 가지게 되었는가? 왜 관객과 충무로 사이에 태풍전야의 긴장이 조성되었는가? 간단하다. 최고 연기파 배우 최민식이 영화에 거의 출연하지 않고 있기 때문이다. 4, 5년 전부터 일류 배우들이 영화에 잘 나오지 않게 되면서 충무로와 관객 사이에 긴장이 조성되었다. 2005년에 있었던 빅브라더 강우석의 실명비판이 결코 우연은 아니다.

만화가 이현세의 고백에 그런 내용이 있다. 만화가 그룹의 리더로 떠오르면서 만화 그리기를 등한시 하고 만화가 단체의 일에 시간을 뺏기면서 스스로 타락했다고. 똑같은 거다. 최민식은 본래 충무로의 막내였다. 어느 사이에 형님이 되어버린 것이다. 그리고 지금 형님놀이에 몰두하고 있다.

형님 체면을 위해 충무로의 밥그릇이 걸린 스크린쿼터 투쟁이 더 중요해져서 영화에 자주 출연할 수 없게 된 것이다. 그 이전에는 한석규가 그랬고 그 이전에는 안성기도 한때 그랬다. 그들이 영화에 잘 출연하지 않는 이유는 목에 힘이 들어갔기 때문이다.

관객이 충무로에 반감을 가지게 된 이유는 그들이 고리채 광고에 출연하는 뻔뻔함을 보여서도 아니고, 비싼 외제차를 타고 다녀서도 아니고, 5억원 플러스 러닝개런티라는 고액의 출연료를 요구해서도 아니다. 그 따위는 그다지 문제가 안 된다. 유능한 배우가 자신이 번 돈으로 외제차를 타건 고액의 출연료를 받건 상관이 없다. 다 양해할 수 있다. 영화에만 자주 출연해 준다면. 문제는 그들이 ‘형님놀이’에 몰두해서 영화를 사랑하지 않게 된 데 있다. 더 이상 관객을 사랑하지 않게 된 데 있다.

그리지 않는 만화가는 더 이상 만화가일 수 없고 출연하지 않는 배우는 더 이상 배우일 수 없다. 왜 이렇게 되었는가? 왜 한 때의 이현세는 만화를 그리지 않고 만화가단체 일에 전념하게 되었는가? 건방이 들었기 때문이다. 오만해졌기 때문이다. 내가 쪽팔리게 코흘리개 애들 푼돈이나 뜯는 만화 따위나 그리게 생겼는가? 난 천한 ‘망가쟁이(만화계 은어)’가 아니라구! 난 이래뵈도 어엿한 대학교수라구. 대학교수 체면이 있지 어떻게 천한 만화 따위나 그리겠느냐고! 이렇게 된 것이다.

이현세가 스스로를 만화가 이현세가 아닌 대학교수 이현세로 혹은 만화가 단체의 좌장 이현세, 혹은 협회장 이현세로 신분을 격상시키면서 만화그리기라는 노동을 거부하기 시작한 것이다. 그는 하층계급인 노동자 신분을 거부한 것이다. 물론 이현세는 지금 그러한 과거를 반성하고 다시 펜을 잡았다고 고백하고 있다.

배우들도 마찬가지다. 그들은 원하는 부를 얻자 곧 신분상승 작업에 착수하였다. 그들이 고액의 출연료를 요구하는 이유는 돈을 벌기 위해서가 아니라 영화에 출연하지 않을 핑계를 만들기 위해서이다. 돈을 원한다면 더 많은 영화에 부지런히 출연하면 된다. 한 때의 주윤발처럼. 그들이 원하는 것은 돈이 아니라 충무로 안에서의 형님대접이다. 그들은 신분상승을 위해 돈 마저도 포기해버린 것이다.

내가 체면이 있지 딴따라 노릇이나 하게 생겼느냐 이거다. 나는 이제 신분상승해서 이 바닥의 원로가 되었으니 이제 동생들 밥그릇이나 챙겨주는 큰형님 역할을 해야지! 이렇게 된 것이다. 그들이 타락한 것이다. 본래 노동자였던 자들이 지금은 스타가 되어서 노동을 거부하고 있다.

충무로가 백번 잘못했다. 내가 생각하는 충무로의 바른 태도는 이런 것이다. 디워는 적어도 한 가지 이상의 참신한 점이 있고 또 충무로 역사상 거의 최초로 온 가족이 함께 볼 수 있는 성공하기 쉬운 장르의 영화이다. 관객의 선호도가 높은 장르의 특성상 히트는 예정되어 있다. 괴물의 히트로 입증이 되었듯이 말이다. 당연히 천만 이상의 관객이 몰려들게 되어 있다. 원래 관객은 착하다. 어지간히 봐 줄 만 하면 그냥 봐준다. 그 관객들을 의식하고 겸손하게 말해야 했다.

그리고 변해야 한다. 지금 충무로의 모습은 참담하다. 여러 장르가 있음에도 불구하고 한 두가지 식상한 장르에 99가 몰려 있고 나머지 장르를 심형래가 혼자 독식하고 있다. 관객은 뭔가 새로운 점이 한 가지만 있으면 다른 여러 단점에는 눈감아 주는 관대함을 가지고 있다.

그렇게 관대한 관객이 충무로를 외면하는 이유는 그들이 어리석게도 1의 협소한 장르에 99가 몰려들어 제살깎아먹기 경쟁을 벌이고 있기 때문이다. 그 판국에 심형래가 홀로 바깥으로 나가서 블루오션을 개척한 것이다. 원래 관대한 관객이 충무로를 외면하게 만든 책임은 순전히 충무로에 있다는 말이다.

기왕지사 벌어진 전쟁이다. 이 전쟁에서 충무로가 이기면 충무로가 망하고 충무로가 지면 충무로가 흥한다. 그러므로 충무로를 적으로 삼고 강력하게 타격해야 한다. 충무로가 스스로 반성하고 참회하고 개혁할 때까지. 그렇게 하는 것이 모두의 이익이 된다. 심형래의 엉성한 영화를 박수치며 봐주는 이 관대하고 착한 관객들이 충무로를 외면하게 만든 원인은 순전히 그들의 과도한 목에 힘주기에 있으니까.

충무로 인맥구조 안에서 그들의 폐쇄적이고 배타적인 결속력이 높아질 수록 관객과의 거리는 멀어질 것이다. 사랑하기 때문에 미워하는 것이다. 그렇지 않나? 관객의 스타에 대한 사랑의 농도가 높아질수록 충무로 식구들의 배타성에 대한 반감도 높아만 간다.

젠장! 한국에서는 꼭 이렇게 된다. 바닥이 너무나 좁기 때문이다. 넓은 운동장에 양팔 간격으로 흩어져 있지 않고 너무 밀착해 있어서 약간의 마찰에도 모두가 피곤해 하며 한 마디씩 거들게 된다. 그 때문에 쓸데없이 룰이 복잡해진다. 뭔가 새로운 것을 들고 나오는 사람은 공동체의 룰을 어겨서 괘씸죄에 걸려 고립되고 만다. 그 경우 누구의 도움도 받지 못하고 혼자서 모든 것을 다해야 한다.

심형래나 김기덕이 그래도 한 가지 재주는 있는 사람인데 그 쓸데없이 복잡해진 공동체의 룰을 어기고 튀는 행동을 했다는 이유로 그 한 가지 재주를 써먹지 못하고 배척하고 마는 것이다. 이건 공동체의 손해로 귀결된다.

▲ 김동렬 칼럼니스트 
그리고 피해자의 대응도 문제가 있다. 발목잡기를 시도하는 방해자를 제거하기 위해 스스로를 신격화 한다. 빅브라더가 되려고 한다. 신격화를 시도하므로 기득권 그룹에 의해 더욱 배척된다. 따돌림을 당한다. 대중은 약자편을 들어서 문제를 증폭시킨다. 이런 악순환은 끝없이 반복된다. 한국이란 이 작은 나라에서 말이다. 그 악순환의 고리를 지금 끊어내야 한다. 그러기 위해서는 강력하게 충무로를 타격해야 한다.

여러가지로 모자라더라도 한 가지 재주가 있는 사람이 있다면 그 한가지 재주를 써먹는 방향으로 공동체의 룰을 바꾸어가야 한다. 밖에서 블루오션을 개척하는 사람을 적극적으로 응원하는 문화가 정착되어야 한다. 그것이 갑자기 말려들어 이 전쟁에 참여하게 된 모든 사람이 바라는 속마음이다.

심형래 길들이기 대 충무로 길들이기다. 충무로가 길들여져야 평화는 찾아온다. 심형래도 잘못이 있고 충무로도 잘못이 있지만 역사는 심형래의 편이다.


외부 필자의 칼럼은 필자 개인의 의견으로 본 사이트의 편집 방향과 일치하지 않을 수도 있습니다.

김동렬 (서프라이즈 대표필자)

And

[펌]MySql 복구 방법

|
회사 직원의 실수로 Mysql 을 특정 DB를 날렸다.
결국 복구는 했지만 백업화일을 만들어 두지 않아서 나름 귀찮고 힘든 과정이었다.
그래서 mysql 를 날렸을때 복구하는 방법을 간단하게나마 설명하고자 한다.

root 계정으로 작업하고 /usr/local/mysql 을 기본 디렉토리로 본다는 가정하에.. ^^

mysqldump를 이용한 백업화일이 존재하는 경우
/usr/local/mysql/bin/mysql -u root -p < BackUp.sql
가장 쉽게 복구하는 방법이다.

하지만 이 경우 문제점이 있다.
Cron 등의 프로그램으로 매일 백업을 받는다고 하더라도...
백업받은 시점과 DB를 날린 시점에서의 데이터는 다를수 있기 때문이다.

그런 부분을 커버 할수 있는것이 binlog 이다.
원래 binlog는 replication 을 위한 것인데... replication 이 아닌 복구용도로도 훌륭한 데이터이다.
/etc/my.cnf 에..
log-bin 라는 부분이 주석처리 되어 있지않으면..
mysql 은 기본적으로 /usr/local/mysql/data 디렉토리에 Host명-bin.000001 Host명-bin.000002 .... 과 같은
형식으로 만들어 질것이다. mysql을 재시작할때마다 Host명-bin.0000001 에서 숫자부분이 늘어난 화일이
생성되며 그 화일에 새롭게 기록한다.

※ mysql binlog 디렉토리 설정
my.cnf 에서
log_bin            = /usr/local/mysql/data/mysql-bin.log <== 이런식의 설정도 가능하다.

bin 로그에는 기본적으로 DDL(Create, Alter, Drop)문과 DML중 Insert Update Delect 문등이 기록되는데..
이 기록들은 기본적으로 데이터에 변화를 주는 SQL문들이다..

bin 로그를 보려면 log의 데이터를변환해야한다.
binlog는 기본적으로 바이너리로 되어 있기에 텍스트 형태로 푸는 과정이 필요하다.
/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/Host명-bin.000001 >> 1.sql
이와 같은 과정으로 모든 binlog를 푼다..

vi 등으로 보면 시간 및 각각의 sql문들이 보일것이다..

※ 로그화일 쪼개기
가끔 log 화일이 너무 커서 제대로 인식이 안되는 경우가 있다.
이런 경우 split 이라는 훌륭한 툴이 있다.
split -l 100000 1.sql
10만 라인별로 1.sql 을 xaa, xab, aac..... 순으로 화일이 생성되면서 짜른다.

자 이제 복구를 하자라고 하고 싶지만..
여기서 주의 할것이 있다..
처음에... drop database 같은 sql 을 날렸다면
이 역시 binlog에 포함되어 있을것이다.
맨 마지막 로그 화일을 열어서 그부분을 삭제 또는 주석처리하자..
그렇지 않으면 애써 복구한것을 마지막에 다시 또 날리는 되는 결과를 .....

이제서야 복구를 할수 있을것이다.
/usr/local/mysql/bin/mysql -u root -p < 1.sql

만약 여기서도 5만줄쯤에서 오류가 났다라고 한다면...
1.sql 에서 1~49999 까지는 실행이 되었다.
그러므로 1~49999 를 삭제(vi 로 연다음 d49999 이라고 입력하고 Enter ...)한다.

그리고 문제가 되는 첫줄(1~49999를 삭제하기전에는 오류가 난 5만번째라인)의 SQL 부분을 해결한다음...
저장....
그리고 다시 복구과정을 반복
/usr/local/mysql/bin/mysql -u root -p < 1.sql

php 스쿨 [서버운영] Drop 된 Mysql Binlog를 이용한 복구 과정 에서 퍼 왔습니다.

'Computing > MySQL' 카테고리의 다른 글

mysql 복구  (0) 2011.11.04
[Mysql] 쿼리문 내에서 encoding 변경...  (0) 2010.11.17
[펌]MySQL Cluster  (0) 2007.07.25
[펌]MySQL Replication 설치  (3) 2007.07.25
And

[펌]MySQL Cluster

|

MySQL Cluster
저작권:이 문서는 자유롭게 배포가 가능합니다. 단 상업적 용도로 사용할 수 없습니다.
배포 시 작성자의 이름 및 출처를 꼭 명시하기 바랍니다.

작성자 : f405(ccotti22)
작성일 : 2005년 8월 10일 수요일
이메일 : f405@naver.com
홈페이지 : http://f405.tistory.com

이 문서는 MySQL Cluster 매뉴얼을 번역, 정리한 것으로 틀린 부분을 다소 포함할 수 있으며, 저는 그에 대한 책임을 지지 않겠습니다.

부족하지만 다른 분들도 공부하는데 도움이 되길 바랍니다.

그리고 이 문서를 작성하기 전 참고한 리눅스 및 MySQL 문서들을 작성하신 많은 선배님들에게 감사의 말씀을 드립니다.
그리고 이 후부터는 경어는 생략하였습니다. 양해의 말씀을...

Introduction

MySQL 클러스터는 분산 컴퓨팅 환경에서 high-availability와 high-redundancy를 채택하였다. MySQL 클러스터는 NDB 클러스터 스토리지 엔진을 사용하여, 클러스터에서 여러 개의 서버가 함께 돌아가도록 한다. MySQL 클러스터가 지원하는 운영 체제는 Linux, Mac OS X, Solaris 등 이다. 더 자세한 정보는 다음 사이트를 참고 하길 바란다.
http://www.mysql.com/products/cluster

1. MySQL Cluster Overview

MySQL 클러스터는 share-nothing 시스템에서 in-memory 데이터 베이스의 클러스터링을 가능하게 한다. 이러한 아키텍쳐는 특정한 하드웨어 및 소프트웨어를 요구하지 않으므로 비용을 절감할 수 있도록 하며, 각 콤포넌트가 고유 메모리와 디스크를 보유함으로 단일 취약점(single point of failure)을 가지지 않는다.

MySQL 클러스터는 일반 MySQL 서버에 NDB라는 스토리지 엔진을 통합하여, 다음 그림과 같이 MySQL서버, NDB 클러스터의 데이터 노드, MGM 서버가 포함된 컴퓨터와 데이터에 접근하기 위한 어플리케이션 프로그램으로 구성된다.
데이터가 NDB 클러스터 스토리지 엔진에 저장될 때, 테이블은 데이터 노드에 저장된다. 각 테이블은 클러스터의 MySQL 서버에서 직접 접근이 가능하다. 그래서 클러스터의 어떤 정보를 업데이트 하면, 다른 모든 MySQL서버에서 곧바로 확인할 수 있다.
MySQL 클러스터의 데이터 노드에 저장된 데이터는 미러링이 가능하며, 클러스터는 트랜잭션 중단 등 각 노드들의 상태에 대한 핸들링이 가능하다.

http://dev.mysql.com/doc/refman/5.0/en/images/cluster-components-1.png
MySQL 클러스터의 구성

2. Basic MySQL Cluster Concepts

NDB는 높은 가용성과 데이터 지속성을 갖는 인 메모리 스토리지 엔진이다. DB 스토리지 는 failover와 로드 밸런싱 옵션을 설정할 수 있다. MySQL 클러스터는 NDB 스토리지 엔진과 MySQL 서버로 구성되어 있으며, MySQL 클러스터의 클러스터 부분은 MySQL 서버에 독립적이다. MySQL 클러스터의 각 부분은 노드로 간주한다.

"노드"는 일반적으로 컴퓨터를 지칭하지만 MySQL 클러스터에서는 "프로세스"를 말한다.

클러스터 노드에는 세 가지 타입이 있으며, MySQL Cluster를 구성하기 위해 최소한 노드 세 개가 있어야 한다.
  • MGM node : 이 노드는 설정을 포함, 다른 노드를 관리하는 매니저 노드이다.
                       다른 노드보다 가장 먼저 실행되며 ndb_mgmd 명령으로 실행시킨다.
  • data node : 클러스터의 데이터를 저장하는 노드이다.
                      ndbd 명령으로 실행시킨다.
  • SQL node : 클러스터 데이터에 접근하는 노드이다.
                      MySQL 클러스터에서는 NDB 클러스터 스토리지 엔진을 사용하는
                      MySQL 서버가 클라이언트 노드이다.
                      mysqld --ndbcluster나 mysqld 명령으로 실행시키는데,
                      이 때는 my.cnf 에 ndbcluster를 추가한다.
MGM 노드는 클러스터 컨피그레이션 파일과 로그를 관리한다. 데이터 노드에 이벤트가 발생하면, 데이터 노드는 그에 대한 정보를 매니저 서버로 보내고, 매니저 서버는 클러스터 로그를 기록한다.

Simple Multi-Computer How-To

다음과 같이 4대의 컴퓨터로 클러스터를 구성하는 것을 가정하고 있다. (4개의 노드로 구성되고, 각각의 노드는 편이성을 위해 IP로 지칭한다.)

아래에서 필요한 컴퓨터는 리눅스가 설치된 인텔 기반 데스크탑 PC이며, 4대 모두 동일한 이더넷 카드(100Mbps나 1기가 비트)가 필요하다.

Node

IP Address

Management (MGM) node

192.168.0.10

MySQL server (SQL) node

192.168.0.20

Data (NDBD) node "A"

192.168.0.30

Data (NDBD) node "B"

192.168.0.40




설치 및 사용 시 주의할 점은 MySQL 클러스터는 클러스터 노드 간 커뮤니케이션에 암호화 및 보호 장치가 전혀 없으므로, 웹 상에서 사용하려면 방화벽을 사용하는 등의 보안상의 대책이 필요하다는 것이다.

MySQL Cluster를 사용하기 위해서는 -max 버전을 설치해야 한다.
모든 설치는 root권한으로 진행하며 작업에 필요한 파일은 /usr/local/ 에 저장한다.
1. /etc/passwd 와 /etc/group 파일에서 mysql 그룹과 유저가 있는지 확인한 후 없으면 다 음과 같이 생성한다.
# cd /usr/local
# groupadd mysql
# useradd -g mysql mysql

2. 유저와 그룹 생성 후 압축을 풀고, 심볼릭 링크를 걸어준다.
# tar -xzvf mysql-max-4.1.13-pc-linux-gnu-i686.tar.gz
# ln -s /usr/local/ mysql-max-4.1.13-pc-linux-gnu-i686 mysql
3. mysql 디렉토리로 이동하여 시스템 데이터베이스 생성을 위한 스크립트를 실행시킨다.
# cd mysql
# scripts/mysql_install_db --user=mysql

4. MySQL 서버와 데이터 디렉토리의 퍼미션을 설정한다.
# chown -R root .
# chown -R mysql data
# chgrp -R mysql .


5. 시스템 부팅 시 자동적으로 Mysql을 실행할 수 있도록 설정한다.
# cp support-files/mysql.server /etc/rc.d/init.d/
# chmod +x /etc/rc.d/init.d/mysql.server
# chkconfig --add mysql.server

6. MGM (management) 노드를 별도의 PC에 설치할 경우 mysql 데몬은 설치하지 않아도 무방하다. 위와 같이 설치한 후 MGM 서버는 다음과 같이 설치를 계속한다.
# cd /usr/local/mysql/bin/
# cp ndb_mgm* /usr/local/bin/
# chmod +x ndb_mgm*
7. 각 데이터 노드와 SQL 노드는 MySQL서버 옵션과 connectstring에 대한 정보가 포함된 my.cnf파일이 필요하고, MGM노드는 config.ini 파일이 필요하다. 에디터를 열어 다음과 같이 편집한 후 파일을 저장한다.
# vi /etc/my.cnf 
[MYSQLD] # Options for mysqld process:
Ndbcluster # run NDB enginen
db-connectstring=192.168.0.10 # location of MGM node








[MYSQL_CLUSTER] # Options for ndbd process:
ndb-connectstring=192.168.0.10 # location of MGM node

8. MGM 노드의 설정 파일을 만들기 위해 적당한 디렉토리를 만든 후 에디터를 열어 다음과 같이 편집한다.
# mkdir /var/lib/mysql-cluster# cd /var/lib/mysql-cluster
# vi config.ini
[NDBD DEFAULT] # Options affecting ndbd processes on all data nodes:
NoOfReplicas=2 # Number of replicas
DataMemory=80M # How much memory to allocate for data storage
IndexMemory=18M # How much memory to allocate for index storage
# For DataMemory and IndexMemory, we have used the
# default values. Since the "world" database takes up
# only about 500KB, this should be more than enough
# for this example Cluster setup.
[TCP DEFAULT] # TCP/IP options:portnumber=2202
# This the default; however, you can use any
# port that is free for all the hosts in cluster
# Note: In MySQL 5.0, this parameter is deprecated;
# it is recommended that you do not specify the
# portnumber at all and simply allow the port to be
# allocated automatically
[NDB_MGMD] # Management process options:
hostname=192.168.0.10 # Hostname or IP address of MGM node
datadir=/var/lib/mysql-cluster # Directory for MGM node logfiles
[NDBD] # Options for data node "A":
# (one [NDBD] section per data node)
hostname=192.168.0.30 # Hostname or IP address
datadir=/usr/local/mysql/data # Directory for this data node's
# datafiles
[NDBD] # Options for data node "B":
hostname=192.168.0.40 # Hostname or IP address
datadir=/usr/local/mysql/data # Directory for this data node's
# datafiles
[MYSQLD] # SQL node options:
hostname=192.168.0.20 # Hostname or IP address
datadir=/usr/local/mysql/data # Directory for SQL node's datafiles
# (additional mysqld connections can be
# specified for this node for various
# purposes such as running ndb_restore)

설치와 설정 과정이 끝났다. 이제 실행을 해 보자.

클러스터 노드들은 각각 실행되어야 한다. 실행 순서는 매니지먼트 노드를 가장 먼저 실행할 것을 권한다. 그 다음은 스토리지 노드와 SQL노드 순이다. 1. 매니지먼트 호스트에서 MGM 노드 프로세스를 실행시켜 보자. 컨피그레이션 파일을 찾을 수 있도록 -f 옵션을 주도록 한다.
# ndb_mgmd -f /var/lib/mysql-cluster/config.ini
MGM 노드를 다운시킬 때에는 다음과 같이 하면 된다.
# ndb_mgm -e shutdown

2. 다음으로 데이터 노드 호스트에서 NDBD프로세스를 실행시킨다. --initial 이란 인수는 ndbd를 처음 실행할 때와 컨피그레이션이 바뀐 후 재시작 할 때만 사용한다.
# ndbd --initial

3. SQL 노드는 다음과 같이 mysql.server를 실행시킨다.
# /etc/rc.d/init.d/mysql.server start

4. 이제 모든 노드가 실행되었으니 MGM 노드 클라이언트를 띄워 간단히 테스트를 해보자.

Ndb_mgm명령어를 입력하였을 때 정상적으로 동작하는 모습은 다음과 같이 프롬프트가 떨어지는 모습이다.
# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm>

5. 이제 show명령어를 사용하여 클러스터의 모든 노드들이 정상적으로 연동되는지 확인을 해 보자. HELP 를 입력하면 다른 명령어들도 확인해 볼 수 있다. 다음과 같이 4개의 노드를 구성하는 것에 성공하였다.
ndb_mgm> show
Connected to Management Server at: 192.168.0.10:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.30 (Version: 4.1.13, Nodegroup: 0, Master)
id=3 @192.168.0.40 (Version: 4.1.13, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.10 (Version: 4.1.13)
[mysqld(API)] 1 node(s)
id=4 (Version: 4.1.13)
ndb_mgm>


3. MySQL 클러스터의 제한


MySQL Cluster 4.1.x 버전은 다음과 같은 사용상의 제한점을 지닌다.

  • 트랙잭션 수행 중의 롤백을 지원하지 않으므로, 작업 수행 중에 문제가 발생하였다면, 전체 트랙잭션 이전으로 롤백하여야 한다.
  • 실제 논리적인 메모리의 한계는 없으므로 물리적으로 허용하는 만큼 메모리를 설정하는 것이 가능하다.
  • 컬럼 명의 길이는 31자, 데이터베이스와 테이블 명은 122자까지 길이가 제한된다. 데이터베이스 테이블, 시스템 테이블, BLOB인덱스를 포함한 메타 데이터(속성정보)는 1600개까지만 가능하다.
  • 클러스터에서 생성할 수 있는 테이블 수는 최대 128개이다.
  • 하나의 로우 전체 크기가 8KB가 최대이다(BLOB를 포함하지 않은 경우).
  • 테이블의 Key는 32개가 최대이다.
  • 모든 클러스터의 기종은 동일해야 한다. 기종에 따른 비트저장방식이 다른 경우에 문제가 발생하기 때문이다.
  • 운영 중 스키마 변경이 불가능하다.
  • 운영 중 노드를 추가하거나 삭제할 수 없다.
  • 최대 데이터 노드의 수는 48개이다.
  • 모든 노드는 63개가 최대이다. (SQL node, Data node, 매니저를 포함)

4. MySQL Cluster FAQ


Cluster 와 Replication의 차이

리플리케이션은 비동기화 방식이고, 클러스터는 동기화 방식이다. 따라서 리플리케이션은 일방적으로 데이타를 전달하여 복제를 하지만 클러스터는 동기방식이므로 데이타를 복제한 후 결과를 확인하기 때문에 데이타 누락이 발생하지 않는다. 다만 복제한 결과를 확인해야 하기 때문에 Cluster가 Replication보다는 속도가 느리다. 또한 Replication의 경우 복제된 데이터에 대한 신뢰를 할 수 없다.


Cluster가 사용하는 네트워크 (How do computers in a cluster communicate?)

MySQL 클러스터는 TCP/IP를 통해 서로 통신한다. 최소한 100Mbps의 이더넷을 사용해야 하며 원활한 통신을 위해 gigabit 이더넷을 권고한다. 실제 데이터가 메모리에 존재하여 사용되며 물리적인 측면에서 봤을 때 CPU, 메모리, 각 노드간의 통신을 위한 네트워킹이 주를 이룬다. 이중 가장 속도가 느린 네트워크의 속도를 높임으로써 전체적인 빠른 동작이 가능하도록 해야 한다. 또한, 더욱 빠른 SCI 프로토콜도 지원하며, 이는 특정 하드웨어를 필요로 한다.


클러스터를 구성하기 위해 컴퓨터가 얼마나 필요한가?

최소한 3대가 있어야 클러스터 구성이 가능하나, MGM 노드와 SQL 노드, 스토리지 노드 둘, 이렇게 4 대로 구성하길 권한다. 하나의 노드가 실패했을 때 지속적인 서비스를 하기 위해서 MGM노드는 분리된 컴퓨터에서 실행되어야 한다.


클러스터에서 각 컴퓨터들이 하는 일은?

MySQL 클러스터는 물리적, 논리적으로 구성된다. 컴퓨터는 물리적 요소이며 호스트라고 불리기도 한다. 논리적, 기능적 요소는 노드이다. 노드는 역할에 따라 MGM 노드, data 노드(ndbd), SQL 노드로 나뉜다.


어떤 OS에서 사용할 수 있는가? MySQL 4.1.12 현재 MySQL 클러스터는 공식적으로 Linux, Mac OS X, Solaris를 지원한다.


MySQL 클러스터가 요구하는 하드웨어 사양은?

NDB가 설치되고 실행되는 모든 플랫폼이면 가능하나, 당연히 빠른 CPU, 높은 메모리에서 더 성능이 좋다(64-bit CPU에서 더 빠르다). 네트워크은 일반 TCP/IP를 지원하면 되고, SCI 를 지원하려면 특정 하드웨어가 요구된다.


MySQL 클러스터가 TCP/IP를 이용한다면 하나 이상의 노드를 인터넷을 통해 다른 곳에서 실행시킬 수 있는가?

가능하다. 하지만 MySQL 클러스터는 어떠한 보안도 제공되지 않으므로, 외부에서 클러스터 데이터 노드나 매니저 노드에 직접 접근하지 못하도록 해야 한다.


클러스터 사용을 위해 새로운 프로그래밍 언어나 쿼리를 배워야 하나?

표준 (My)SQL 쿼리나 명령을 사용하므로 그러지 않아도 된다.


클러스터 사용 시 에러나 경고 메시지는 어디서 찾나 ? 두 가지 방법이 있다. MySQL창에서 SHOW ERRORS나 SHOW WARNINGS로 확인하는 방법과 프롬프트 상태에서 perror --ndb error-code 를 사용하는 방법이 있다.


MySQL Cluster transaction-safe? 어떤 테이블 타입이 클러스터를 지원하나? MySQL에서 NDB 스토리지 엔진과 생성된 테이블은 트랜잭션을 지원한다. NDB는 클러스터링만 지원하는 MySQL 스토리지 엔진이다.


"NDB" 의 의미는? "Network Database".


클러스터를 지원하는 MySQL 버전은? 소스를 컴파일 해야 하나?

MySQL-max 4.1.3부터 지원한다. 바이너리 파일은 컴파일을 할 필요가 없다.


RAM은 얼마나 필요한가? 디스크는 사용하지 못하나?

클러스터는 오직 in-memory이며, 모든 테이블 데이터(인덱스 포함)가 RAM에 저장된다. 클러스터에서 필요한 RAM용량은 다음 공식으로 계산한다.
(SizeofDatabase * NumberOfReplicas * 1.1 ) / NumberOfDataNodes


ERROR 1114: The table 'my_cluster_table' is full

위와 같은 에러가 발생했을 때는 할당된 메모리가 부족한 경우이다.


FULL TEXT 인덱스를 지원하는가?

현재 지원하지 않는다.


하나의 컴퓨터에서 여러 개의 노드가 돌아가는가?

가능하긴 하지만 권하진 않는다. 각 노드들이 다른 컴퓨터에서 실행되는 것이 더 안정적이다.


클러스터를 재시작하지 않고 노드를 추가할 수 있는가?

할 수 없다. MGM 이나 SQL 노드를 추가하려면 새로 시작해야 한다.


어떻게 기존의 MySQL 데이터베이스를 클러스터로 임포트 하는가?

ENGINE=NDB 나 ENGINE=NDBCLUSTER 옵션을 가진 테이블은 임포트할 수 있다. 또는 ALTER 기능으로 기존의 테이블을 클러스터로 변환 사용할 수 있다.

- ALTER TABLE OLD_TABLE ENGINE=NDBCLUSTER;


Arbitrator란 ?

클러스터에서 한 개 혹은 그 이상의 노드가 실패할 경우, MGM 서버나 다른 노드가 그 노드의 역할을 대신하여 다른 노드들로 하여금 실패한 노드와 같은 노드로 인식하게 하는 기능을 한다. 이런한 역할을 하는 노드를 중재인이라고 한다.


클러스터 shut down시에 어떤 일이 일어나는가?

클러스터 데이터 노드의 메모리에 있던 데이터가 디스크에 쓰여지고, 그 다음에 클러스터가 시작될 때 다시 메모리에 로드된다.


클러스터에서 다른 매니저 노드를 구성하는 것은?

fail-safe에 있어서 도움이 된다. 단지 하나의 MGM 노드 만이 클러스터를 컨트롤 할 수 있지만 MGM 노드 하나를 primary로, 추가의 매니저 노드를 primary MGM 노드가 실패했을 때 인계받도록 하면 된다.


5. MySQL Cluster Glossary


Cluster

일반적으로 Cluster는 하나의 업무를 수행하기 위해 함께 동작하는 컴퓨터 세트이다. NDB Cluster는 자료저장, 복구, 컴퓨터 간의 분배 관리 등을 시행하기 위해 MySQL을 사용하는 Storge Engine 이다. MySQL Cluster는 in-memory storage를 사용한 shared-noting 아키텍쳐에서 분산된 MySQL DB를 지원하기 위해 NDB엔진을 사용하여 함께 돌아가는 컴퓨터 그룹이다.
Configuration Files

클러스터, 호스트, 노드에 관계된 직접적인 정보를 포함하는 파일이다. 클러스터 시작 시 Cluster의 MGM 노드가 읽어들인다.
Backup

디스크나 다른 Long-term Storage에 저장되는 모든 클러스터 데이타, 트랜젝션, 로그의 완전한 카피를 말한다.
Restore

백업에 저장되는 것과 같이 클러스터에 그 전 상태로 되돌리는 것을 말한다.
CheckPoint

일반적으로 데이타가 디스크에 저장될 때 체크포인트에 도달한다고 말한다. 클러스터에서는 Committed된 트랜잭션을 디스크에 저장하는 시간을 말한다. NDB Storage Engine에는 일관되게 클러스터의 데이타를 보존하기 위해 두 종류의 CheckPoint가 있다. LocalCheckPoint(LCP) : 싱글 노드의 체크포인트. 그러나 클러스터의 모든 노드에서 LCP를 사용한다. LCP는 디스크에 노드의 모든 데이타를 저장하도록 한다(보통 매 몇 분마다). 클러스터 Activity의 노드와 레벨, 다른 요인에 의해 저장되는 데이타의 양은 의존적이다. GlobalCheckPoint(GCP) : GCP는 모든 노드의 트랜잭션이 동기화되고, redo-log가 Disk에 저장될 때 몇 분마다 발생한다.
Cluster Host

MySQL Cluster의 구성 컴퓨터. 클러스터는 물리적 구조와 논리적 구조를 가진다. 물리적으로 클러스터는 Cluster Host라는 컴퓨터의 수로 구성된다.


Node

MySQL Cluster의 논리적, 기능적 요소를 말하며 Cluster Node라고도 한다. MySQL Cluster에서는 node란 용어를 Cluster의 물리적 Component인 Process를 지칭한다. MySQL Cluster가 동작하기 위해 3가지 타입의 노드가 있다.


MGM node - MySQL Cluster에서 다른 노드들의 설정 정보, 노드의 시작과 정지, 네트워크 파티셔닝, 백업과 저장 등을 포함하여 다른 노드들을 관리한다.


SQL node (MySQL Server) - 클러스터의 데이터 노드안에 저장된 데이터를 Serve 하는 MySQL Server 인스턴스. 데이타를 저장, 분배, 업데이트하는 클라이언트는 MySQL Server를 통해 접근 가능하다.


Data node - 이 노드는 실제 데이타를 저장한다. 현재 싱글 클러스터는 총 48개의 데이타 노드를 지원한다.

싱글 머신에 한 개 이상의 노드가 공존할 수도 있고, 한 머신에 완전한 클러스터를 구성하는 것도 가능하다. MySQL 클러스터에서 호스트는 클러스터의 물리적 컴퍼넌트이며, 노드는 논리적 혹은 기능적인 컴퍼넌트, 즉 프로세스라는 것을 잊지 말자.


Node group

데이터 노드의 집합. 노드 그룹 안의 모든 데이터 노드는 같은 데이터(fragment)를 포함한다. 그리고 싱글 그룹의 모든 노드는 다른 호스트에 존재해야 한다.


Node failure

MySQL 클러스터는 클러스터를 구성하는 어느 한 노드의 기능에만 의존적이지 않다. 클러스터는 하나 혹은 몇 개의 노드가 실패해도 계속될 수 있다.


Node restart

실패한 클러스터 노드의 리스타팅 과정.


Initial node restart

노드의 이전의 파일 시스템을 지우고 시작하는 클러스터 노드의 과정. 소프트웨어 향상과 그 밖의 특별한 상황 등에 사용된다.


System crash(or System fail)

클러스터의 상태가 확인되지 않는 등 많은 클러스터 노드가 실패했을 때 일어날 수 있다.


System restart

클러스터의 리스타팅과 디스크 로그 및 체크 포인트로부터 reinstall하는 프로세스를 말한다. 클러스터를 shutdown 한 이후에 일어나는 과정이다.


fragment

데이터베이스 테이블의 한 부분. NDB스토리지 엔진에서 테이블을 나누어 fragments의 수에 따라 저장한다. Fragment는 파티션이라 불리기도 한다. MySQL 클러스터에서 테이블은, 머신과 노드 간의 로드 밸런싱을 용이하게 할 수 있도록 fragment된다.


Replica

NBD 스토리지 엔진에서 각 테이블 프레그먼트는 여분을 포함하여 다른 데이터 노드에 저장된 많은 replica를 갖는다. 현재는 fragment 당 4개 이상의 replica가 가능하다.


Transpoter

노드들 간의 데이터 이동을 제공하는 프로토콜 TCP/IP(local), TCP/IP(remote), SCI, SHM(MySQL 4.1 버전에서 실험적임)


NDB(Network DataBase)

NDB는 MySQL클러스터에서 사용하는 스토리지 엔진을 말 함. NDB 스토리지 엔진은 모든 일반적인 MySQL 컬럼 타입과 SQL문을 지원하며, ACID(DB무결성 보장을 위한 트랜잭션)성질을 가진다.


Shared-nothing architecture

MySQL 클러스터의 이상적인 아키텍쳐. 진정한 Shared-nothing setup 에서 각 노드는 분리된 호스트에서 실행된다. 이러한 배열은 싱글 호스트나 싱글 노드가 아니면 SOF나 시스템 병목현상이 전체적으로 발생할 수 있다는 데 있다.


In-memory storage

각 데이터 노드에 저장된 모든 데이터는 그 노드의 호스트 컴퓨터의 메모리에 유지된다. 클러스터의 각 데이터 노드를 위해, (데이터 노드의 수로 나뉜 replica의 수 * 데이터베이스 사이즈)만큼의 가용 RAM의 양을 확보해 두어야 한다. 그러니까, 데이터베이스가 1기가의 메모리를 차지하고, 4개의 replica와 8개의 노드로 클러스터를 구성하고자 하면, 각 노드당 최소 500MB의 메모리가 필요하다. 그리고 OS와 다른 어플리케이션 프로그램이 쓰는 메모리가 추가로 필요하다.


Table

관계형 데이터베이스에서는 table은 일반적으로 동일하게 구조화된 레코드의 set을 가리킨다. MySQL 클러스터에서 데이터베이스 테이블은 fragment의 set으로써 데이터 노드에 저장되고, 각 fragment는 추가로 데이터 노드에 복제된다. 같은 fragment를 replicate한 데이터 노드의 set이나 fragment의 set을 노드 그룹이라 한다.


Cluster Programs : 명령어들

서버 데몬
  • ndbd : 데이터 노드 데몬
  • ndb_mgmd : MGM서버 데몬
클라이언트 프로그램
  • ndb_mgm : MGM 클라이언트
  • ndb_waiter : 클러스터의 모든 노드들의 상태를 확인할 때 사용
  • ndb_restore : 백업으로부터 클러스터의 데이터를 복구할 때 사용

이미지 #1

사용자 삽입 이미지

첫번째 이미지


이미지 #2
사용자 삽입 이미지

두번째이미지

'Computing > MySQL' 카테고리의 다른 글

mysql 복구  (0) 2011.11.04
[Mysql] 쿼리문 내에서 encoding 변경...  (0) 2010.11.17
[펌]MySql 복구 방법  (0) 2007.07.25
[펌]MySQL Replication 설치  (3) 2007.07.25
And
prev | 1 | ··· | 18 | 19 | 20 | 21 | 22 | 23 | next