728x90

실습 환경


  LB WEB 1 WEB 2 NFS DB
IPv4 (enp0s8) 192.168.56.50 192.168.56.10 192.168.56.20 192.168.56.11 192.168.56.6
IPv4 (enp0s3) 10.0.2.50 10.0.2.30 10.0.2.31 10.0.2.40 10.0.2.10
HOSTNAME haproxy.goorm.com web01.goorm.com web02.goorm.com nfs.goorm.com master.goorm.com
DNS 8.8.8.8
GW 192.168.56.1
10.0.2.1
OS CentOS 7

 

 


아키텍처


 

 


구성 순서


 

1. 기본 웹서버 구성 (2대)
index.html 파일에 각 시스템의 호스트네임을 입력해두고 해당 시스템 접속 확인

2. haproxy 를 이용한 로드밸런서 구성
백앤드 서버를 1번에서 만든 웹서버 2대로 각각 지정
로드밸런서 서버로 접속해서 확인

3. NFS 연동 추가
1) 웹서버들의 /var/www/html 디렉토리를 NFS 서버에서 제공하도록 설정
2) 이 때, 구분을 위해 공유 디렉토리를 2개 설정해서 
각 시스템에 공유하기
ex) /content1 은 web01 에 공유
/content2 는 web02 에 공유

4. DB 연동
NFS 서버에서 제공하는 컨텐츠 파일을 php 파일로 작성해서
DB서버와 연동하기 ( php 파일은 기존 실습 참고 )

 

 


WEB 서버 구성


Apache


yum install -y httpd

systemctl enable --now httpd

firewall-cmd --add-service=http
firewall-cmd --add-service=http --permanent

echo "<h1>This Webserver hostname is $HOSTNAME</h1>" > /var/www/html/index.html

 

WEB1 주소로 접속: 192.168.56.10

 

WEB2 주소로 접속: 192.168.56.20

 

 


로드밸런서 구성


yum install -y haproxy

cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak

vi /etc/haproxy/haproxy.cfg

	 60 #---------------------------------------------------------------------
     61 # main frontend which proxys to the backends
     62 #---------------------------------------------------------------------
     63
     64 frontend lb
     65         bind *:80
     66         default_backend         web
     67         option                  forwardfor
     68
     69 backend web
     70         balance         roundrobin
     71         server          web01 10.0.2.30:80
     72         server          web02 10.0.2.31:80

systemctl enable --now haproxy
firewall-cmd --add-service=http

 

로드밸런서 주소로 접속: 192.168.56.50

 

 

 

 


NFS 서버 구성


NFS 서버

yum list nfs-utils

Installed Packages
nfs-utils.x86_64                                        1:1.3.0-0.68.el7.1                                         @updates
Available Packages
nfs-utils.x86_64                                        1:1.3.0-0.68.el7.2                                         updates


mkdir /content1 /content2

vi /etc/exports
/content1       10.0.2.30/32(rw,sync)
/content2       10.0.2.31/32(rw,sync)

exportfs -r
exportfs

/content1       10.0.2.30/32
/content2       10.0.2.31/32

echo "<h1>This is NFS Server with WEB1</h1>" > /content1/index.html
echo "<h1>This is NFS Server with WEB2</h1>" > /content2/index.html

systemctl enable --now nfs-server
firewall-cmd --add-service=nfs
firewall-cmd --add-service=nfs --permanent

vi /etc/sysconfig/nfs
14 RPCNFSDARGS="-V4.2"

 

WEB 클라이언트

ls -lZd /var/www/html/index.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/index.html

# WEB1
vi /etc/fstab
10.0.2.40:/content1     /var/www/html   nfs     rw,sync,sec=sys,v4.2,context="unconfined_u:object_r:httpd_sys_content_t:s0"     0       0

# WEB2
10.0.2.40:/content2     /var/www/html   nfs     rw,sync,sec=sys,v4.2,context="unconfined_u:object_r:httpd_sys_content_t:s0"
     0       0
     
mount -a

 

WEB1 주소로 접속: 192.168.56.10

 

WEB2 주소로 접속: 192.168.56.20

 

로드밸런서 주소로 접속: 192.168.56.50

 

 


 

DB 서버 구성


패키지 설치 및 기본 보안 설정

yum install -y mariadb-server

systemctl enable --now mariadb

mysql_secure_installation

 

사용자 및 테이블 구성

 

# 사용자 권한 설정
MariaDB [(none)]> GRANT select,insert ON *.* TO remote@'%' identified by '123';
MariaDB [(none)]> flush privileges;

# 데이터베이스 설정
MariaDB [(none)]> CREATE database examdb;
MariaDB [(none)]> use examdb;
MariaDB [examdb]> CREATE table test_tab ( id int(2), name varchar(5) );
MariaDB [examdb]> INSERT INTO test_tab(id,name) VALUE(1,'KIM');
MariaDB [examdb]> SELECT * FROM test_tab;
+------+------+
| id   | name |
+------+------+
|    1 | KIM  |
+------+------+

 


 

PHP 구성


WEB 1


 

 

php 동작 확인, 부울 값 활성화

# php 패키지 설치 및 설정 파일 수정
yum install -y php php-pear php-mbstring php-fpm php-mysql

vi /etc/httpd/conf.d/php.conf
      4 <FilesMatch \.php$>
      5         SetHandler "proxy:fcgi://127.0.0.1:9000"
      
systemctl restart httpd php-fpm

# 부울 값 활성화
semanage boolean -l | grep httpd_can_network_connect_db
httpd_can_network_connect_db   (off  ,  off)  Allow httpd to can network connect db

semanage boolean -m httpd_can_network_connect_db --on

semanage boolean -l | grep httpd_can_network_connect_db
httpd_can_network_connect_db   (on   ,   on)  Allow httpd to can network connect db

NFS


 

 

/content1에서 작업

info.php 파일 생성

echo "<?php phpinfo(); ?>" > /content1/info.php

 

웹 브라우저에서 접속 확인

http://192.168.56.10/info.php

 

 

db.php 파일 생성

vi /content1/db.php

<?php
$conn = mysqli_connect('10.0.2.10','remote','123','examdb');

$sql = "SELECT * FROM test_tab";

$result = mysqli_query($conn,$sql);
  while($row = mysqli_fetch_array($result)){
    echo $row['id'].''.$row['name'].'<br>';
  }
?>

 

 

웹 브라우저에서 접속 확인

http://192.168.56.10/info.php

 

728x90

+ Recent posts