2008.10.16 14:59

SSH 터널링을 활용한 MySQL Replication 구축

Mysql 서버의 데이터를 미러링 할 목적으로 replication 을 셋팅하던 도중에...
갑자기 생각이 나서 한번 해봤습니다.
딴거는 다 포트가 막혀있거나 또는 SSH 터널링을 이용하는데 replication 을 위해..
mysql 포트를 열어야 하는것과 mysql 권한에 원격 로그인을 허용한다는게 좀 맘에 안들어서... ^^

replication 을 구축하기 위해 최소 2개의 mysql 서버가 필요하겠죠.
master 서버 : insert, update, delete 등이 일어나는서버..
slave 서버 : select 를 주로 하는 서버...
우선 두 서버가 리눅스라는 가정하에 설명하겠습니다.
한쪽이 윈도우거나 두쪽다 윈도우인 경우는 별도의 툴들이 필요하니...
대체적으로 replication 을 사용하시는 분들은 둘다 리눅스를 많이 사용할듯 싶으니...

설치 환경
master : fedora4 mysql.4.1.16
slave : centos5 mysql.5.0.41

SSH 터널링
우선 ssh 터널링을 만들어야 합니다.
ssh 터널링은 slave 서버쪽에 셋팅합니다.

# ssh -CNf -L3307:127.0.0.1:3306 ssh계정@master서버IP
패스워드를 입력하자.
이제 slave 서버와 master 서버간에 터널링이 되었다.

# netstats -an | grep LISTEN
하면 3307 포트가 열려있는것을 확인할수 있다.

잠깐 ssh 터널링을 설명하자면 slave 서버에서 로컬(-L)의 3307번 포트로 접속하면 slave의 ssh를 통해..
master 의 ssh 에 접속하여 127.0.0.1의 3306번 포트로 접속한다는것이다.

주의 : 여기서 127.0.0.1 은 slave의 client ssh로 master 서버의 ssh 서버에 접속한 다음에 IP를
의미하는것이므로 127.0.0.1 은 master 서버 자신을 의미한다.
mysql 계정들의 host 권한을 모두 localhost 로 만들어둔 상태라..
127.0.0.1 이 아닌 master 서버의 도메인으로 셋팅한 경우에 접속이 되질 않았다.
이것때문에 삽질을 좀했다.

-f 는 백그라운드로 돌린다는 말이고..
-C는 압축한다는 의미이다.
-N 은 명령어 실해없이 시작한다는 ...

그럼.. 실제로 접속을 해보자.

/usr/local/mysql/bin/mysql -u root -p -P 3307 -h 127.0.0.1
db 리스트 및 내용을 확인해보면 master 로 접속된걸 확인할수 있을것이다.

Tip
위에서 언급한 ssh 터널링은 재부팅되면 초기화 되므로 재부팅시 자동으로활성화 되도록 만들어보자
/root/sshlogin 이란 화일을 만든다음
===========================================================================================
#!/usr/bin/expect
spawn bash -c "ssh -CNf -L3307:127.0.0.1:3306 ssh계정@master서버IP"
expect -re "Password:"
sleep 0.2
send "master서버의ssh계정패스워드\r"
interact
===========================================================================================
위와 같이 입력해준다.
만약 expect 가 없다면 expect 를 yum install expect 해서 설치하거나..
http://rpmseek.com 또는 http://rpmfind.net 에서 찾아서 설치하시길....

이제 해당화일에 chmod 700 권한을 주고... ==> chmod 700 /root/sshlogin
/etc/rc.local 에
/root/sshlogin <== 이부분을 추가..
그럼 리눅스 시스템이 부팅하면서 해당 화일을 실행하고 ssh 터널링이 열린다.

Replication
이제 replication 이 남았다.
일반적인 replication 과 설정이 다른것은 하나밖에 없을것이다.
Slave Server 에서...

Master Server
my.cnf
===========================================================================================
[mysqld]
log-bin = mysql-bin
server-id   = 1
binlog-do-db = db_name1
#binlog-do-db = db_name2
===========================================================================================

Slave Server
my.cnf
===========================================================================================
[mysqld]
server-id       = 2
master-host     = 127.0.0.1
master-user     = 리플리케이션아이디
master-password = 패스워드
master-port     = 3307
# DB 별
replicate-do-db = db_name1
#replicate-do-db = db_name2
# 테이블 별
# replicate-do-table=db_name.tbl_name
===========================================================================================
이제 mysql 서버를 각각 실행시키면 ssh 터널링을 이용해 replication 이 된다.
이문서는 mysql 설치 초기에 replication 환경을 만들기 위한것이다..
mysql 이 서비스 되는 상태에서 replication을 셋팅하는것은 인터넷에 자료가 많으니...

출처 => http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=55304

 

sftp를 배제한 ssh 터널링을 이용한 ftp 사용하기

FTP는 암호화되지 않은 형태로 인증과정과 파일이 전송이 이뤄진다.이는 전송되는 중간에
스니핑이 이뤄진다면 고스란히 해커(?)의 손에 ID/PW, 전송 파일이 유출될 수도 있음을 의
미한다. 이글에서는 보다 안전하게 ssh 터널링을 통한 FTP 전송과 vsftpd 설정에 대해 소개
한다.

ssh 터널링 만들기

- FTP 서버에서는 ssh 서버가 동작중이어야 한다. (서버명을 free, ID는 truefeel 이라고 가정)
- client에서는 ssh 클라이언트가 있어야 한다.

연결과정을 그러보면.
로컬의 FTP클라언트 -> ssh 클라이언트 -> 네트워크(암호화 전송) -> ssh 서버 -> FTP 서버

터널링을 만들어보자!

# ssh -P10000 -CNf -L10021:free:21 truefeel@free
-C : 압축해서 전송한다.
-N : 명령어 실행없이 시작한다.
-f : 백그라운드로 실행한다.
-L : 원격서버의 포트를 로컬로 포워딩한다. (즉, 터널링을 만들어줌)
     free서버의 FTP(21번 포트)를 로컬의 10021번 포트로 포워딩한다.
     즉 로컬의 10021번 포트를 통해 free의 FTP서버에 접속할 수 있다. 이 때 원격끼리는 암호화되어 전송된다.
    
만약 원격의 ssh서버가 다른 포트를 사용한다면 -p [포트] 옵셥까지 뒤에 붙여주면 된다.
ps aux 하면 ssh가 백그라운드로 떠있는 것을 확인할 수 있다.

ftp명령으로 로컬의 10021번으로 접속을 하면 원격의 free FTP서버로 접속하게 된다.

$ ftp -p localhost 10021
Connected to localhost (127.0.0.1)
220 Secure FTP 서버
Name (localhost:truefeel): truefeel
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (xxx,xxx,xxx,xxx,80,250)
Security: Bad IP connecting.
ftp>

접속은 정상적으로 이뤄졌는데, 명령어를 입력했더니 'Security: Bad IP connecting.'에러가
발생을 했다. /etc/vsftpd.conf에 다음 한 줄을 추가하면 쉽게 해결할 수 있다.

pasv_promiscuous=YES


Trackback 0 Comment 0