본문 바로가기

KOSA 클라우드 솔루션즈 아키텍트 양성과정

[4.28] HAproxy구성 - WordPress를 활용하여

1. index.html 파일 수정

우분투에서 html파일 경로 찾기

# html 루트폴더는 html이 위치해 있는 폴더

# html 루트폴더 : CentOS는 HTTPD(APACHE) /var/www/html/

# html 루트폴더 :Ubuntu Nginx는 /var/www/html/index.html

# html 루트폴더(도커에서): Ubuntu Nginx는 /usr/share/nginx/html 

 

그림의 경로는 도커에서 html루트 경로이므로 다른 경로 사용

* 수정 전에는 습관적으로 backup파일 만들어 놓기

 

IIS의 root index파일이 위치한 경로

 

HAproxy 테스트용으로 윈도우 서버에 index.html 파일 만들기

* index.html 파일을 만듦

* <h1>WEB03</h1> 입력 후 ctrl+s 눌러서 저장

 

 

파일 형식 표시하기

* 파일 형식을 표시하기 위해 좌측 상단의 view에서 file extension 체크박스 체크

* index.html.txt에서 txt를 지워서 온전한 html파일로 만들어주기


2. nat에서 HAproxy 설정

haproxy 설정파일에서 쿠키 이름 설정 전

*sticky session(고정세션) : cookie설정을 통해 특정 시간만큼만 해당 호스트네임(web01, web02...)을 이용한 주소에 접속할 수 있다 

* cookie에 시간을 넣어서 사용자에게 주면, 사용자는 항상 cookie를 가지고 온다.

* 해당 시간만큼 cookie check되어 있는 서버를 이용할 수 있음

* 가령, web01서버에 10초간 접속해 있었다면, 새로고침 했을 때 web02로 바뀌고 다시 10초간 있어야 다른 서버로 새로고침을 통해 바꿀 수 있다.

* 하지만, 지금은 제대로 작동 X(web01에서 web02로 바뀌었는데 다시 새로고침하면 바로 web01로 돌아감)

 

* defaults에 L7기능을 하려면 http를 L4기능을 하려면 tcp를 넣어준다.(L7은 L4의 기능을 포함하기에 L7 사용하면 된다.)

 

haproxy설정파일에서 쿠키 이름 지어주기

* 접속하려는 포인트가 frontend임

* bind *:80에서 *는 anywhere라는 의미로 80포트에 어디서든지 접근할 수 있다는 뜻

* frontend 다음에 http-in을 지우고 원하는 이름 아무거나 넣어도 됨

* backend 다음에 backend-servers도 지우고 아무 이름이나 넣어도 됨

* default_backend 명령어 뒤의 backend_servers(그룹명)는 frontend의 80번 포트로 접근하면 backend_servers(backend에 정의된 이름)로 연결해달라는 뜻

* roundrobin알고리즘으로 하단 세 개 서버에 순차적으로 접속할 수 있게끔 세팅되어 있음

* 세션을 고정 안 하고 roundrobin 방식만 설정되어 있으면, 세션이 계속 바뀌기 때문에 로그인 같은 것을 하기 어려워서 고정세션을 사용하여, 하나의 서버에 일정 시간동안은 머무르도록 해야 한다.(고정세션을 설정하는 이유로 일반적으로 하루 이상의 cookie 시간을 줌)

* w1, w2, w3와 같이 쿠키의 이름을 정의해주고, 해당 이름으로 구운 쿠키를 클라이언트한테 주어야 새로 고침했을 때 이전 세션으로 돌아가는 문제가 발생하지 않는다.

* systemctl restart haproxy로 설정파일 만지면 다시 시작 해주어야 함

* systemctl status haproxy로 애러 없이 잘 돌아가고 있는지 확인


3. DB에 SAMBA설치

 

SAMBA 설치 후 공유폴더 권한 설정 및 kosa사용자 생성

 

kosa유저를 samba에서 사용할 수 있도록 설정

* 리눅스에서 kosa 사용자를 생성하고, 해당 유저를 samba에서 이용할 수 있도록 samba에서 이용하는 passwd설정

 

