안 쓰던 블로그

vagrant 기반 multi server 환경 구성하기 (2웹서버, 1DB서버) 본문

Network

vagrant 기반 multi server 환경 구성하기 (2웹서버, 1DB서버)

proqk 2021. 5. 9. 15:21
반응형

[준비]

vagrant 설치

www.vagrantup.com/downloads

 

virtualBox 설치

www.virtualbox.org/wiki/Downloads

 

설치할 때 환경변수까지 설정된다. 이거 되어 있으면 어디서든 vagrant 실행이 가능

 

윈도우 파워쉘 - 관리자 모드로 실행

 

베이그런트: 어떤 프로젝트의 개발 환경 공유르르 위한 도구. 즉, 개발 환경이 필요한 프로젝트 디렉터리가 있어야 한다

vagrant 폴더 만들기 - 이동

 

vagrant init  - (vagrantfile 생성됨)

vagrantfile에는 지금 base가상머신 구동이라고만 설정되어 있음. 어떤 이미지를 사용할지, 어떤 설정을 사용할지를 이 파일에서 설정할 수 있다.

쉘에서 노트패드를 실행하면 편리하게 설정할 수 있다.

notepad .\Vagrantfile

 

vagrantfile을 설정하고 나면 vagrant up 명령어로 설정 파일을 기반으로 구성할 수 있다.


[구상]

1. 2대의 가상머신은 웹 서버, 1대의 가상 머신은 데이터베이스 서버로 설정한다. 웹 서버 1의 ip주소는 192.168.3.5, 웹서버 2의 ip 주소는 192.168.3.4, DB서버의 ip주소는 192.168.3.6이다.

2. 데이터베이스 서버에는 response1response2 이름의 테이블 두 개가 있다.

3. 2대의 웹 서버는 1대의 데이터베이스 서버의 테이블들을 참조하여 데이터를 관리한다. 웹 서버1response1 테이블을 참조하고, 웹 서버2response2 테이블을 참조한다. 각 어떤 웹 서버에서 접속하느냐에 따라 수정하는 테이블이 결정된다.


[설정 과정]

1. 2대의 가상머신은 웹 서버, 1대의 가상 머신은 데이터베이스 서버로 설정한다. 웹 서버 1의 ip주소는 192.168.3.5, 웹서버 2의 ip 주소는 192.168.3.4, DB서버의 ip주소는 192.168.3.6이다.

 

<Vagrantfile>

웹 서버1을 설정한다.

버추얼박스 이름은 WebBox1

ip는 192.168.3.5로 private netwrok이다.

메모리는 1024를 할당한다.

host이름은 Web1이다. 

provision은 web_provision.sh 파일로 진행한다.

웹 관련 파일은 ADDITIONALFILES1 폴더에 있다.

 

웹 서버2를 설정한다.

버추얼박스 이름은 WebBox2

ip는 192.168.3.4로 private netwrok이다.

메모리는 1024를 할당한다.

host이름은 Web2이다. 

provision은 web_provision.sh 파일로 진행한다.

웹 관련 파일은 ADDITIONALFILES2 폴더에 있다.

 

데이터베이스 서버를 설정한다.

버추얼박스 이름은 DBBox

ip는 192.168.3.6으로 private network이다.

메모리는 1024를 할당한다.

host이름은 DB이다.

provision은 db_provision.sh 파일로 진행한다.

 

 

<web_provision.sh>

웹 서버 1, 2에 provision을 담당하는 web_provision.sh 파일이다.

웹 서버 구동에 필요한 apache와 php, mysql 등을 설치한다.


2. 데이터베이스 서버에는 response1response2 이름의 테이블 두 개가 있다.

<db_provision.sh>

#!/bin/bash
#provision DBBox Version 0.0.0
# Edited by Jessica Rankins 4/17/2017


rm -f postinstall.sh

apt-get update
# mysql 유저 설정
# mysql username: root
# mysql password: rootpass
debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password password rootpass'
debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password_again password rootpass'

# db서버의 역할을 하기 위한 패키지 설치
apt-get -y install mysql-server php5-mysql

sed -i "s/bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" "/etc/mysql/my.cnf"

# Allow root access from any host 이 사람(root, rootpass)이 원격으로 접속할 수 있다고 허용해 주겠다
# 이게 없으면 로컬에서만 접속되고 원격에서는 안 된다
echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'rootpass' WITH GRANT OPTION; FLUSH PRIVILEGES;" | mysql -u root --password=rootpass
#echo "GRANT PROXY ON ''@'' TO 'root'@'%' WITH GRANT OPTION" | mysql -u root --password=rootpass
sudo service mysql restart

