반응형
 

OpenVPN을 이용한 VPN 환경 구축
OpenVPN은 오픈 소스 프로그램으로 가상 사설망을 구축할 수 있는 소프트웨어다. 이와 비슷한 프로토콜로 PPTP와 L2TP/IPsec이 있다. 최근의 추세는 IPsec 혹은 OpenVPN 중 하나로 구축하는 것 같다. IPSec은 하드웨어 장비를 통해서 구현하는 경우가 많은데, 음.. 글쎄 돈이 남아돌지 않는다면 굳이 IPSec 기반으로 구현할 필요가 있을까 라는 생각을 해본다. 각 프로토콜에 대해서 궁금한 점은 vpn 프로토콜 비교문서를 참고하자. 
OpenVPN은 SSL기반의 VPN으로 openssl라이브러리를 사용한다. 
 


위의 그림은 OpenVPN 서버와 클라이언트에 tun 디바이스가 만들어지고, 이 디바이스를 이용해서 10.8.0.0 주소영역을 가지는 사설망이 만들어 진것을 보여준다. 
TUN방식은 다음과 같은 장점을 가진다. 
• 네트워크 디바이스를 생성함으로써, 네트워크 구조가 명확하고 비교적 안정적으로 작동한다는 장점을 가진다. 
• 고정 IP를 할당할 수 있어서 위치에 관계 없이 안정적으로 사설망을 유지할 수 있도록 한다. 
• 사설망을 위한 DHCP, 네임서버를 구축할 수 있다. 
 
1.1 기본 원리
VPN은 물리적으로 떨어져 있는 두개의 네트워크를 가상의 네트워크로 묶는 개념이다. 두개 이상의 네트워크를 하나의 네트워크처럼 보이게 하려면 어떻게 해야 할까 ? Tunnel(터널)을 뚫으면 된다. 
아래와 같이 간단하게 설명할 수 있다. 


 
• 10.10.0.0/16 네트워크와 10.50.0.0/16 네트워크가 internet(public network)를 사이에 두고 서로 떨어져 있다. 이들 네트워크는 사설 네트워크이기 때문에 트래픽을 전달할 수 없다. 
• 하지만 사설 네트워크에는 internet으로 트래픽을 보내기 위한 gateway가 있을 것이고, 이들은 public ip를 가지고 있을 것이다. 
 
두 개의 사설 네트워크가 gateway를 통해서 연결이 되므로, 원칙적으로 사설 네트워크 끼리 통신이 가능하다.. 편지를 보내는 것처럼, 패킷을 한번 더 싸서 보내면 된다. 


 
• 10.10.5.7 호스트가 10.50.50.2 호스트로 데이터를 보내려고 한다. 
• 이 패킷의 src ip는 10.10.57.7 dst ip는 10.50.50.2 다. 
• 패킷이 vpn 서버로 전달되면, vpn 서버는 public ip로 패킷을 둘러싼다. VPN 서버는 호스트가 보낸 패킷을 데이터로 하는 TCP/IP 패킷을 만든다. 
• 이 패킷은 인터넷을 가로질러서 목적지까지 도착한다. 
• 목적지의 vpn 서버는 패킷을 깐다. 
• 패킷을 까면 원래 보내고자 하는 패킷이 나오고, 목적지 호스트로 전달할 수 있다. 
• 응답 패킷은 정확히 반대의 과정을 거친다. 
실제로는 더 복잡한 과정을 거치지만 이 정도면 알고 있으면, 쉽게 응용할 수 있다. 
1.2 테스트 환경
VPN를 제대로 테스트 하려면 최대한 3대의 컴퓨터가 필요할 것이다. 그러나 굳이 그럴 필요가 없다. PC 가상화 솔류션이 있기 때문이다. 나는 PC 가상화 솔류션 중 하나인 VirtualBox를 이용 해서 VPN 테스트 환경을 만들었다. 
호스트 운영체제는 우분투 리눅스 10.04 이며, 게스트 운영체제로는 Windows XP와 우분투 리눅스를 설치했다. 이 환경에서 VPN 테스트를 할 것이다. 


... 
1.3 OpenVPN 서버 설치
1.3.1 Ubuntu
VPN GW에 해당 하는 OpenVPN 서버를 설치하고 설정하는 과정을 정리한다. 우분투 리눅스 10.0.4를 기준으로 한다. 
• openvpn 패키지를 설치한다. 
# sudo apt-get install openvpn
• openvpn의 설정파일의 위치를 지정한다. /etc/openvpn으로 했다. 
# echo "AUTOSTART=\"openvpn\"" >> /etc/default/openvpn
• ras 설정을 해야 한다. 상당히 복잡한 과정이지만, openvpn설치시 제공되는 예제 파일을 이용해서 비교적 간단히 설치할 수 있다. 
# cp -r /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn 
• var 파일은 ras 설정을 위한 환경 변수를 담고 있다. source명령을 이용해서 환경을 설정한다. 
# source /etc/openvpn/easy-rsa/2.0/vars
• private key를 만든다. 이제 부터 작업 디렉토리는 /etc/openvpn/easy-rsa/2.0이다. Sign the certificate와 1 out of 1 certificate ...는 모두 y를 선택한다. 
root:/etc/openvpn/easy-rsa/2.0# ./build-ca 
Generating a 1024 bit RSA private key
....++++++
...............................++++++
writing new private key to 'ca.key'
-----
....
....

Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
• 서버 key를 만든다. 역시 Sign the...와 1 out of 1 certi...를 y로 한다. 
# root:/etc/openvpn/easy-rsa/2.0# ./build-key-server server
Generating a 1024 bit RSA private key                                                           
................++++++
......................++++++                                                                    
writing new private key to 'server.key'
-----                                                                                           
....
....
....
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
• client key를 만든다. 계정/암호 인증방식이 아닌 key를 이용한 인증방식시 사용한다. 이 키를 클라이언트에 배포하면, 클라이언트는 계정/암호 없이 서버에 연결할 수 있다. 키는 말그대로 서버에 드나들기 위한 열쇠이므로 배포시 보안에 주의해야 한다. 메일이나 ftp등으로 배포하는 일이 없도록 한다. client key는 클라이언트마다 필요하다. 그러므로 만약 100명의 클라이언트를 관리해야 한다면, 100개의 client key를 만들어야 한다. yundream이라는 이름의 client key를 만들기로 했다. 위의 키 생성과정과 동일하다. 
#root:/etc/openvpn/easy-rsa/2.0# ./build-key yundream 
• Diffie Hellman 파라메터를 생성한다. 
root@yundream-laptop:/etc/openvpn/easy-rsa/2.0# ./build-dh 
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.......................................
이로서 서버측 설정을 마치고, yundream사용자를 위한 key도 만들었다. yundream 사용자에게 아래의 key를 배포하면 됩니다. 
ca.crt
yundream.crt
yundream.key
1.3.2 CentOS
CentOS 6.3을 기준으로 한다. 우분투리눅스는 기본 레포지토리에서 openvpn을 제공하지만, centos는 EPEL레포지토리를 등록해야 한다. 
# wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# rpm -Uvh epel-release-6-8.noarch.rpm
# yum install openvpn -y 
키 관리를 도와주는 easy-rsa를 따로 설치해야 한다. (귀찮다) 
# yum install easy-rsa
easy-rsa 파일들을 /etc 밑에 복사한다. 
# cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa
OpenVPN은 OpenSSL› 라이브러리를 사용한다. 이를 위해서 openssl 설정파일을 만들어야 하는데, 미리 만들어져 있는 예제 설정파일을 복사해서 사용하면 된다. openssl 버전에 맞는 파일을 사용하자. "최대한 편하고 쉽게!!!" easy-rsa를 설치한 이유다. 
cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
easy-rsa 디렉토리 밑에 있는 vars 파일을 편집한다. 다른 건 수정할 필요 없다. "KEY_"로 시작하는 변수들만 수정하자. 
# vi /etc/openvpn/easy-rsa/vars
대략 아래와 같은 환경변수들을 수정하면 된다. 
export KEY_COUNTRY="US"
export KEY_PROVINCE="NY"
export KEY_CITY="New York"
export KEY_ORG="Organization Name"
export KEY_EMAIL="administrator@example.com"
export KEY_CN=droplet.example.com
export KEY_NAME=server
export KEY_OU=server
var를 적용하고, key를 빌드하기 시작한다. 
# cd /etc/openvpn/easy-rsa
# source ./vars
# ./clean-all
# ./build-ca
OpenVPN 서버를 위한 CA를 만든다. 
# ./buid-key-server server
Diffie Hellman key를 만든다. dh 키와 함께 build-key-server로 만든 키 파일들을 openvpn 디레고리로 복사한다. 
# ./build-dh
# cd keys
# cp dh1024.pem ca.crt server.crt server.key /etc/openvpn 
서버를 시작하면 끝. 클라이언트 키를 만들고 유지하는 것은 우분투리눅스의 openvpn과 동일하므로 생략한다. 
1.4 OpenVPN 서버 설정
이제 남은 건 설정파일이다. OpenVPN을 소개하는 책이 따로 출판되었을 정도로 OpenVPN은 많은 기능을 제공한다. 여기에서는 TUN 디바이스를 이용해서 step 3 VPN 환경 구축을 할 것이다. 
• 설정파일 복사 
예제 설정파일인 /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz을 /etc/openvpn/openvpn.conf로 복사해서 사용하기로 했다. 
• key 위치 지정. 다음의 key 파일의 위치만 조절해 주면 된다. 현재 우리가 만든 키는 /etc/openvpn/easy-rsa/2.0/keys 디렉토리 밑에 있다. 
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key  # This file should be kept secret
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
• 기타 주요 설정. 주석으로 설명을 대신한다. 
# udp 1194를 사용한다.
proto udp

