서버 설치 · 8 min read · Sep 27, 2025
Debian 5.0에서 ISPConfig 3으로 웹, 이메일 및 MySQL 데이터베이스 클러스터(미러) 설치하기
Debian 5.0에서 ISPConfig 3으로 웹, 이메일 및 MySQL 데이터베이스 클러스터(미러) 설치하기
버전 1.0
저자: Till Brehm
이 튜토리얼은 Debian 5에서 ISPConfig 3 제어판을 사용하여 중복성, 고가용성 및 로드 밸런싱을 위해 사용될 클러스터형 웹, 이메일, 데이터베이스 및 DNS 서버의 설치를 설명합니다. GlusterFS는 서버 간 데이터 미러링에 사용되며 ISPConfig는 구성 파일 미러링에 사용됩니다. 여기서는 데모 목적으로 두 대의 서버 설정을 사용할 것이지만, GlusterFS 구성 파일에서 약간의 수정만으로 더 많은 서버로 확장할 수 있습니다.
현재 MySQL 클러스터 설정에는 하나의 제한 사항이 있습니다. MySQL 데몬은 두 번째 서버가 시작될 때 초기 innodb 검사 중에 잠금 문제를 겪습니다. 제가 사용하는 현재의 우회 방법은 MySQL을 myisam만으로 시작하는 것입니다. GlusterFS에서 innodb로 MySQL 서버를 성공적으로 실행한 여러 보고서를 찾았으므로, GlusterFS 및/또는 MySQL 구성 파일의 미세 조정을 통해 innodb를 사용할 수 있어야 합니다. 잠금 문제에 대한 해결책을 찾고 이 튜토리얼을 업데이트하도록 하겠습니다. GlusterFS에서 innodb에 대한 해결책을 아는 분은 저에게 연락해 주시기 바랍니다. 두 번째 서버를 핫 스탠바이 시스템으로만 사용하려는 경우, 첫 번째 서버가 연결이 끊어졌을 때만 두 번째 서버에서 MySQL을 시작하면 innodb를 사용할 수 있어야 합니다.
현재 이것은 개념 증명 설정이므로 이 설정이 생산 시스템에서 어떻게 확장되는지에 대한 경험이 없습니다. 문제가 발생할 수 있는 유일한 부분은 공유 MySQL 데이터 디렉토리입니다. 여러 서버에서 동시에 MySQL 데이터베이스에 접근하기 위한 또 다른 솔루션은 MySQL 클러스터 설정( http://www.mysql.com/products/database/cluster/) 또는 MySQL 마스터/마스터 복제를 사용하는 것입니다( https://www.howtoforge.com/mysql_master_master_replication).
ISPConfig 3를 사용하는 방법을 배우기 위해 ISPConfig 3 매뉴얼을 다운로드하는 것을 강력히 권장합니다.
300페이지에 가까운 이 매뉴얼은 ISPConfig의 개념(관리자, 리셀러, 클라이언트)을 다루고, ISPConfig 3의 설치 및 업데이트 방법을 설명하며, ISPConfig의 모든 양식 및 양식 필드에 대한 참조와 유효한 입력의 예를 포함하고, ISPConfig 3에서 가장 일반적인 작업에 대한 튜토리얼을 제공합니다. 또한 서버를 더 안전하게 만드는 방법을 설명하고 마지막에 문제 해결 섹션이 포함되어 있습니다.
1 두 개의 기본 시스템 설정하기
이 설정에서는 하나의 마스터 서버(ISPConfig 제어판 인터페이스를 실행)와 하나의 슬레이브 서버가 마스터 서버의 웹(apache), 이메일(postfix 및 dovecot) 및 데이터베이스(MySQL) 서비스를 미러링합니다.
클러스터형 설정을 설치하려면 Debian 5.0 최소 설치가 있는 두 대의 서버가 필요합니다. 기본 설정은 다음 튜토리얼의 1 - 6단계에서 설명되어 있습니다:
https://www.howtoforge.com/perfect-server-debian-lenny-ispconfig3
완벽한 서버 튜토리얼의 1 - 6단계만 설치하고 클러스터형 설정과 다르기 때문에 다른 단계는 설치하지 마십시오!
제 예에서는 두 대의 서버에 대해 다음 호스트 이름과 IP 주소를 사용합니다:
마스터 서버
호스트 이름: server1.example.tld
IP 주소: 192.168.0.105
슬레이브 서버
호스트 이름: server2.example.tld
IP 주소: 192.168.0.106
다음 설치 단계에서 이러한 호스트 이름이나 IP 주소가 발생하는 곳에서는 서버의 IP 및 호스트 이름에 맞게 변경해야 합니다.
2 두 대의 서버 설치하기
다음 단계는 마스터 서버와 슬레이브 서버에서 실행해야 합니다. 특정 단계가 마스터 또는 슬레이브 전용인 경우 설명에 빨간색으로 주석을 추가했습니다.
vi /etc/hosts127.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 … 다음 두 줄이 포함되어 있는지 확인합니다. 첫 번째 줄은 ClamAV 안티바이러스 소프트웨어와 SpamAssassin의 업데이트된 패키지를 가져오기 위한 debian volatile 리포지토리용이며, 두 번째 줄은 현재 GlusterFS 패키지가 포함된 backports 리포지토리용입니다.
deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free
deb http://www.backports.org/debian/ lenny-backports main contrib non-free다음 명령을 실행합니다…
apt-get install debian-backports-keyring
apt-get update
… 백포트 리포지토리 키를 설치하고 apt 패키지 데이터베이스를 업데이트합니다. 그런 다음…
apt-get upgrade… 최신 업데이트를 설치합니다(있는 경우).
NTP(network time protocol) 서버와 함께 시스템 시계를 동기화하는 것이 좋습니다. 다음 명령을 실행하기만 하면 됩니다…
apt-get -y install ntp ntpdate… 그러면 시스템 시간이 항상 동기화됩니다.
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의 새 비밀번호를 입력하고 다음 질문에 아래 설명된 대로 답변합니다:
웹 기반 관리용 디렉토리를 생성하시겠습니까? <– 아니오
구성의 일반 유형? <– 인터넷 사이트
메일 이름? <– server1.mydomain.tld
SSL 인증서 필요 <– 확인
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 restartamavisd-new, SpamAssassin 및 ClamAV를 설치하려면 다음을 실행합니다:
apt-get -y install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl 그런 다음 Apache2, PHP5, phpMyAdmin, FCGI, suExec, Pear 및 mcrypt를 다음과 같이 설치합니다:
apt-get -y install apache2 apache2.2-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-gd php5-mysql php5-imap phpmyadmin php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt php5-imagick imagemagick libapache2-mod-suphp libopenssl-ruby libapache2-mod-ruby sudo 다음 질문이 표시됩니다:
자동으로 재구성할 웹 서버: <– apache2
그런 다음 다음 명령을 실행하여 Apache 모듈 suexec, rewrite, ssl, actions 및 include를 활성화합니다:
a2enmod suexec rewrite ssl actions include ruby dav_fs dav auth_digestPureFTPd 및 쿼타는 다음 명령으로 설치할 수 있습니다:
apt-get -y install pure-ftpd-common pure-ftpd-mysql quota quotatool/etc/fstab을 편집합니다. 제 것은 다음과 같습니다(마운트 지점 /가 있는 파티션에 usrquota, grpquota를 추가했습니다):
vi /etc/fstab# /etc/fstab: 정적 파일 시스템 정보.
#
# <파일 시스템> <마운트 지점> <유형> <옵션> <덤프> <패스>
proc /proc proc defaults 0 0
/dev/sda1 / ext3 errors=remount-ro,usrquota,grpquota 0 1
/dev/sda5 none swap sw 0 0 /dev/hda
/media/cdrom0 udf,iso9660 user,noauto 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0쿼타를 활성화하려면 다음 명령을 실행합니다:
touch /quota.user /quota.group
chmod 600 /quota.*
mount -o remount /
quotacheck -avugm
quotaon -avug
BIND DNS 서버 설치:
apt-get -y install bind9 dnsutilsvlogger 및 webalizer 및 awstats 설치:
apt-get -y install vlogger webalizer awstats Jailkit 설치: Jailkit은 SSH 사용자를 chroot하려는 경우에만 필요합니다. 다음과 같이 설치할 수 있습니다(중요: Jailkit은 ISPConfig 이전에 설치해야 하며, 이후에는 설치할 수 없습니다!):
apt-get -y install build-essential autoconf automake1.9 libtool flex bisoncd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.11.tar.gz
tar xvfz jailkit-2.11.tar.gz
cd jailkit-2.11
./configure
make
make install
cd ..
rm -rf jailkit-2.11*
fail2ban 설치: 선택 사항이지만 권장됩니다. ISPConfig 모니터가 로그를 표시하려고 시도하기 때문입니다:
apt-get install fail2banGlusterFS 및 Fuse 설치:
apt-get -y –force-yes -t lenny-backports install fuse-utils
apt-get -y –force-yes install glusterfs-server glusterfs-client
GlusterFS 예제 구성 파일을 제거합니다:
rm -f /etc/glusterfs/*.vol GlusterFS 볼륨에 대한 데이터 디렉토리를 생성합니다:
mkdir /data/
mkdir /data/export-mysql
mkdir /data/export-mysql-ns
mkdir /data/export-vmail
mkdir /data/export-vmail-ns
mkdir /data/export-www
mkdir /data/export-www-ns
GlusterFS 서버 구성 파일을 생성합니다:
vi /etc/glusterfs/glusterfsd.vol# MySQL 서버 볼륨에 대한 구성
volume posix-mysql
type storage/posix
option directory /data/export-mysql
option background-unlink yes
end-volume
volume locks-mysql
type features/locks
option mandatory-locks on
subvolumes posix-mysql
end-volume
volume brick-mysql
type performance/io-threads
option thread-count 8
subvolumes locks-mysql
end-volume
# vmail 서버 볼륨에 대한 구성
volume posix-vmail
type storage/posix
option directory /data/export-vmail
end-volume
volume locks-vmail
type features/locks
subvolumes posix-vmail
end-volume
volume brick-vmail
type performance/io-threads
option thread-count 8
subvolumes locks-vmail
end-volume
# www 서버 볼륨에 대한 구성
volume posix-www
type storage/posix
option directory /data/export-www
end-volume
volume locks-www
type features/locks
subvolumes posix-www
end-volume
volume brick-www
type performance/io-threads
option thread-count 8
subvolumes locks-www
end-volume
# 모든 볼륨 내보내기
volume server
type protocol/server
option transport-type tcp
subvolumes brick-mysql brick-vmail brick-www
# MySQL 볼륨에 대한 인증 옵션
option auth.addr.brick-mysql.allow 192.168.0.105,192.168.0.106
option auth.login.brick-mysql.allow user-mysql
option auth.login.user-mysql.password 7wQav7ExkFg6eW
# vmail 볼륨에 대한 인증 옵션
option auth.addr.brick-vmail.allow 192.168.0.105,192.168.0.106
option auth.login.brick-vmail.allow user-vmail
option auth.login.user-vmail.password 7wQav7ExkFg6eW
# www에 대한 인증 옵션
option auth.addr.brick-www.allow 192.168.0.105,192.168.0.106
option auth.login.brick-www.allow user-www
option auth.login.user-www.password 7wQav7ExkFg6eW
end-volumeIP 주소를 서버의 IP로 바꾸고 비밀번호 7wQav7ExkFg6eW를 원하는 비밀번호로 바꿉니다.
GlusterFS 서버를 시작합니다:
/etc/init.d/glusterfs-server start 이제 GlusterFS 파일 시스템을 마운트하는 데 필요한 세 개의 클라이언트 볼륨 파일을 생성합니다.
vi /etc/glusterfs/glusterfs-mysql.volvolume remote1-mysql
type protocol/client
option transport-type tcp
option remote-host 192.168.0.105
option remote-subvolume brick-mysql
option username user-mysql
option password 7wQav7ExkFg6eW
end-volume
volume remote2-mysql
type protocol/client
option transport-type tcp
option remote-host 192.168.0.106
option remote-subvolume brick-mysql
option username user-mysql
option password 7wQav7ExkFg6eW
end-volume
volume replicate-mysql
type cluster/replicate
subvolumes remote1-mysql remote2-mysql
end-volume
volume cache-mysql
type performance/io-cache
option cache-size 25MB
subvolumes replicate-mysql
end-volumevi /etc/glusterfs/glusterfs-vmail.volvolume remote1-vmail
type protocol/client
option transport-type tcp
option remote-host 192.168.0.105
option remote-subvolume brick-vmail
option username user-vmail
option password 7wQav7ExkFg6eW
end-volume
volume remote2-vmail
type protocol/client
option transport-type tcp
option remote-host 192.168.0.106
option remote-subvolume brick-vmail
option username user-vmail
option password 7wQav7ExkFg6eW
end-volume
volume replicate-vmail
type cluster/replicate
subvolumes remote1-vmail remote2-vmail
end-volume
volume writebehind-vmail
type performance/write-behind
option window-size 1MB
subvolumes replicate-vmail
end-volume
volume cache-vmail
type performance/io-cache
option cache-size 256MB
subvolumes writebehind-vmail
end-volumevi /etc/glusterfs/glusterfs-www.volvolume remote1-www
type protocol/client
option transport-type tcp
option remote-host 192.168.0.105
option remote-subvolume brick-www
option username user-www
option password 7wQav7ExkFg6eW
end-volume
volume remote2-www
type protocol/client
option transport-type tcp
option remote-host 192.168.0.106
option remote-subvolume brick-www
option username user-www
option password 7wQav7ExkFg6eW
end-volume
volume replicate-www
type cluster/replicate
subvolumes remote1-www remote2-www
end-volume
volume writebehind-www
type performance/write-behind
option window-size 1MB
subvolumes replicate-www
end-volume
volume cache-www
type performance/io-cache
option cache-size 256MB
subvolumes writebehind-www
end-volume볼륨을 디렉토리에 마운트하기 전에 일부 서비스를 중지하고 현재 데이터를 백업해야 합니다:
/etc/init.d/mysql stop
/etc/init.d/apache2 stop
/etc/init.d/postfix stop
/etc/init.d/dovecot stop
mv /var/lib/mysql /var/lib/mysql_bak
mv /var/www /var/www_bak
mkdir /var/lib/mysql
mkdir /var/www
mkdir /var/vmail
vi /etc/fstab다음 줄을 추가합니다:
/etc/glusterfs/glusterfs-mysql.vol /var/lib/mysql glusterfs defaults 0 0
/etc/glusterfs/glusterfs-vmail.vol /var/vmail glusterfs defaults 0 0
/etc/glusterfs/glusterfs-www.vol /var/www glusterfs defaults 0 0이제 다음 명령을 실행하여 드라이브를 마운트합니다:
mount -amysql 디렉토리의 소유자를 mysql 사용자 및 그룹으로 변경합니다:
chown mysql:mysql /var/lib/mysqlmysql 및 www 데이터를 다시 복사합니다.
cp -prf /var/lib/mysql_bak/ /var/lib/mysql/
cp -prf /var/www_bak/ /var/www/
데이터를 다시 복사합니다(마스터 서버에서만! 슬레이브에서는 이 단계를 건너뜁니다!).
innodb를 끄십시오. MySQL이 시작될 때 잠금 문제를 일으킵니다.
vi /etc/mysql/my.cnf다음 줄을 변경합니다:
#skip-innodb다음과 같이:
skip-innodb 그리고 my.cnf 파일의 [mysqld] 섹션에 다음 줄을 추가합니다:
innodb_file_per_table 슬레이브 서버를 설정할 때, MySQL을 다시 시작하기 전에 마스터 서버에서 /etc/mysql/debian.cnf 파일을 슬레이브 서버로 복사하십시오!
이제 서비스를 다시 시작합니다:
/etc/init.d/mysql start
/etc/init.d/apache2 start
/etc/init.d/postfix start
/etc/init.d/dovecot start
GlusterFS 부팅 순서를 변경하여 GlusterFS 서버가 항상 MySQL보다 먼저 시작되도록 합니다.
mv /etc/rc2.d/S20glusterfs-server /etc/rc2.d/S19glusterfs-server
mv /etc/rc3.d/S20glusterfs-server /etc/rc3.d/S16glusterfs-server
mv /etc/rc4.d/S20glusterfs-server /etc/rc4.d/S16glusterfs-server
mv /etc/rc5.d/S20glusterfs-server /etc/rc5.d/S16glusterfs-server
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.