# Create database for form responses (WebExampleBox) DB 테이블 생성
#DB Server->MySQL(DBMS)->formresponses(DB)->table1,table2...(schema)
mysql -uroot -p'rootpass' -e "DROP DATABASE IF EXISTS formresponses;  #기존의 db가 있으면 삭제
	CREATE DATABASE formresponses;  #db 생성
	USE formresponses;  #db 사용
	CREATE TABLE response1 (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
		firstname VARCHAR(20), lastname VARCHAR(20), 
		email VARCHAR(50), submitdate DATETIME);
	CREATE TABLE response2 (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
		firstname VARCHAR(20), lastname VARCHAR(20), 
		email VARCHAR(50), submitdate DATETIME);"
sudo service mysql restart

echo cd / >> /home/vagrant/.bashrc
echo "Hello World from DBBox!"

데이터베이스 서버의 provision을 담당하는 db_provision.sh 파일이다.

아이디와 비밀번호는 root와 rootpass로 설정한다.

db 이름: formresponses / table1 이름: response1 / table2 이름: response2

기존에 이미 formresponses라는 이름의 DB가 있다면 삭제한다.

각 테이블의 칼럼으로는 id, firstname, lastname, email, submitdate 가 있다.


3. 2대의 웹 서버는 1대의 데이터베이스 서버의 테이블들을 참조하여 데이터를 관리한다. 웹 서버1response1 테이블을 참조하고, 웹 서버2response2 테이블을 참조한다. 각 어떤 웹 서버에서 접속하느냐에 따라 수정하는 테이블이 결정된다.

<VagrantMultiAdditionalFiles1/process.php>

(전략)

function insertInfo($db,$first,$last,$email)
{
	$stmt = $db->prepare("INSERT INTO response1(firstname, lastname, email, submitdate) VALUES (:first, :last, :email, :date)");
	$stmt->bindParam(':first', $first);
	$stmt->bindParam(':last', $last);
	$stmt->bindParam(':email', $email);
	$stmt->bindParam(':date', date_format(date_create("now",timezone_open("America/New_York")), "Y-m-d H:i:s"));
	
	return $stmt->execute();
}

웹 서버1에서는 response1 테이블에 값을 insert한다.

 

<VagrantMultiAdditionalFiles1/show.php>

(후략)

웹 서버1에서는 respsonse1 테이블에 쿼리를 보낸다.

 

<VagrantMultiAdditionalFiles2/process.php>

function insertInfo($db,$first,$last,$email)
{
	$stmt = $db->prepare("INSERT INTO response2(firstname, lastname, email, submitdate) VALUES (:first, :last, :email, :date)");
	$stmt->bindParam(':first', $first);
	$stmt->bindParam(':last', $last);
	$stmt->bindParam(':email', $email);
	$stmt->bindParam(':date', date_format(date_create("now",timezone_open("America/New_York")), "Y-m-d H:i:s"));
	
	return $stmt->execute();
}

웹 서버2에서는 response2 테이블에 값을 insert한다.

 

<VagrantMultiAdditionalFiles2/show.php>

(후략)

웹 서버2에서는 respsonse2 테이블에 쿼리를 보낸다.


4. 실행 화면

여기까지 설정을 마쳤으면 설치 및 구성을 진행한다.

vagrant up

 

문제없이 구동되었으면 각 버추얼박스의 상태를 확인한다.

vagrant status

셋 다 정상적으로 running 중임을 확인할 수 있다. 

 

 

버추얼박스 관리자에서 보아도 3대의 서버가 잘 실행되고 있다.

 

<웹 서버 1 (192.168.3.5)>

 

브라우저에서 접속하여 폼에 데이터를 입력한다. 입력대로 DB에 저장됨을 볼 수 있다.

 

<웹 서버 2 (192.168.3.4)>

web2 주소로도 브라우저에서 접속하여 폼에 데이터를 입력한다. 입력대로 DB에 저장됨을 볼 수 있다.

 

<데이터베이스 확인>

vagrant ssh DBBoxssh접속 후 mysql에 접속한다. formresponses 데이터베이스가 있다.

 

2개의 테이블을 확인한다.

 

web1에서 적었던 정보들은 response1에 저장되었다.

web2에서 적었던 정보들은 response2에 저장되었다.

 

[마치며]

여기까지 베이그런트(vagrant)로 멀티 서버를 구성하는 방법에 대해서 알아보았다. 최근에는 베이그런트보다는 도커와 도커 컴포즈를 훨씬 많이 일반적으로 사용한다. 하지만 이전의 기술에 대해서도 알고 있으면 좋을 것 같아서 환경 구성을 한 번 진행해 보았다.

 

이 글에서 작성한 코드는 깃허브에 올려두었다.

github.com/proqk/vagrant_multi_vm

 

proqk/vagrant_multi_vm

클라우드컴퓨팅서비스보안관리. Contribute to proqk/vagrant_multi_vm development by creating an account on GitHub.

github.com

 

베이그런트의 근본적인 아이디어와 장점을 이해하는 데 좋은 자료가 있다 (KTH의 H3 컨퍼런스 발표)

www.youtube.com/watch?v=BWHX7u5NEtE

 

또한 이 글과 학교 강의를 참고하여 작성한 글임을 밝힌다.

 

반응형
Comments