# tun 디바이스를 사용한다.
dev tun

# 서버 key 값 설정
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key  # This file should be kept secret
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem

# VPN 네트워크 영역을 지정한다. 기본으로 10.8.0.0을 사용한다.
server 10.8.0.0  255.255.255.0

# subnet에 접근하는 것을 허락한다.
push "route 10.8.0.0  255.255.255.0"

client-to-client
• 테스트. /etc/init.d/openvpn 스크립트를 이용해도 되지만, 에러 메시지 확인을 위해서 쉘에서 직접 실행했다. 
# openvpn --config /etc/openvpn/openvpn.conf
• 성공적으로 실행했다면, tun 디바이스를 확인할 수 있을 것이다. 
# ifconfig
......
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
......
 
1.5 다른 인증
openvpn은 key 인증외에 PAM 모듈 인증을 허용한다. 그 중 유닉스의 '''ID제공 한다. 이 모듈을 이용하면, 아이디/패스워드 인증까지 함께 사용할 수 있다. 
서버측 설정파일에 아래 내용을 추가한다. 
# so 파일의 경로는 배포판에 따라서 약간식 다를 수 있다.
plugin /usr/lib/openvpn/openvpn-pam-auth.so login
클라이언트 설정파일에 다음의 내용을 추가한다. 
auth-user-pass
이제 vpn 클라이언트를 실행하면, 아이디 패스워드를 묻는 걸 확인할 수 있을 것이다. 
1.6 Host to Site VPN
VPN server를 gateway로 해서 Gateway가 관리하는 subnet에 접근을 원할 때가 있다. 그림과 같은 경우다. 

 
• VPN GW의 가상 인터페이스 주소 : 192.168.100.1 
• VPN에서 관리하는 가상 네트워크 주소 : 192.168.100.0 
• VPN GW에서 관리하는 subnet 주소 : 192.168.56.0 
원하는 것은 VPN Client가 192.168.56.0의 주소를 가지는 컴퓨터에 접근하도록 하는 것이다. VPN 서버의 설정파일에 아래의 부분을 추가한다. 
push "route 192.168.56.0 255.255.255.0 192.168.100.1"
push는 클라이언트에 설정값을 밀어 넣기 위해서 사용한다. 아래의 명령은 클라이언트로 하여금 다음과 같이 라우팅 테이블을 설정하도록 할 것이다. 
yundream@yundream-desktop:~$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.100.0   192.168.100.1   255.255.255.0   UG    0      0        0 tun0
192.168.100.0   *               255.255.255.0   U     0      0        0 tun0
192.168.1.0     *               255.255.255.0   U     2      0        0 wlan0
192.168.56.0    192.168.100.1   255.255.255.0   UG    0      0        0 tun0
...
이제 VPN 서버에서 IP forwarding이 가능하도록 설정한다. 
• ip forwad가 가능하도록 한다. 
# echo 1 > /proc/sys/net/ipv4/ip_forward
• ip_forward 값은 리부팅 때마다 기본값인 0으로 재 설정된다. 기본 값을 1로 하고 싶다면, /etc/sysctl.conf에 아래와 같이 설정하면 된다. 
net.ipv4.ip-forward = 1
• tun 디바이스를 ip forwarding 가능하도록 한다. 
# iptables -A INPUT -i tun+ -j ACCEPT
# iptables -A FORWARD -i tun+ -j ACCEPT
 
1.7 OpenVPN 클라이언트 설치
OpenVPN은 클라이언트와 서버 구분이 없이 하나의 프로그램으로 배포된다. 설정파일로 서버로 실행될지 클라이언트로 실행될지가 결정된다. 
1.8 OpenVPN 클라이언트 설정
설정은 리눅스와 윈도우 모두 동일하다. 다만 경로 설정 방식에 있어서 차이가 있을 뿐이다. 리눅스 클라이언트 설정파일을 수정해서 쓰면 된다. 유저 이름은 winvpn으로 Openvpn 서버에서 생성한 키 파일이다. 
• openvpn 환경 설정을 위한 디렉토리를 만든다. 나는 /home/yundream/openvpn 디렉토리를 만들었다. 
• key를 보관하기 위한 디렉토리를 만들었다. mkdir /home/yundream/openvpn/keys 
• 클라이언트 키 파일을 복사해와서 위에서 만든 key 디렉토리에 위치한다. 키 인증 방식이 아닌 ID/PW 인증 방식을 사용할 수도 있는데, 이는 나중에 다뤄볼 생각이다. 
• openvpn 설정 파일을 만들어야 하는데, 서버 설정파일과 마찬가지로 미리 만들어져 있는 셈플 설정파일을 약간 수정해서 사용하면 된다. /usr/share/doc/openvpn/examples/sample-config-files/client.conf파일을 /home/yundream/openvpn 디렉토리로 복사한다음 아래와 같이 수정했다. 
dev tun
proto udp
...
# openvpn 서버의 주소 정보
remote 192.168.55.1 1194

# 사용할 ip 대역
ifconfig 10.8.0.2 10.8.0.1

# key 위치
ca /home/yundream/openvpn/keys/ca.crt
cert /home/yundream/openvpn/keys/localvpn1.crt
key /home/yundream/openvpn/keys/localvpn1.key
 
이제 OpenVPN 클라이언트를 실행하면 된다. 
# sudo openvpn --config client.conf
ifconfig로 tun 드라이버를 확인해보자. 
# ifconfig
...
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.6  P-t-P:10.8.0.5  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
윈도우도 리눅스와 동일하다. 설정파일에서 ca 파일의 경로만 다르게 하면 된다. openvpn을 실행하면 tray에 아이콘이 생기는걸 확인할 수 있다. connect를 클릭하면 연결이 진행된다. 성공적으로 실행된 다음에 ipconfig로 확인해 보면 TUN 드라이버가 생긴걸 확인할 수 있을 것이다. 
Ethernet adapter 로컬 영역 연결 3:
Connection-specific DNS Suffix  . :
        Description . . . . . . . . . . . : TAP-Win32 Adapter V9
        Physical Address. . . . . . . . . : 00-FF-60-C7-BD-75
        Dhcp Enabled. . . . . . . . . . . : Yes
        Autoconfiguration Enabled . . . . : Yes
        IP Address. . . . . . . . . . . . : 10.8.0.14
        Subnet Mask . . . . . . . . . . . : 255.255.255.252
        IP Address. . . . . . . . . . . . : fe80::2ff:60ff:fec7:bd75%4
        Default Gateway . . . . . . . . . :
        DHCP Server . . . . . . . . . . . : 10.8.0.13
        DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1
                                            fec0:0:0:ffff::2%1
                                            fec0:0:0:ffff::3%1
        Lease Obtained. . . . . . . . . . : 2010년 9월 20일 월요일 오후 5:24:35
        Lease Expires . . . . . . . . . . : 2011년 9월 20일 화요일 오후 5:24:35
서로 연결이 되는지 ping을 이용해서 테스트해 보고, 문제가 없다면 ssh 연결등도 테스트 해보자. 
 
원본 위치 <http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/System_management/VPN/OpenVPN
 

반응형
반응형

[root@smtp bin]# telnet 0 25

Trying 0.0.0.0...

Connected to 0 (0.0.0.0).

Escape character is '^]'.

220 KDDI Qamil Srv. ESMTP

ehlo

250-KDDI Qamil Srv.

250-PIPELINING

250-8BITMIME

250-SIZE 0

250 AUTH LOGIN PLAIN CRAM-MD5

mail from: webmaster@telehouse-seoul.com

250 ok

rcpt to: webmaster@lina.co.kr

250 ok

data

354 go ahead

Sb

Subject: Subject test

d

d

d

d

d

dd

ddddd

 

 

.

250 ok 1288247466 qp 5489

quit

221 KDDI Qamil Srv.

 

[root@smtp bin]# telnet 0 110

Trying 0.0.0.0...

Connected to 0 (0.0.0.0).

Escape character is '^]'.

+OK <5504.1288247655@smtp.lina.co.kr>

user webmaster@lina.co.kr

+OK

pass webmasterwebmaster

+OK

list

+OK

1 302

.

retr 1

+OK

Return-Path: <webmaster@telehouse-seoul.com>

Delivered-To: webmaster@lina.co.kr

Received: (qmail 5489 invoked by uid 108); 28 Oct 2010 15:30:47 +0900

Received: from unknown (HELO ) (127.0.0.1)

        by 0 (knetqmail v1.06) with SMTP;

        28 Oct 2010 15:30:47 +0900

Sb

Subject: Subject test

d

d

d

d

d

dd

ddddd

 

 

 

.

quit

+OK

Connection closed by foreign host.

반응형
반응형

대표적인 개인 서버 전용 웹 스토리지 비교

 

 

 

 

 

 

지난 시간에는 각종 포털들에서 제공하는 개인 스토리지 서비스에 대해서 글을 써보았습니다.

 

2014/07/08 - [웹서버 구축하기/웹 스토리지(클라우드)] - 클라우드 서비스 비교

 

이번 시간에는 제가 사용해본 몇몇가지 PHP 기반 웹 스토리지 프로그램을 소개하고 비교하는 시간을 가져보도록 하겠습니다.

이미 블로그 초반에 개인서버를 구축하는데 있어 목표중에 하나인 개인 스토리지 입니다. 그리고 가족이나 지인들에게 일정 공간을 제공하기 위해 아이디가 발급 가능하도록 하는 것을 위주로 비교하였습니다.

 

제가 비교 사용할 후기는 네 가지 입니다.

 

 

 

 

 

 

1. Own Cloud

 

 

 

2. Pydio (구 AjaXplorer)

 

 

 

3. h5ai

 

 

 

4. elfinder

 

각각의 장점과 단점에 대해서 적어보도록 하겠습니다. 위의 네가지 모두 사용을 해봤으며, 아직도 사용을 하고 있습니다. 모두 소개를 하지만 실제로 사용하실 때, 이중에 하나만 사용하는 것을 추천합니다. 먼저 모두 설치후 비교사용하는 것도 괜찮겠네요.

 

먼저, OwnCloud 입니다.

<실사용 화면>

 

 

로그인 화면

 

 

개인 계정 접속후 관리 화면

 

#장점

1. 개인 서버에서 구축한 웹하드로 보기에는 속도가 빠른 편입니다. 

2. 다양한 어플들을 지원해서 잘 구성하면 대형 포털과 맘먹는 편의를 구성 할 수 있습니다.

3. 인터페이스가 아주 깔끔합니다. (제가 이런 스타일 좋아합니다.)

4. 모바일 기기 전용 앱을 지원합니다. (아이폰, 안드로이드, 태블릿 등등)

5. 드래그 앤 드롭 인터페이스를 지원합니다. 

 

#단점

1. 한글 파일이 지원이 되지 않습니다. 

2. 모바일 기기 전용 앱이 유료(!) 입니다.

3. 관리자 계정으로 설정하는 부분이 자세하지는 않습니다. (좀 더 상세한 설정을 하려면 config 파일을 수정해야 합니다.)

 

개인적으로는 뭔가 고급스러워 보이는 것 같아보입니다. 개인이 구축한 웹하드이지만 뭔가 전문적인것 같고, 전체적인 분위기가 무료 같아보이지 않아 좋아합니다만, 한글파일 및 폴더 생성시 생성안되는 문제는 아직 해결중에 있습니다. UTF-8로 변환하면 될 듯한데, 아직 관련된 부분을 못 찾겠네요.

 

데모 사이트 - http://owncloud.org/

 

 

 

두번째로 pydio 입니다. 이전에 AjaXplorer 의 후속 버전인데, 이전부터 유명했던 웹하드 소스 프로그램을 업그레이드 한것이라서 꽤나 쓸만합니다.

 

<실사용 화면>

 

 

로그인 페이지

 

 

로그인 후 화면 3분활 화면으로 진행됩니다.

#장점

1. 한글 파일 및 한글 폴더를 잘 지원합니다.

2. 드래그 앤 드롭 인터페이스를 지원합니다.

3. 3분할로 미리보기 및 브라우징에 용이 합니다.

4. 모바일 앱을 지원합니다. (게다가 무료입니다.)

5. 기본에 충실합니다. (파일을 잘 업로드하고 잘 다운로드하고, 잘 보여줍니다.)

 

#단점

1. 페이징 속도가 느린편입니다. 파일 폴더별로 확인할 때는 괜찮지만, 계정내 설정이나 Work Space내 폴더 전환시 조금 시간이 걸립니다.

2. 설치 과정이 조금 복잡합니다. (예전에 설치해서 가물가물 하기는 한데 처음 설치시 꽤 고생한 적이 있습니다.)

3. 초기 로딩이 조금 오래 걸립니다.

 

쓰다보니 느린 것 빼고는 단점이 없네요. 대신 느린 것이 조금 치명적입니다. 광랜으로 바꾸고 싶어져요.

 

데모사이트 ( ID : demo / PW : demo) - https://demo.pyd.io/

 

 

다음은 요즘에 굉장히 가벼워서 사용자가 급속히 늘어나고 있는 h5ai 입니다.

 

<실사용 화면>

 

 

새 버전부터 사용하능한 비빌번호 로그인 입니다.

 

치명적이기는 한테, IIS를 지원안합니다....

 

 

억지로 구동시켜 본 모습입니다. 정상작동은 되지 않습니다.

#장점

1. 깔끔합니다. 모노톤을 사용해서 난잡해 보이지 않고 정말 기본에 충실합니다. (데모사이트 확인하세요.)

2. 속도가 빠릅니다. 가벼운 만큼 브라우징에서 엄청난 강점을 보입니다. 

3. 각각의 파일마다 QR 코드를 지원하여 외부 링크를 쉽게 만들 수 있습니다.

4. 아이콘 크기도 부드럽게 변경하능 합니다. 

 

#단점

1. IIS를 지원하지 않아요. 차후를 기대 해보든가, 아님 다른 서버로 실행하던가 해야 합니다.

2. 초반에 설치 후 실제로 접속 가능한 경로는 처음 설치 경로와 달라서 접속주소가 다릅니다. (실사용 확인)

예) 

원래 설치 도메인 http://pydio.domain.com

실제로 접속해야 하는 도메인 http://pydio.domain.com/server/php/index.php

3. 갖가지 기능들을 모두 사용하기 위해서는 PHP Extension을 추가로 활용해야 합니다.

4. 보안이 아주 꽝입니다. 설정을 제대로 하지 않고 일반적인 설정만 진행하면 서버의 루트까지도 진입할 수 있습니다. (안그래도 이전버전은 암호없이 접속을 하였는데!) 

 

전체적으로 엄청 깔끔하고 가벼워서 속도가 빠른, 속도가 가장 큰 장점인 이 h5ai 는 MIT에서 만들어졌습니다. 머리좋은 양반들이 편의성을 위해 만든것 같은데, 아직도 문제가 되는 부분이 있습니다.  인줄 알았는데 MIT 라이센스를 따라가고 있는 거군요. MIT만 보고 착각했습니다. 버전을 보아하면 아직도 0. 대이기 때문에 정식 버전은 아직 멀어보입니다.

 

데모사이트 : http://larsjung.de/h5ai/sample

 

 

마지막으로 Elfinder입니다. 

 

 

제로보드 XE를 통해 접속한 화면입니다.

#장점

1. XE와 연동가능합니다. (메인 사이트와 웹 페이지 상에서 연결 가능합니다.)

2. 속도가 괜찮은 편이고, 깔끔한 디자인입니다.

3. 자체적인 인터페이스를 내장하고 있어서 마우스 우클릭시 브라우저 메뉴가 아닌 전용메뉴를 확인 할 수 있습니다.

 

#단점

1. 회원별로 폴더를 부여하고 접속 설정을 하려면 추가적인 파일 변경이 필요합니다. (나중에 관련 정보를 제공할게요.)

2. 차짓 잘못하면 XE 메인까지 FTP처럼 접속하여, 보안상 문제가 될 수 있다. (추가로 해결가능)

3. XE와 연동을 해야하며, 쉬운설치를 지원하지 않는다.

4. 대표 사이트의 도메인이 만료되어 사이트에 접속을 할 수 없다. (소스 다운로드 불가능..)

 

잘만 만들어 나가면 정말 괜찮을 것 같은 Elfinder입니다. 충격적이게도 원작자의 웹사이트는 도메인 기간이 만료되어 더이상 접근이 불가능 합니다. (앞으로 유저들이 만들어 나가야 할 듯)

 

데모사이트는 도메인이 사라짐으로 관련 페이지는 없습니다. 대신 XE 전용 모듈을 다음번 포스팅에 올리도록 하겠습니다. 그리고, 서버구축용 전용 파일은 나중에 포스팅을 통해서 제공하도록 하겠습니다.

 

이번 시간에는 제가 사용해본 오픈 소스 4종에 대해서 이야기 하였습니다. 다음 번 시간부터 h5ai를 제외한 나머지들의 설치 과정과 설치법에 대해서 포스팅 하도록 하겠습니다.

 

출처: https://studyforus.tistory.com/43 [Study For Us]

 

출처: <https://studyforus.tistory.com/43>

반응형

'오픈소스 활용하기' 카테고리의 다른 글

VirtualBox - NAT 및 Bridge Adapter 개념 및 설정  (0) 2023.11.13
KVM 설치 가이드  (1) 2023.11.13
가상 머신과 Docker  (2) 2023.11.13
Docker란 무엇인가?  (1) 2023.11.13
Zabbix server config 파라메터  (1) 2023.11.09
반응형

Kw = 100 KVA*역율 = 100 KVA*코사인세타.

**역율은 부하의 구성마다 다름니다. 일반모터의 경우는 0.65~0.85정도 입니다.

 

유효전력(KW), 무효전력(KVAR), 피상전력 (KVA)

 

유효전력 : 전원에서 부하로 실제 소비되는 전력

무효전력 : 실제로는 아무런 일을 하지 않아 부하에서는 전력으로 이용할 수 없는 전력

피상전력 : 교류의 부하 또는 전원의 용량을 표시하는 전력

 

<http://kin.naver.com/qna/detail.nhn?d1id=11&dirId=1118&docId=58517446&qb=S1ZBIEtX&enc=utf8§ion=kin&rank=2&sort=0&spq=0&pid=fJDNyg331xCsstHZbVCssv--071541&sid=S7lcyQhUuUsAAB5EDsk>에서 삽입

반응형

'데이터센터' 카테고리의 다른 글

KVA <=> KW 변환식  (0) 2023.11.27
전기량 계산(KW/KWH)  (0) 2019.05.03
반응형

제목과 같이 kva는 피상전력 단위이며, kw는 유효전력 단위입니다.

즉, kva(피상전력)은 kw(유효전력)과 kvar(무효전력)의 Vector합으로 이루어져 있습니다.

유효전력과 무효전력의 위상차는 90도이며, 따라서 피상전력의 값은 (유효전력의 제곱+무효전력의 제곱)의 제곱근입니다.

그리고 피상전력에 대한 유효전력의 비율을 "역률"이라 하며, 유효전력=피상전력x역률입니다.

이 역률은 각각의 부하 특성에 따라 모두 다르며, 결론적으로 kva를 kw로 획일적으로 환산할 수는 없습니다.

참고로, 한전에서는 수용가의 역률을 0.9 이상으로 유지토록 규정하고 있으며, 만일 11kva 부하의 실제 역률이 0.9라면 유효전력은 11x0.9=9.9kw가 되겠죠.

반응형

'데이터센터' 카테고리의 다른 글

전력 역율 계산  (0) 2023.11.27
전기량 계산(KW/KWH)  (0) 2019.05.03
반응형

 

MySQL Replication을 이용하여 DBMS 단방향 이중화하기

 

 

웹서버 부하로 인해 L4를 이용하여 로드밸런싱으로 웹서버의 부하를 해결하였지만, DB 서버의 부하로 인하여 사이트가 느리게 열리는 현상이 발생하게 되었습니다

 

DB 서버를 이중화하는 방법은 없을까 하여 찾아보니 MySQL의 리플리케이션이라는 기능이 있더군요 이 기능을 이용하면 DB를 이중화 할 수 있는다는 것을 알게 되었습니다

 

이번 포스팅에서는 MySQL의 리플리케이션은 무엇이고, 리플리케이션을 이용한 DB를 이중화하는 방법을 알아보도록 하겠습니다.

 

 

 

 

 MySQL Replication(복제)란?

 

 

리플리케이션(Replication)은 복제를 뜻하며 2대 이상의 DBMS를 나눠서 데이터를 저장하는 방식이며, 사용하기 위한 최소 구성은 Master / Slave 구성을 하여야 됩니다.

 

 

 

Master DBMS 역할 : 

웹서버로 부터 데이터 등록/수정/삭제 요청시 바이너리로그(Binarylog)를 생성하여 Slave 서버로 전달하게 됩니다

(웹서버로 부터 요청한 데이터 등록/수정/삭제 기능을 하는 DBMS로 많이 사용됩니다)

 

Slave DBMS 역할 : 

Master DBMS로 부터 전달받은 바이너리로그(Binarylog)를 데이터로 반영하게 됩니다

(웹서버로 부터 요청을 통해 데이터를 불러오는 DBMS로 많이 사용됩니다)

 

 

 

 

 MySQL Replication(복제) 사용목적

 

 

MySQL 리플리케션(Replication)은 사용목적은 크게 실시간 Data 백업과 여러대의 DB서버의 부하를 분산 시킬수 있습니다

 

1, 데이터의 백업

 

예로 Master 서버를 데이터의 원본서버, Slave서버를 백업서버로 지칭하겠습니다

먼저 Master 서버에 DBMS의 등록/수정/업데이터가 생기는 즉시 Slave 서버의 변경된 데이터를 전달하게 됩니다 이러한 과정으로 데이터의 백업을 할수 있으며, 또한 Master 서버의 장애가 생겼을 경우 Slave 서버로 변경하여 사용할수 있습니다.

 

 

그림으로 표현한다면 먼저 사용자가 사용하는데 발생하는 쿼리를 Master 서버에 요청하며, Master 서버의 발생된 쿼리를 Slave 서버로 전달하게되어 백업의 용도로 사용할수 있습니다

 

 

 

 

2. DBMS의 부화분산

사용자의 폭주로 인해 1대의 DB서버로 감당할수 없을때, MySQL 리플리케이션(Replication)을 이용하여 같은 DB 데이터를 여러대를 만들수 있기에 부하를 분산하수 있습니다

 

 

그림으로 표현한다면 Master 서버를 등록/수정/삭제를 사용하는 서버로 사용하고, Slave 서버를 데이터를 읽는용도로 사용하게 되면 DBMS의 부하를 분산하는 용도로 사용할 수 있게 됩니다

 

 

 

 

 

 MySQL Replication 주의사항

 

MySQL Replication을 사용시 다음과 같은 주의하여야 될 사항들이 있습니다 반드시 필독 후 하시고 진행하시기 바랍니다.

 

 

1. 호환성을 위해 Replication을 사용하는 MySQL의 동일하게 맞추는것이 좋습니다

 

2. Replication을 사용하기에 MySQL 버전이 다른 경우 Slave 서버가 상위 버전 이여야 합니다

 

3. Replication을 가동시에 Master 서버, Slave 순으로 가동시켜야 합니다

 

 

 

 MySQL Replication 구성하기

 

 

이번 리플리케이션 포스팅에서는 2대의 DBMS를 이용하여 등록/수정/삭제를 하는 Master 서버와 Select 를 사용하는 Slave 서버로 하겠으며, 구성은 다음과 같습니다

 

 

위 그림과 같이 웹서버에서 데이터 등록/수정/삭제는 Master 서버로 구성하고, 데이터를 읽을경우 Slave 서버로 구성하여 MySQL DBMS 이중화 하도록 하겠습니다.

 

 

 

 

 

 

 

 MySQL Replication 설정하기 - (Master 서버)

 

 

이제 MySQL Replication을 설정 해보도록 하겠으며, 먼저 Master 서버의 설정부터 하겠습니다

 

MySQL 리플리케이션을 사용하기 위해선 먼저 DB, 계정, 리플리케이션 계정을 생성하여 됩니다

구성정보는 아래와 같이 하겠습니다.

 

 

[Master 서버 DB, 계정정보]

 

IP : 192.168.65.148(Master), 192.168.65.149(Slave)

 

DadaBases : repl_db

 

ID : user1

 

PW : test123

 

 

 

 

 

 

 

[Replication 계정 정보]

 

IP : 192.168.65.148 - (Master)

 

ID : repl_user

 

PW : test456

 

- Master 서버에 데이터를 Slave 서버로 복제하기 위해선 MySQL 계정이 필요합니다

- MySQL root 계정으로 사용하는것은 보안상 좋지 않기 때문에 복제계정을 생성하는것이 좋습니다

 

 

 

1. MySQL DB, 계정생성 및 권한설정

 

1) DB 생성

1 mysql> create database repl_db default character set utf8;

 

2) 계정생성

1 mysql> create user user1@'%' identified by 'test123';

 

3) 권한부여

1 mysql> grant all privileges on repl_db.* to user1@'%' identified by 'test123';

 

 

2. 리플리케이션 계정생성

1 mysql> grant replication slave on *.* to 'repl_user'@'%' identified by 'test456';

 

 

3. MySQL 설정 - my.cnf

1
2
3
4
vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1

 

처음 설치시 위와 같은 설정이되어 있으며, 없다면 새로 추가하시면 됩니다

 

 

4. MySQL 재시작

1 # service mysqld restart

 

 

5. Master 서버 정보 확인

1
2
3
4
5
6
7
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000010 |     1487 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

 

File : MySQL 로그파일

 

Position : 로그 파일내 읽을 위치

 

Binlog_Do_DB : 바이너리(Binary)로그 파일(변경된 이벤트 정보가 쌓이는 파일)

 

Binlog_Ignore_DB : 복제 제외 정보

 

 

 

 

 

 

 MySQL Replication 설정하기 - (Slave 서버)

 

Slave 서버설하기에 앞서 먼저 계정을 생성하겠습니다

 

MySQL DB, 계정생성 및 권한설정

 

 

1) DB 생성

1 mysql> create database repl_db default character set utf8;

 

2) 계정생성

1 mysql> create user user1@'%' identified by 'test123';

 

3) 권한부여

1 mysql> grant all privileges on repl_db.* to user1@'%' identified by 'test123';

 

 

이제 Slave 서버 설정을 하는 방법 2가지 방법이 있습니다

첫번째는 mysql에 들어가서 설정하는 방법과 mysql 설정파일(my.cnf)에서 설정하는 방법이 있으며, 먼저 mysql에서 설정하는 부분부터 알아보도록 하겠습니다

 

 

1. MySQL에 접속하여 설정

 

 

 

1) MySQL 설정 - my.cnf

 

 

1
2
3
4
5
# vi /etc/my.cnf


[mysqld]
server-id=2
replicate-do-db='repl_db'

 

Server-id : Master 서버의 server-id를 제외하고 1~(2^32)-1내의 숫자로 설정하시면 됩니다

 

replicate-do-db : 복제하고자 하는 데이터베이스를 의미하며 2개이상의 데이터베이스를 할경우 replicate-do-db를 추가하시면 됩니다

 

 

 

2) MySQL 복원

 

1) Master DBMS에서 복제할 데이터베이스를 dump하여 복원합니다

 

 

 

3) Master 서버로 연결하기 위한 설정

 

 

1
2
3
4
5
6
mysql> change master to
master_host='192.168.65.148',
master_user='repl_user',
master_password='test456',
master_log_file='mysql-bin.000010',
master_log_pos=1487;

 

MASTER_HOST : Mster 서버 IP 입력

 

MASTER_USER : 리플리케이션 ID

 

MASTER_PASSWORD : 리플리케이션 PW

 

MASTER_LOG_FILE : MASTER STATUS 로그파일명

 

MASTER_LOG_POS : MASTER STATUS에서 position 값

 

 

4) MySQL 재시작

1 # service mysqld restart

 

 

 

2. MySQL에 my.cnf에서 설정하기

 

1) MySQL 설정 - my.cnf

 

 

1
2
3
4
5
6
7
[mysqld]
replicate-do-db='repl_db'
master-host=192.168.65.148
master-user=repl_user
master-password=test456
master-port=3306
server-id=2

 

 

replicate-do-db : 복제하고자 하는 데이터베이스를 의미하며 2개이상의 데이터베이스를 할경우 replicate-do-db를 추가하시면 됩니다

master-host : Master 서버의 IP를 입력

master-user : Master 서버에 생성한 리플리케이션(Replication) ID 입력

master-password : Master 서버에 생성한 리플리케이션(Replication) PW 입력

master-port : MySQL에서 사용하는 포트 입력

Server-id : Master 서버의 server-id를 제외하고 1~(2^32)-1내의 숫자로 설정하시면 됩니다

 

 

 

2) MySQL 재시작

1 # service mysqld restart

 

 

 

 

 

 MySQL Replication 상태 확인하기

 

 

MySQL 리플리케이션(Replication)이 정상적으로 완료되었다면 이제 상태를 확인해야 되겠죠? 다음과 같이 확인하시면 됩니다.

 

 

1. Master 서버 상태보기

 

1) 쓰레드 상태보기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mysql> show processlist\G
*************************** 1. row ***************************
     Id: 1
   User: repl_user
   Host: 192.168.65.149:38488
     db: NULL
Command: Binlog Dump
   Time: 2434
  State: Has sent all binlog to slave; waiting for binlog to be updated
   Info: NULL
*************************** 2. row ***************************
     Id: 2
   User: root
   Host: localhost
     db: NULL
Command: Query
   Time: 0
  State: NULL
   Info: show processlist
2 rows in set (0.00 sec)

 

Master 서버에서 위 내용과 같이 명령어를 입력하면 Id:1 쓰레드의  Slave서버(192.168.65.149)의 repl_user계정으로 연결되어 있는 것을 확인하실수 있습니다

 

 

 

2. Slave 서버 상태보기

 

1) 쓰레드 상태보기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> show processlist\G;
*************************** 1. row ***************************
     Id: 1
   User: system user
   Host:
     db: NULL
Command: Connect
   Time: 4294967261
  State: Has read all relay log; waiting for the slave I/O thread to update it
   Info: NULL
*************************** 2. row ***************************
     Id: 2
   User: system user
   Host:
     db: NULL
Command: Connect
   Time: 90
  State: Waiting for master to send event
   Info: NULL

 

쓰레드1(ld: 1)에서는 Master 서버와 통신하기 위한 쓰레드이며, 스레드2(ld: 2)는 업데이트된 내용을 처리하기 위한 SQL 쓰레드 입니다 이러한 2개의 쓰레드에서는 오류가 발생하면 안된다고 합니다.

 

 

2) 쓰레드 주요인자 상태보기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
mysql> show slave status\G;
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 192.168.65.148
                Master_User: repl_user
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.000012
        Read_Master_Log_Pos: 434
             Relay_Log_File: slave-relay-bin.000042
              Relay_Log_Pos: 419
      Relay_Master_Log_File: mysql-bin.000012
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB: repl_db,repl_db
        Replicate_Ignore_DB:
         Replicate_Do_Table:
     Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                 Last_Errno: 0
                 Last_Error:
               Skip_Counter: 0
        Exec_Master_Log_Pos: 434
            Relay_Log_Space: 419
            Until_Condition: None
             Until_Log_File:
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File:
         Master_SSL_CA_Path:
            Master_SSL_Cert:
          Master_SSL_Cipher:
             Master_SSL_Key:
      Seconds_Behind_Master: 0
1 row in set (0.00 sec)

 

Slave_IO_State : Master서버의 연결을 시도하고 Master서버로 부터 이벤트를 기다리며, 재연결하는지에 대해 알려줍니다

 

Master_Host : 연결된 Master서버 호스트 입니다

 

Master_User : Master서버 연결하는데 사용되는 사용자 입니다

 

Master_Port : Master서버 연결하는데 사용되는 포트 입니다

 

Connect_Retry : --master-connect-retry 옵션의 현재 값 입니다

 

Master_Log_File : I/O 쓰레드에서 현재 읽고 있는 바이너리 로그파일 이름 입니다

 

        Read_Master_Log_Pos : I/O 쓰레드에서 현재 Master 서버의 바이너리 로그에서 읽은 곳가지의 위치 입니다

 

             Relay_Log_File : SQL 쓰레드에서 현재 relay 로그파일 이름 입니다

 

              Relay_Log_Pos : SQL 쓰레드에 의해 Relay 로그에서 읽고 실행한 곳까지의 위치 입니다

 

      Relay_Master_Log_File : SQL 스레드에 의해 실행된 최근 Master서버의 바이너리 로그 파일의 이름입니다

 

           Slave_IO_Running : I/O 쓰레드가 시작되어 Master서버의 성공적으로 연결되어있는지 여부 여부 입니다

 

          Slave_SQL_Running : SQL 쓰레드가 시작되었는지의 여부 입니다

 

            Replicate_Do_DB : Master서버에서 업데이트된 데이터를 반영될 DB 입니다

 

        Replicate_Ignore_DB : 생략.

 

         Replicate_Do_Table : 생략.

 

     Replicate_Ignore_Table : 생략.

 

    Replicate_Wild_Do_Table : 생략.

 

Replicate_Wild_Ignore_Table : 생략.

 

                 Last_Errno : 가장 최근에 사용된 쿼리의 에러메시지의 번호로 리턴됩니다

 

                 Last_Error : 가장 최근에 사용된 쿼리의 에러메시지의 번호로 리턴됩니다

 

               Skip_Counter : 생략.

 

        Exec_Master_Log_Pos : Master서버의 바이너리 로그의 Relay_Master_Log_File로 부터 SQL쓰레드의 의해 마지막 이벤트의 위치 입니다

 

            Relay_Log_Space : 존재하는 모든 Relay 로구우ㅏ 전체 사이즈 입니다

 

            Until_Condition : 생략.

 

             Until_Log_File : 생략.

 

              Until_Log_Pos : 생략.

 

         Master_SSL_Allowed : Master서버에 연결하기 위해 Slave에 의해 사용된 SSL 파라미터 입니다

 

         Master_SSL_CA_File : Master서버에 연결하기 위해 Slave에 의해 사용된 SSL 파라미터 입니다

 

         Master_SSL_CA_Path : Master서버에 연결하기 위해 Slave에 의해 사용된 SSL 파라미터 입니다

 

            Master_SSL_Cert : Master서버에 연결하기 위해 Slave에 의해 사용된 SSL 파라미터 입니다

 

          Master_SSL_Cipher : Master서버에 연결하기 위해 Slave에 의해 사용된 SSL 파라미터 입니다

 

             Master_SSL_Key : Master서버에 연결하기 위해 Slave에 의해 사용된 SSL 파라미터 입니다

 

      Seconds_Behind_Master : Master서버에서 실행된 이벤트의 타임스탬프 이후 경과된 시간(초 단위)의 수 입니다

 

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
mysql> show slave status\G;
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 192.168.65.148
                Master_User: repl_user
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.000010
        Read_Master_Log_Pos: 98
             Relay_Log_File: slave-relay-bin.000010
              Relay_Log_Pos: 370
      Relay_Master_Log_File: mysql-bin.000009
           Slave_IO_Running: Yes
          Slave_SQL_Running: No
            Replicate_Do_DB: repl_db,repl_db,repl_db,repl_db
        Replicate_Ignore_DB:
         Replicate_Do_Table:
     Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                 Last_Errno: 1007
                 Last_Error: Error 'Can't create database 'repl_db'; database exists' on query. Default database: 'repl_db'. Query: 'create database repl_db default character set utf8'
               Skip_Counter: 0
        Exec_Master_Log_Pos: 233
            Relay_Log_Space: 1123
            Until_Condition: None
             Until_Log_File:
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File:
         Master_SSL_CA_Path:
            Master_SSL_Cert:
          Master_SSL_Cipher:
             Master_SSL_Key:
      Seconds_Behind_Master: NULL
1 row in set (0.00 sec)


ERROR:
No query specified

 

간혹 위와 같이 에러가 발생하면서 Slave 서버가 작동이 잘안되는 경우가 있습니다

위와 같은 경우는 Slave 서버에 에러가 발생하면 에러가 발생하였던 시점으로 부터Master 서버로 부터 갱신된 쿼리를 실행하지 않게되며, 이경우 에러를 넘겨야 다음 쿼리를 실행하게 됩니다

 

 

 

 

1
2
3
vi /etc/my.cnf
[mysqld]
slave-skip-errors=all

 

위와 같은 옵션을 잠시 설정하여 반영하시기 바랍니다. my.cnf에서 설정을 반영하신 후에는 MySQL을 재시작하시기 바랍니다

 

출처: <http://server-talk.tistory.com/240>

 

반응형
반응형

로그 서버를 나누면서 DB를 복제해야할 일이 생김

 

[테스트 환경]

OS          - CentOS Linux release 7.3.1611 (Core),  64bit

Master     - mariadb-server-5.5.56-2.el7.x86_64   

Slave       - mariadb-server-5.5.56-2.el7.x86_64 

 

 

1. Master 설정

 

우선 MariaDB 환경설정 파일을 수정한다.

# vim /etc/my.cnf

 

 

1
2
3
4
5
6
[mysqld]
...
server-id =1
log-bin=master-bin
binlog_format=mixed
...
cs

※ 주의, [mysqld] 밑 부분에 추가해야 함, 환경 설정파일 맨 밑부분에 추가해 보면 Master 기능이 제대로 작동 안함

 

DB에 접속해서 Replication 사용자를 추가한다.

# mysql -u root -p

...

MariaDB [(none)]> CREATE USER 'repl'@'%' IDENTIFIED BY 'password';

MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO repl IDENTIFILED BY 'password';

 

MariaDB를 재시작 한 후 복제할 DB의 데이터를 덤프한다.

# systemctl restart mariadb

# mysqldump -u root -p testDB > testDB.sql

※ 이 과정은 Master에 있는 기존 데이터를 Slave에 옮겨야 하는 경우에만 적용한다.

 

Master의 상태를 확인한다.

# mysql -u root -p

...

MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;

MariaDB [(none)]> SHOW MASTER STATUS;

1
2
3
4
5
6
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 |   123256 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
Colored by Color Scripter
cs

※ Slave의 경우 Position 값과 앞에 데이터를 덤프한 파일이 필요하다. Position 값은 변화하기 때문에 Slave에서 설정할 때 한 번 더 확인하는 작업이 필요하다.

LOCK의 경우 Replication 종료 또는 서비스 중이 아니라면 'MariaDB [(none)]> UNLOCK TABLES;' 를 통해서 LOCK을 풀면된다.

 

마지막으로 Slave 의 접근 권한을 허용해야 한다.

# firewall-cmd --permanent --zone=public --add-port=3306/tcp

# firewall-cmd --permanent --zone=public --add-port=3306/udp

# systemctl restart firewalld

 

 

2. Slave 설정

Slave 설정이 들어가기 전에 해야 하는 작업이 있다. 복제할 서버(Slave)에 Master 서버의 동일한 DB 또는 Table 구조를 만들어야 한다. 물론 복제할 부분만 있으면 되고 데이터까지 똑같을 필요는 없다.

 

마찬가지로 MariaDB 환경설정 파일을 수정한다.

# vim /etc/my.cnf

 

 

1
2
3
4
5
6
7
[mysqld]
...
server-id=2
log-bin=slave-2-bin
relay-log=relay-bin
replicate-do-db=Syslog
...
cs

※ Master 와 마찬가지로 [mysqld] 아래 부분에 수정을 해야한다.

만약 하나 이상의 DB 를 복제하려면 'replicate-do-db={DBName}' 설정을 개수만큼 추가하면 된다.

server-id 의 경우 Master 와 겹쳐서는 안된다. 다수의 Slave 가 있다면 모두 각각의 server-id 를 가지고 있어야 한다.

테이블을 복사하려면 'replicate-do-table=db.table 을 하면 된다.

 

Master에서 덤프한 SQL 데이터를 복구한다.

# mysql -u root -p testDB < testDB.sql

 

Slave에서 Master로 접속하기 위한 정보를 추가한다.

# mysql -u root -p

MariaDB [(none)]> CHANGE MASTER TO

MASTER_HOST='115.xxx.xxx.xxx',

MASTER_USER='repl',

MASTER_PASSWORD='password',

MASTER_PORT=3306,

MASTER_LOG_FILE='master-bin.000001',

MASTER_LOG_POS=123256,

MASTER_CONNECT_RETRY=10;

MariaDB [(none)]> FLUSH PRIVILEGES;

MariaDB [(none)]> START SLAVE;

 

작동확인

MariaDB [(none)]> SHOW SLAVE STATUS\G;

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 115.xxx.xxx.xxx
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: master-bin.000001
          Read_Master_Log_Pos: 425494
               Relay_Log_File: relay-bin.000007
                Relay_Log_Pos: 366916
        Relay_Master_Log_File: master-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: Syslog
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 425494
              Relay_Log_Space: 367204
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
1 row in set (0.00 sec)
Colored by Color Scripter
cs

 

에러가 없으면, 정상적으로 INSERT 되고 있는지 SELECT 문을 통해서 확인해보면 된다.

 

출처: https://knoow.tistory.com/138 [ICT Story]

 

반응형
반응형

MySQL 복제를 이용한 실시간 백업

 

원문: http://www.onlamp.com/pub/a/onlamp/2005/06/16/MySQLian.html

 

대규모로 운영중인 MySQL 데이터베이스의 문제는 서버를 중단시키지 않고 전체 백업(clean backup)을 하는 것이다. 백업은 시스템을 느리게 만들며, 백업을 수행중인 테이블과 관련된 데이터가 변경될 수 있기 때문에 데이터 일관성을 해칠 수도 있다. 서버를 다운시키면 일관된 데이터를 얻을 수 있지만 이는 사용자에게 서비스 중단을 의미한다. 반드시 필요하고 어쩔 수 없는 경우라면 서버를 다운시킬 수 있지만, 데이터를 백업하기 위해 매일 서버를 중단하는 것은 받아들이기 어려운 일이다. 날마다 서버를 중단하지 않고 안정적인 백업을 받는 방법은 MySQL에 복제(replication)를 설정하는 것이다.

 

역주1: 업무상 DB 전체 백업에 해당하는 것이 원어에서는 clean backup이다. 따라서 클린 백업 대신 전체 백업으로 옮겼다.

역주2: MySQL 복제 서비스는 MySQL 3.2 부터 지원한다.

 

복제는 MySQL 서버의 시스템 구성으로 설정할 수 있으며, 마스터 서버는 데이터를 저장하고, 클라이언트 요청을 처리하며, 슬레이브 서버는 마스터 서버 데이터의 완전한 복사본을 갖고 있으며, 마스터 서버에 변경이 일어나자마자 그에 해당하는 모든 SQL 문장을 복제한다. 로드 밸런싱을 위해 복제를 사용하는 경우도 있지만, 여기서는 데이터 백업을 위해 복제를 사용하는 것에만 관심을 둘 것이다. 슬레이브로 사용할 별도의 서버를 설정하고, 매일 전체 백업을 받기 위해 복제를 중단할 수 있다. 전체 백업이 끝난 다음에 복제를 재시작하면 슬레이브에서는 마스터와 연결되어 있지 않은 시간 동안 변경된 내용들을 마스터에 자동으로 요청한다. 복제는 매우 훌륭한 기능이며 MySQL에 있는 기능이다. 여러분이 할 일은 복제를 설정하는 것 뿐이다.

 

복제 수행 과정

 

복제를 설정하는 방법을 설명하기 전에 MySQL이 복제 서버를 어떻게 관리하는지부터 간단하게 살펴봐야 한다. MySQL 복제 서버 관리는 MySQL 버전에 따라 다르지만, 대부분의 시스템에서는 최신 버전을 사용하고 있기 때문에 여기서는 MySQL 4.0 이상의 버전에 대해서만 설명할 것이다.

복제를 사용중일 때 마스터 서버에서 SQL 문장이 실행되면 MySQL은 바이너리 로그(bin.log)에 이를 로그 식별 번호와 같이 기록한다. 그러면 슬레이브 서버는 IO 스레드를 사용해서 정기적으로 변경사항을 추적하기 위해 마스터 서버의 바이너리 로그 파일을 읽어들인다.

 

변경사항이 있으면 릴레이 로그(relay.log)에 문장을 복사하고, 슬레이브 서버에 마스터 파일(master.info)에 새 식별 번호를 기록한다. 슬레이브 서버는 같은 IO 스레드를 사용해서 마스터 서버의 바이너리 로그를 확인한다. 릴레이 로그에 변경된 내용이 있으면 슬레이브 서버는 SQL 스레드를 사용해서 릴레이 로그에 새 SQL 문장을 기록한다. 슬레이브 서버는 안전 장치로 SQL 스레드를 사용해서 슬레이브 서버의 데이터와 마스터 서버의 데이터가 일치하는지 확인하기 위해 마스터 서버에 질의한다. 비교 결과가 일치하지 않는다면 복제는 중단되고 슬레이브 서버의 에러 로그(error.log)에 에러 메시지를 기록한다. 비교 질의 수행 결과가 일치한다면 슬레이브 서버의 릴레리 로그 파일(relay-log.info) 파일에 새 로그 식별 번호를 기록하고, 마스터 서버의 릴레이 로그 파일의 변경을 모니터링한다.복제 과정은 복잡해 보이지만, 모든 과정은 빠르게 수행되며 마스터 서버 자원을 많이 소비하지 않으면서 안정적인 복제를 보장한다. 또한, 복제 서비스는 마스터 서버와 슬레이브 서버의 my.cnf 설정 파일에 옵션을 몇 줄 추가하는 것으로 설정할 수 있으며, 설정과정도 쉽다. 새로운 서버를 설치하는 경우에도 단순히 마스터 서버의 데이터베이스를 슬레이브 서버에 복사하고, 슬레이브 서버에서 복제를 시작하면 된다.

 

복제 사용자

 

복제를 설정하기 위해서는 몇 가지 간단한 절차를 수행하면 된다. 첫번째는 복제 용도로만 사용할 사용자 계정을 설정하는 것이다. 보안상 기존 계정은 사용하지 않는 것이 가장 좋다. 사용자 계정을 설정하기 위해 마스터 서버에 다음 명령을 수행한다. 다음 명령은 root나 GRANT OPTION 권한을 가진 사용자 계정으로 로그인해서 수행해야한다.

 

GRANT REPLICATION SLAVE, REPLICATION CLIENT

      ON *.*

      TO "replicant"@"slave_host"

      IDENTIFIED BY "my_pwd";

 

SQL 문장에서 사용자 계정 replicant는 복제에 필요한 권한만 설정되었다. 사용자 이름은 어떤 것이든 사용할 수 있다. "replicant" 대신에 호스트 이름이나 IP 주소를 사용할 수도 있다. 슬레이브 서버에서도 위와 같은 질의를 수행시키면 된다. "slave_host"는 마스터 서버의 호스트 이름이나 IP 주소로 변경하면 된다. 이와 같이 설정하면, 마스터 서버에 장애가 발생해서 잠시 사용할 수 없는 경우 사용자를 DNS 설정이나 다른 방법을 사용해서 슬레이브 서버를 이용하게 할 수 있다. 마스터 서버가 복원된 이후에는 슬레이브 서버에 변경된 데이터를 마스터 서버에 반영하기 위해 복제를 사용할 수 있다. 공교롭게도 이전 버전의 MySQL에서 4.0 버전으로 업그레이드한 경우에 mysql 데이터베이스는 업그레이드되지 않기 때문에 위의 GRANT 문장이 실행되지 않는다. 이전 버전에는 복제와 관련된 권한이 없기 때문이다. 이 문제를 해결하기 위해서는 MySQL 문서에서 Grants 테이블 업그레이드하기를 참고하기 바란다.

 

서버 설정하기

 

마스터와 슬레이브에 복제 사용자를 모두 설정했으면, 이번에는 두 서버의 MySQL 설정 파일을 수정해야 한다. 운영중인 운영체제의 종류에 따라 설정 파일은 my.cnf 또는 my.ini일 것이다. Unix 계열 운영체제에서 설정 파일은 /etc 디렉터리에 있으며, 윈도우 시스템에서는 c:\ 또는 c:\windows에 있다. 텍스트 편집기를 사용해서 설정 파일에 [mysqld] 그룹 아래에 다음을 추가한다.

 

server-id = 1

log-bin = /var/log/mysql/bin.log

 

서버 식별 번호는 마스터 서버를 식별하기 위한 임의의 숫자다. 대부분의 경우에 어떤 숫자든 사용할 수 있다. 슬레이브 서버에 다른 식별 번호만 부여하면 된다. 두번째 줄은 MySQL에서 바이너리 로그를 수행할 경로와 파일명을 지정하는 것이다. 실제로 사용할 경로와 파일 이름은 원하는 대로 지정할 수 있다. 설정 파일의 디렉터리고 실제로 있는지 확인하고 mysql 사용자가 소유자이거나 또는 디렉터리에 쓰기 권한이 있기만 하면 된다. 또한, 여기서는 파일 이름의 접미어로 ".log"를 사용했지만 서버가 재시작하거나 로그 정보를 다시 시작할 때 ".000001"과 같은 일련번호로 대체된다.

 

슬레이브 서버의 설정 파일에도 다음을 추가해야 한다. 마스터 서버 연결을 위한 정보와 로그 파일 옵션을 추가한다.

 

server-id = 2

 

master-host = mastersite.com

master-port = 3306

master-user = replicant

master-password = my_pwd

 

log-bin = /var/log/mysql/bin.log

log-bin-index = /var/log/mysql/log-bin.index

log-error = /var/log/mysql/error.log

 

relay-log = /var/log/mysql/relay.log

relay-log-info-file = /var/log/mysql/relay-log.info

relay-log-index = /var/log/mysql/relay-log.index

 

꽤 많은 내용을 추가하는 것 같지만 실제로 들여다보면 어렵지 않게 이해할 수 있을 것이다. 첫번째 줄은 슬레이브 서버의 식별 번호이며, 슬레이브 서버를 여러 대 설정할 경우에는 다른 번호를 부여하면 된다. 그러나 단순히 데이터를 백업하는 것을 원하는 경우에는 슬레이브 서버를 한 대이상 설정할 필요는 없을 것이다. 그 다음 섹션은 마스터 서버의 호스트 이름, IP 주소와 같은 마스터 서버 정보에 대한 것이다. 마스터 포트는 MySQL 기본 설정인 3306 포트를 사용하지만 수행성능이나 보안상의 이유로 다른 포트 번호를 사용할 수도 있다. 그 다음은 마스터 서버에 로그인하기 위한 사용자 이름과 비밀번호다.

 

다음 두 섹션은 로그를 설정하기 위한 것이다. 처음 섹션은 마스터 서버에서 했던 것처럼 슬레이브 서버에서 바이너리 로그를 기록하기 위한 것이다. 이 설정은 앞에서 얘기한 것처럼 필요시 마스터 서버와 슬레이브 서버간에 역할을 서로 바꿀 수 있게 하기 위한 것이다. 바이너리 로그 인덱스 파일(log-bin.index)는 현재 사용하는 바이너리 로그 파일 이름을 기록하기 위한 것이다. 서버가 재시작되거나 로그들을 정리한 경우에 현재 로그 파일이 변경되며, 변경된 로그 파일 이름이 log-bin.index 파일에 기록된다. log-error 옵션은 에러 로그를 기록한다. 복제와 관련된 문제가 모두 기록되기 때문에 반드시 이 설정을 해야한다. 마지막 섹션은 릴레이 로그와 관련된 파일들을 설정한다. 릴레이 로그는 성능을 위해 마스터 서버 바이너리 로그의 각 항목을 복사한다. relay-log-info-file 옵션은 마스터 서버의 바이너리 로그에 대한 슬레이브 서버의 로그 파일 위치를 설정한다. 릴레이 로그 인덱스 파일은 복제를 위해 현재 사용중인 릴레이 로그 파일 이름을 관리한다.

 

데이터베이스 복사와 복제 시작하기

 

새 마스터 서버에 데이터가 없다면 슬레이브 서버를 재시작하면 된다. 그러나, 데이터가 있는 운영중인 서버에 복제를 설정했다면 복제를 위한 데이터베이스 초기 백업을 수행하는 것과 이 백업을 슬레이브 서버에 복사해야 한다. 데이터베이스를 백업하는 방법은 다양하다. 예를들어, mysqldump를 사용해서 운영중인 서버를 백업할 수 있다. 그러나, 여기에는 운영중인 서버의 데이터 일관성 문제가 남는다. 복제를 설정한 후에는 백업을 받기 위해 서버를 중단시키지 않아도 된다는 사실을 생각해보자. 즉, 일관성을 유지하면서 전체 백업을 받기 위해 사용자가 연결하지 못하게 하는 것도 생각해 볼 수 있다. root만 접근할 수 있는 마스터 서버를 만들기 위해 max_connections 변수를 다음과 같이 초기화할 수 있다.

 

SHOW VARIABLES LIKE "max_connections";

 

+-----------------+-------+

| Variable_name   | Value |

+-----------------+-------+

| max_connections | 100   |

+-----------------+-------+

 

SET GLOBAL max_connections = 0;

 

첫번째 SQL 문장은 필요없지만, 백업이 완료된 후에 max_connections 변수 값을 원래대로 복원하기 위해 초기 값을 알 필요는 있을 것이다. max_connections 값을 0으로 하는 것은 어떤 연결도 허용하지 않지만, 실제로 1개의 연결은 root 사용자를 위해 남겨져 있다. 물론, 이것은 새로운 연결만을 받아들이지 않는다. 따라서 현재 실행중인 연결을 보기 위해서는 SHOW PROCESSLIST;를 입력한다. 수행중인 프로세스를 종료하기 위해 KILL 문장을 사용할 수 있다.

 

서버에 독점적으로 액세스할 수 있으면 mysqldump는 매우 빠르게 수행된다. 마스터 서버의 명령줄에서 다음 명령을 입력한다.

 

mysqldump --user=root --password=my_pwd \

         --extended-insert --all-databases \

         --master-data   > /tmp/backup.sql  

 

위 문장은 모든 데이터베이스와 테이블을 생성하고, 데이터를 생성하는 SQL 문장으로 구성된 텍스트 파일을 생성한다. --extended-insert 옵션은 한번에 여러 줄을 넣을 수 있는 INSERT 문장을 만들어 주기 때문에 결과적으로 보다 빠르게 백업을 수행할 수 있으며, 최소한의 다운 타임을 갖는데 도움이 된다. --master-data 옵션은 덤프하는 동안 데이터가 변경되지 못하게 모든 테이블을 잠그지만, 사용자가 테이블을 읽어들이는 것은 허용한다. 독점적인 액세스 환경인 경우 이 기능은 필요하지 않다. 그러나, 이 옵션은 덤프 파일의 마지막에 다음과 같은 내용을 추가해준다.

 

--

-- Position to start replication from

--

 

CHANGE MASTER TO MASTER_LOG_FILE="bin.000846" ;

CHANGE MASTER TO MASTER_LOG_POS=427 ;

 

슬레이브 서버에서 덤프 파일이 실행될 때, 위 내용은 테이블이 잠겨 있는 동안 마스터 서버의 바이너리 로그 파일 이름과 백업 시점에서의 로그 위치를 기록한다. 복제가 시작될 때 이 로그 파일에 액세스하게 되고, 해당 위치부터 시작해서 기록된 SQL 문장을 수행한다. 즉, 슬레이브 서버가 설정되는 동안 변경된 데이터가 누락되지 않게 해준다. 슬레이브 서버에서 데이터베시으와 데이터를 설정하기 위해 덤프 파일을 실행하기 위해 덤프 파일을 슬레이브 서버에 복사한다. MySQL이 실행중인지 확인하고 슬레이브 서버에서 다음과 같이 입력한다.

 

mysql --user=root --password=my_pwd < /tmp/backup.sql

 

위 명령은 덤프 파일에 있는 CREATE, INSERT 문을 포함한 모든 SQL 문장을 실행한다. 백업된 데이터베이스가 슬레이브 서버에 모두 올라온 다음에는 슬레이브에 root로 로그인해서 다음 SQL 문장을 실행한다.

 

START SLAVE;

 

이 문장을 실행하면, 슬레이브는 마스터에 연결하고, 백업 이후로 누락된 변경사항을 가져온다. 이 시점부터 마스터 서버의 바이너리 로그 파일을 지속적으로 검사하면서 항상 최신의 상태를 유지한다.

 

복제를 이용한 백업

 

복제가 실행중일 때, 데이터 백업을 하는 것은 쉬운 작업이다. 먼저, 슬레이브 서버에 root 또는 SUPER 권한이 있는 사용자로 로그인하여 다음 SQL 문을 입력해서 슬레이버 서버의 복제를 잠시 중단시킨다.

 

STOP SLAVE;

 

슬레이브 서버는 마스터 서버의 바이너리 로그에 남겨진 위치를 알고 있다. 따라서, 슬레이브 서버에서 복제된 데이터베이스를 백업하면 된다. 백업 유틸리티 등을 사용하여 백업을 하고, 백업이 모두 완료되면 다음 명령을 실행해서 복제를 재시작하면 된다.

 

START SLAVE;

 

위 문장을 입력하면, 슬레이브 서버는 중단된 시점부터의 SQL 문장을 실행하고, 다시 최신의 상태를 유지하게 된다.

 

백업 자동화하기

 

복제와 백업이 올바르게 동작한다면 슬레이브 서버에서 복제를 중단하고, 데이터를 백업받고, 다시 슬레이브를 시작하는 간단한 쉘 스크립트를 작성할 수 있다.

 

#!/bin/sh

 

date = `date +%Y%m%d`

 

mysqladmin --user=root --password=my_pwd stop-slave

 

mysqldump --user=root --password=my_pwd --lock-all-tables \

         --all-databases > /backups/mysql/backup-${date}.sql

 

mysqladmin --user=root --password=my_pwd start-slave

 

이 예제에서는 슬레이브에서 복제를 중단하고 시작하기 위해 mysqladmin을 사용했다. 첫번째 줄에서 시스템 함수 date와 적절한 형식(예, 20050615)을 사용한 데이터를 사용해서 스크립트에서 mysqladmin에서 날마다 덤프 파일의 이름을 변경할 수 있게 했다. 물론, 덤파 파일의 경로와 이름을 원하는 대로 설정할 수 있다. date 함수와 서식지정 코드는 (")아 아니라 (`)을 사용한 것에 주의해야한다.

 

이것은 간단한 스크립트이고, 여러분은 보다 정교한 것을 작성하거나 오류 점검을 할 수 있는 것을 작성할 수도 있다. 공간을 절약하기 위해 덤프 파일을 압축하고, 압축한 파일을 테이프나 CD와 같은 매체에 저장할 수도 있다. 스크립트를 설정했으면 잘 동작하는지 테스트하기 바란다. 스크립트가 잘 동작한다면 crontab이나 서버에서 사용하는 스케줄링 유틸리티를 사용해서 스크립트를 추가하면 된다.

 

결론

 

복제는 MySQL에서 유용한 관리 기능이다. 복제는 데이터베이스의 주기적인 백업을 보장하는 훌륭한 방법이다. 복제에 대해 여기서 설명한 것보다 더 많은 옵션과 SQL 문장이 있으며, 이에 대해서는 내가 쓴 MySQL in a Nutshell에서 다루었다. 운영중인 대규모 시스템에서는 보다 강력한 데이터 보호를 위해 슬레이브 서버를 한 대 이상 설정할 수도 있다. 다중 슬레이브 서버 구성은 단일 슬레이브 서버 구성과 마찬가지로 설정과 개념은 동일하다. 극단적으로 많은 트랜잭션이 발생하는 데이터베이스에 대해서는 Emic과 같은 소프트웨어를 고려해볼 수 있다. Emic의 소프트웨어는 비싸지만, 백업과 로드 밸런싱을 위한 슬레이브 서버 관리를 위한 작업을 훌륭하게 수행한다.

반응형

+ Recent posts