서버 설치 · 5 min read · Sep 28, 2025

Debian 6.0에서 ISPConfig 3로 웹, 이메일 및 MySQL 데이터베이스 클러스터 설치하기

Debian 6.0에서 ISPConfig 3로 웹, 이메일 및 MySQL 데이터베이스 클러스터 설치하기

버전 1.0
저자: Till Brehm

이 튜토리얼은 Debian 6에서 ISPConfig 3 제어판을 사용하여 중복성, 고가용성 및 로드 밸런싱을 위해 사용할 클러스터형 웹, 이메일, 데이터베이스 및 DNS 서버의 설치를 설명합니다. MySQL Master/Master 복제를 사용하여 서버 간에 MySQL 클라이언트 데이터베이스를 복제하고 Unison을 사용하여 /var/www (웹사이트) 및 /var/vmail (이메일 계정 데이터) 폴더를 동기화합니다.

1 두 개의 기본 시스템 설정하기

이 설정에서는 하나의 마스터 서버(ISPConfig 제어판 인터페이스를 실행)와 하나의 슬레이브 서버가 마스터 서버의 웹(apache), 이메일(postfix 및 dovecot) 및 데이터베이스(MySQL) 서비스를 미러링합니다.

클러스터형 설정을 설치하려면 Debian 6.0 최소 설치가 된 두 개의 서버가 필요합니다. 기본 설정은 다음 튜토리얼의 1 - 8단계에 설명되어 있습니다:

https://www.howtoforge.com/perfect-server-debian-squeeze-with-bind-and-dovecot-ispconfig-3

완벽한 서버 튜토리얼의 1 - 8단계만 설치하고 클러스터형 설정과 다르기 때문에 다른 단계는 설치하지 마십시오!

내 예제에서는 두 서버에 대해 다음 호스트 이름과 IP 주소를 사용합니다:

마스터 서버
호스트 이름: server1.example.tld
IP 주소: 192.168.0.105

슬레이브 서버
호스트 이름: server2.example.tld
IP 주소: 192.168.0.106

다음 설치 단계에서 이러한 호스트 이름이나 IP 주소가 발생하는 곳에서는 서버의 IP와 호스트 이름에 맞게 변경해야 합니다.

2 두 서버 설치하기

다음 단계는 마스터 서버와 슬레이브 서버에서 실행해야 합니다. 특정 단계가 마스터 또는 슬레이브 전용인 경우 설명에 빨간색으로 주석을 추가했습니다.

vi /etc/hosts
127.0.0.1       localhost
192.168.0.105   server1.example.tld
192.168.0.106   server2.example.tld

# 다음 줄은 IPv6 지원 호스트에 바람직합니다
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

서버의 호스트 이름을 설정합니다:

echo server1.example.tld > /etc/hostname
/etc/init.d/hostname.sh start

첫 번째 서버에서는 server1.example.tld를 사용하고 두 번째 서버에서는 server2.example.tld를 사용합니다.

sources.list 파일을 편집합니다…

vi /etc/apt/sources.list 

… 그리고 /etc/apt/sources.list에 squeeze-updates 리포지토리가 포함되어 있는지 확인합니다(이렇게 하면 ClamAV 바이러스 스캐너의 최신 업데이트를 항상 받을 수 있습니다 - 이 프로젝트는 매우 자주 릴리스를 게시하며, 때때로 이전 버전이 작동을 멈춥니다).

[...]  
deb http://ftp.de.debian.org/debian/ squeeze-updates main  
[...]  

다음 명령을 실행합니다:

apt-get update
apt-get upgrade

최신 업데이트를 설치합니다(있는 경우).

NTP(network time protocol) 서버와 시스템 시계를 동기화하는 것이 좋습니다. 다음 명령을 실행하면 됩니다:

apt-get -y install ntp ntpdate

그러면 시스템 시간이 항상 동기화됩니다.

서버 1에서:

이제 server1.example.tld에서 개인/공개 키 쌍을 생성합니다:

ssh-keygen -t dsa

root@server1:~# ssh-keygen -t dsa
공개/개인 dsa 키 쌍을 생성합니다.
키를 저장할 파일을 입력하십시오 (/root/.ssh/id_dsa): <– ENTER
‘/root/.ssh’ 디렉토리가 생성되었습니다.
암호를 입력하십시오(암호 없음은 비워 두십시오): <– ENTER
같은 암호를 다시 입력하십시오: <– ENTER
귀하의 식별 정보는 /root/.ssh/id_dsa에 저장되었습니다.
귀하의 공개 키는 /root/.ssh/id_dsa.pub에 저장되었습니다.
키 지문은:
1b:95:bc:4a:f4:9f:d8:ea:24:31:0f:c9:72:d5:a7:80 [email protected]
키의 랜덤 아트 이미지는:
+–[ DSA 1024]—-+
| |
| o o |
| E * . . |
| o = o o |
| . S o . |
| + O + . |
| + + + |
| o . |
| .o |
+—————–+
root@server1:~#