vi /etc/samba/smb.conf로 samba 설정파일 접속

* 777권한을 줘서 kosa에서도 rwx 전부 가능하게 함

 

smb와 nmb를 동시에 start하고 enable함

* smb와 nmb를 실행시킨 후 systemctl status smb nmb를 통해 active되어 있는지 확인

 

 

samba를 방화벽 서비스 항목에 추가

*  서비스 추가 시 랜카드가 하나라면 --zone=~~ 으로 zone설정 안 해도 됨(자동으로 public에 추가)

 

share폴더 생성

* web03(win2012)에서 돋보기 모양 검색창 -> \\db.skk.shop

 

 

 

 

wordpress 다운로드 후 samba의 share폴더에 복사

 

db서버에서 wordpress zip파일 확인

* wordpress zip파일이 잘 복사됨


**클라우드 3대 스토리지**

- Block storage : OS설치; APP설치; AWS의 EBS(Elastic Block Stroe)

 

- File storage : mount 후 네트워크를 통한 폴더(파일)공유;  AWS의 EFS(Elastic File Storage)

 

- Object storage : Webshare와 같은 느낌으로 url을 통한 파일 공유; url을 통한 파일공유는 http서버의 의미를 내포; AWS의 S3(Simple Storage Service)

 


4. DB에 NFS서버설치

* yum install -y nfs-utils : nfs서버 설치

* mkdir /share && cd $_ : share폴더를 만들면서 동시에 share폴더로 들어감

 

samba의 share폴더에 있는 wordpress zip파일을 복사해서 가져옴

* 명령어 맨 마지막에 (.)을 찍은 것은 현재 폴더에 복사하겠다는 의미

 

exports 폴더

* /share */24(rw,sync) 를 통해 어디서든지 share폴더에 접근 가능하게 설정(실무에서는 *말고 특정 ip지정해서 보안성 확보)

* (rw, sync) 같이 띄어쓰기 하면 애러발생

 

firewall에 서비스 추가 이후 firewall-cmd --reload해줘야 함

* nfs, rpc-bind, mountd를 서비스 항목에 추가

* 서비스이름으로 포트 번호를 오픈하는 것

* 퍼블릭클라우드에서는 nfs만 추가해주면 됨


5. nat, web01, web02에 nfs클라이언트 설정

 

* rpm -qa | grep nfs-utils : nfs-utils가 이미 설치되어 있는지 확인

* yum install -y nfs-utils : nfs-utils 설치

현재 db서버가 mount될 수 있는 상태인지 다른 호스트에서 확인
share폴더를 만든 후 share폴더가 mount되어 있는지 확인

 

* 아직 마운트가 안 되어 있는 것을 확인할 수 있음

mount해주기

* 앞의 /share는 db서버에 설정해준 nfs의 share 폴더

* 뒤의 /root/share는 nat에서 설정해 준 share 폴더

* 두 개의 폴더가 마운트됨

 

마운트를 마감

 

** 다른 클라이언트 서버도 nat와 동일하게 설치(web02는 Ubuntu라서 다름)

 

5.1 web02(Ubuntu)에서 nfs클라이언트 설치

* sudo apt-get update

* sudo apt-get install -y nfs-common

* mkdir share (현재 위치가 일반 사용자 자신의 것이기 때문에 sudo를 붙이지 않아도 된다.)

mount방식은 CentOS와 동일하고 경로만 다름

* sudo cp /etc/fstab /etc/fstab.bak : vi창에서 수정 전에 백업해줌

 

sudo vi /etc/fstab으로 들어가서 마지막 줄 추가

 

5.2 web03(WIN2012)에 nfs설치

Turn Windows features on or off로 들어가기
Next누르다가 Features에서 Client for NFS 체크

* Client for NFS 체크 후 넘어가서 install

 

cmd창에서 마운트

* Z는 C드라이브처럼 만들어주는 것

 

Newwork locations에 Z가 생성


server manager에 들어가서 IIS

* manage는 이미 설치가 되어 있는 것

* tools는 새로 사용하려는 것

view -> Internet Information Services(IIS)Manager 접속

* 이후 web platform installer 로 설치

 

PHP 7.4.13 을 Add해주기