암호를 입력하지 않는 것이 중요합니다. 그렇지 않으면 미러링이 사람의 상호작용 없이 작동하지 않으므로 ENTER 키를 누르십시오!

다음으로, 공개 키를 server2.example.tld로 복사합니다:

ssh-copy-id -i $HOME/.ssh/id_dsa.pub [email protected]

root@server1:~# ssh-copy-id -i $HOME/.ssh/id_dsa.pub [email protected]
호스트 ‘192.168.0.101 (192.168.0.101)’의 신뢰성을 확인할 수 없습니다.
RSA 키 지문은 25:d8:7a:ee:c2:4b:1d:92:a7:3d:16:26:95:56:62:4e입니다.
계속 연결하시겠습니까(예/아니오)? <– yes (이것은 server2에 처음 연결할 때만 표시됩니다)
경고: ‘192.168.0.101’ (RSA)이 알려진 호스트 목록에 영구적으로 추가되었습니다.
[email protected]의 비밀번호: <– server2 root 비밀번호
이제 “ssh ‘[email protected]’”로 머신에 로그인해 보십시오. 그리고 다음에서 확인하십시오:

 .ssh/authorized_keys
추가적인 키가 예상하지 못한 키가 추가되지 않았는지 확인하십시오.

이제 server2에서 server1의 공개 키가 올바르게 전송되었는지 확인합니다:

server2:

cat $HOME/.ssh/authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAACBAPhiAexgEBexnw0rFG8lXwAuIsca/V+lhmv5lhF3BqUfAbL7e2sWlQlGhxZ8I2UnzZK8Ypffq6Ks+lp46yOs7MMXLqb7JBP9gkgqxyEWqOoUSt5hTE9ghupcCvE7rRMhefY5shLUnRkVH6hnCWe6yXSnH+Z8lHbcfp864GHkLDK1AAAAFQDddQckbfRG4C6LOQXTzRBpIiXzoQAAAIEAleevPHwi+a3fTDM2+Vm6EVqR5DkSLwDM7KVVNtFSkAY4GVCfhLFREsfuMkcBD9Bv2DrKF2Ay3OOh39269Z1rgYVk+/MFC6sYgB6apirMlHj3l4RR1g09LaM1OpRz7pc/GqIGsDt74D1ES2j0zrq5kslnX8wEWSHapPR0tziin6UAAACBAJHxgr+GKxAdWpxV5MkF+FTaKcxA2tWHJegjGFrYGU8BpzZ4VDFMiObuzBjZ+LrUs57BiwTGB/MQl9FKQEyEV4J+AgZCBxvg6n57YlVn6OEA0ukeJa29aFOcc0inEFfNhw2jAXt5LRyvuHD/C2gG78lwb6CxV02Z3sbTBdc43J6y [email protected]

postfix, dovecot 및 mysql을 단일 명령으로 설치합니다:

apt-get -y install postfix postfix-mysql postfix-doc mysql-client mysql-server openssl getmail4 rkhunter binutils dovecot-imapd dovecot-pop3d sudo

설치 프로그램에서 요청할 때 MySQL root 사용자에 대한 새 비밀번호를 입력하십시오. 두 서버 모두에 대해 동일한 비밀번호를 선택해야 합니다. 그런 다음 다음 질문에 아래에 설명된 대로 답하십시오:

구성의 일반 유형? <– 인터넷 사이트
메일 이름? <– server1.mydomain.tld
SSL 인증서 필요 <– 확인

첫 번째 서버에서는 server1.example.tld를 사용하고 두 번째 서버에서는 server2.example.tld를 사용합니다.

MySQL이 localhost뿐만 아니라 모든 인터페이스에서 수신 대기하도록 하려면 /etc/mysql/my.cnf를 편집하고 bind-address = 127.0.0.1 줄을 주석 처리합니다:

vi /etc/mysql/my.cnf
[...]  

# skip-networking 대신 기본값은 이제 localhost에서만 수신 대기하는 것입니다.  
# 이는 더 호환성이 있으며 덜 안전하지 않습니다.  
#bind-address           = 127.0.0.1  

[...]  

그런 다음 MySQL을 재시작합니다:

/etc/init.d/mysql restart

이제 MySQL 서버를 mysql master/master 복제를 위해 준비합니다.

서버 1에서:

쉘에서 MySQL에 로그인합니다…

 mysql -u root -p

… 그리고 MySQL 설치 중에 선택한 MySQL root 비밀번호를 입력합니다. 그런 다음 MySQL 쉘에서 다음 명령을 실행합니다:

GRANT REPLICATION SLAVE ON . TO ‘slaveuser’@’%’ IDENTIFIED BY ‘slave_user_password’;
FLUSH PRIVILEGES;
quit;

‘slave_user_password’를 슬레이브가 마스터 서버에 연결하는 데 사용할 안전한 비밀번호로 교체하십시오. 다음 단계에서 이 자리 표시자를 사용하는 모든 곳에서 선택한 비밀번호로 교체하십시오.

이제 두 개의 MySQL 노드를 구성해 보겠습니다:

서버 1에서:

vi /etc/mysql/my.cnf

[mysqld]로 시작하는 섹션을 찾아 다음 옵션을 추가합니다(모든 기존 충돌하는 옵션을 주석 처리합니다):

[...]  
[mysqld]  
server-id = 1  
replicate-same-server-id = 0  
auto-increment-increment = 2  
auto-increment-offset = 1  
  
master-host = 192.168.0.106  
master-user = slaveuser  
master-password = slave_user_password  
master-connect-retry = 60   
  
expire_logs_days        = 10  
max_binlog_size         = 500M  
log_bin                        = /var/log/mysql/mysql-bin.log  
[...]  

그런 다음 MySQL을 중지합니다:

/etc/init.d/mysql stop

이제 서버2에서 거의 동일한 작업을 수행합니다…

서버 2에서:

vi /etc/mysql/my.cnf

[mysqld]로 시작하는 섹션을 찾아 다음 옵션을 추가합니다(모든 기존 충돌하는 옵션을 주석 처리합니다):

[...]  
[mysqld]  
server-id = 2  
replicate-same-server-id = 0  
auto-increment-increment = 2  
auto-increment-offset = 2  
  
master-host = 192.168.0.105  
master-user = slaveuser  
master-password = slave_user_password  
master-connect-retry = 60  
  
expire_logs_days        = 10  
max_binlog_size         = 500M  
log_bin                        = /var/log/mysql/mysql-bin.log  
[...]  

그런 다음 MySQL을 중지합니다:

/etc/init.d/mysql stop

이제 두 MySQL 서버를 동기화해야 합니다. 이는 마스터에서 슬레이브로 MySQL 데이터 디렉토리를 복사하고 debian-sys-maint 사용자가 포함된 debian 구성 파일도 복사하여 수행할 수 있습니다. 두 서버에서 MySQL을 중지했기 때문에 가능합니다.

서버 1에서:

scp -pr /var/lib/mysql/* [email protected]:/var/lib/mysql/
scp -pr /etc/mysql/debian.cnf [email protected]:/etc/mysql/debian.cnf

이제 마스터 서버에서 MySQL을 다시 시작합니다:

/etc/init.d/mysql start

root 사용자로 MySQL 쉘에 로그인합니다…

mysql -u root -p

… 그리고 MySQL 쉘에서 다음 명령을 실행합니다…

 SHOW MASTER STATUS; 

… MySQL 마스터 상태를 가져옵니다:

mysql> SHOW MASTER STATUS;
+——————+———-+————–+——————+
| 파일 | 위치 | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000002 | 106 | | |
+——————+———-+————–+——————+
1행이 집합에 있습니다 (0.00초)

다음 단계에 필요한 정보는 binlog 파일 mysql-bin.000002와 binlog 위치 106입니다. 나중에 server2에 대해서도 동일한 세부정보가 필요합니다.

이제 마스터에서 슬레이브에 연결하기 위해 MySQL 쉘에서 다음 명령을 실행합니다:

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST=’192.168.0.106’, MASTER_USER=’slaveuser’, MASTER_PASSWORD=’slave_user_password’, MASTER_LOG_FILE=’mysql-bin.000002’, MASTER_LOG_POS=106;
START SLAVE;

그런 다음 슬레이브 상태를 확인합니다:

SHOW SLAVE STATUS \G

출력에서 Slave_IO_Running과 Slave_SQL_Running 모두 Yes 값을 가져야 합니다.

서버 2에서:

root 사용자로 MySQL 쉘에 로그인합니다…

mysql -u root -p

… 그리고 MySQL 쉘에서 다음 명령을 실행합니다:

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST=’192.168.0.105’, MASTER_USER=’slaveuser’, MASTER_PASSWORD=’slave_user_password’, MASTER_LOG_FILE=’mysql-bin.000002’, MASTER_LOG_POS=106;
START SLAVE;

그런 다음 슬레이브 상태를 확인합니다:

SHOW SLAVE STATUS \G

출력에서 Slave_IO_Running과 Slave_SQL_Running 모두 Yes 값을 가져야 합니다.

이제 mysql master/master 복제의 구성이 완료되었으며 다른 소프트웨어 패키지를 설치할 준비가 되었습니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.