* PHP7.4.13 Add해준 후 하단의 install 활성화 되면 install해주기

 


6. 최신버전(PHP 7.4)WordPress 설치(web01)

 

# yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# yum -y install epel-release yum-utils
# yum-config-manager --enable remi-php74
# yum install -y httpd php php-mysql php-gd php-mbstring wget unzip
# cd /var/www/html
# unzip /root/share/wordpress-5.9.3-ko_KR.zip
# mv wordpress/* .
# chown -R apache:apache /var/www/*
# systemctl restart httpd

# php -v : 버전이 7.4.29로 나와야 함

 

* 위의 과정 설치 이후 nat.skk.shop하면 wordpress접속됨

 

6.1 web03(WIN2012)에서 워드프레스 실행

 

wp-config.php파일을 wwwroot에 복사

* web01에서 cp wp-config.php /root/share 를 통해 share폴더에 wp-config파일 넣음

* wp-config.php파일을 윈도우 share폴더에서 wwwroot폴더에 복사

* 워드프레스 실행(nat.skk.shop)


7. web2(Ubuntu18)에 워드프레스 설치

 

$ sudo apt update && sudo apt upgrade -y
$ sudo apt install -y nginx
$ sudo apt install -y php7.2 php7.2-mysql php7.2-mbstring php7.2-gd wget unzip
$ sudo apt install -y php7.2 php7.2-cli php7.2-fpm php7.2-mysql php7.2-json php7.2-opcache php7.2-mbstring php7.2-xml php7.2-gd php7.2-curl
$ sudo mkdir -p /var/www/html/wordpress/public_html
$ cd /etc/nginx/sites-available
$ sudo vi wordpress.conf
server {
            listen 80;
            root /var/www/html/wordpress/public_html;
            index index.php index.html;
            server_name nat.skk.shop;

    access_log /var/log/nginx/SUBDOMAIN.access.log;
         error_log /var/log/nginx/SUBDOMAIN.error.log;

            location / {
                         try_files $uri $uri/ =404;
            }

            location ~ \.php$ {
                         include snippets/fastcgi-php.conf;
                         fastcgi_pass unix:/run/php/php7.2-fpm.sock;
            }
            
            location ~ /\.ht {
                         deny all;
            }

            location = /favicon.ico {
                         log_not_found off;
                         access_log off;
            }

            location = /robots.txt {
                         allow all;
                         log_not_found off;
                         access_log off;
           }
       
            location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                         expires max;
                         log_not_found off;
           }
}
$ sudo nginx -t
$ cd /etc/nginx/sites-enabled
$ sudo ln -s ../sites-available/wordpress.conf .   (sites-available경로에 있던 wordpress.conf파일을 심볼릭 링크)
$ sudo systemctl reload nginx
$ cd /var/www/html/wordpress/public_html
$ sudo wget https://ko.wordpress.org/latest-ko_KR.zip
$ sudo unzip latest-ko_KR.zip
$ sudo mv wordpress/* .
$ cd /var/www/html/wordpress/public_html
$ sudo chown -R www-data:www-data *  앞의 www-data가 사용자명 뒤의 www-data가 그룹명
$ sudo chmod -R 755 *

 

심볼릭 링크
conf파일에서 cd /var/www/html에서 /var/www/html/wordpress/public_html/로 경로 변경했으니 이동

 


8. 애러..

web02 우분투에서 wordpress에 접속하려고 하면 DB와의 연결이 되지 않았다는 오류 발생

-> web02에서 vi /etc/resolv.conf 확인해보니 nameserver항목에 ip를 제대로 못 받았음

-> web02에 apt install resolvconf 설치

-> vi /etc/resolvconf/resolv.conf.d/head 접속

-> nameserver 10.0.13.1로 라우터 IP지정

-> sudo systemd-resolve --statistics를 통해 확인해 보면 DNS캐시가 지워져 있음

-> 캐시가 지워지면서 초기화가 안 되게 되는 원리인지.. 나중에 확인해보기

-> /etc/resolv.conf에 dns의 IP를 넣어 준 후 계속해서 dns를 restart하면 캐시가 지워지면서 된다고 함.