HAProxy + WordPress + MySQL

mjtwinsbbc·2024년 10월 21일
post-thumbnail

HAProxy + WordPress + MySQL


시스템 구성도

초기 세팅

윈도우의 네트워크 VMnet8 속성의 IP 주소 설정을 위와 같이 해주었다.


우선 실습에 앞서 Rocky9의 SELinux 설정을 enforcing에서 disabled 상태로 변경할 것이다.

/etc/sysconfig/selinux 파일에서 확인할 수 있다. 그리고 reboot 해준다.


Rocky9-1부터 Rocky9-4까지 IP 설정을 해줄 것이다. IP(nat), Gateway, DNS servers에 각각 입력해준 뒤 형광펜으로 표시해둔
1. IPv4 Configuration - [ Manual ]
2. Require IPv4 addressing for this connection
두 가지 설정을 꼭 확인해 주어야 한다. ( Manual로 설정해주지 않아 계속 Activate 상태로 바뀌고, 제대로 작동되지 않아 어려움을 겪었다. ) 그리고 Deactivate -> Activate -> Deactivate 설정을 해주어 활성화시킨다.

이 상태에서 가상머신을 Clone하여 만들어둔 Rocky9을 복사하고 나머지 Rocky9의 IP도 세팅해준다.

hostnamectl set-hostname rocky9-N

호스트명까지 변경하면 초기세팅은 끝이다.


WordPress


https://ko.wordpress.org/download/releases/#branch-58
이 사이트에 접속해서 워드프레스 5.8.8 버전의 링크 주소를 복사한다.
( https://ko.wordpress.org/wordpress-5.8.8-ko_KR.tar.gz )

[root@rocky9-2 ~]# dnf install -y wget tar httpd

[root@rocky9-2 ~]# wget https://ko.wordpress.org/wordpress-5.8.8-ko_KR.tar.gz

[root@rocky9-2 ~]# tar -xvf wordpress-5.8.8-ko_KR.tar.gz

[root@rocky9-2 ~]# cp -ar wordpress/* /var/www/html

wget, tar, httpd를 다운로드하고 위에서 복사한 링크 주소를 붙여 넣어 wordpress를 tar.gz 파일을 다운 받는다. 압축을 해제하고 wordpress 폴더 전체를 /var/www/html 폴더로 복사한다.

[root@rocky9-2 ~]# vi /etc/httpd/conf/httpd.conf

httpd.conf 파일에 들어가 index.html을 index.php로 변경하고 저장한다.

워드프레스 설정을 해주었다면 그 다음은 방화벽 설정을 해주어야 한다.

[root@rocky9-2 ~]# firewall-cmd —list-all

[root@rocky9-2 ~]# firewall-cmd —permanent —add-port=80/tcp

[root@rocky9-2 ~]# firewall-cmd —reload


방화벽 설정 목록을 확인하고 80번 포트 설정을 추가해준다.(80/tcp) 그리고 reload를 꼭 해주어야 한다. 다시 목록을 확인하면 80/tcp 포트 설정이 잘 추가된 것을 확인할 수 있다.

add-port 명령어를 사용하면 방화벽 규칙이 즉시 적용되어 reload 해주지 않아도 되지만, 시스템을 재부팅하면 해당 규칙이 사라진다. 반면에 permanent 옵션을 사용하면 규칙이 영구적으로 저장되므로 시스템을 재부팅해도 사라지지 않지만, 적용 후에는 reload 명령어를 통해 규칙을 다시 로드해야 한다.


Rocky9-2 서버 IP주소(10.0.0.12)로 접속해 보면 php 오류 페이지가 뜬다.

[root@rocky9-2 ~]# dnf install -y php php-cli php-common php-mysqlnd php-gd php-curl

php를 설치하고 다시 접속해 보면 10.0.0.12에 워드프레스 화면이 뜨는 것을 확인할 수 있다.

두 명령은 같은 명령어로, 아래와 같이 작성하면 경로를 줄여 짧게 작성 가능하다. /var/www/html/wp-config-sample.php를 /var/www/html/wp-config.php에 복사해준다.

다시 10.0.0.12에 접속해 보면 현재 DB가 없기 때문에 오류가 난다. 이제 Rocky9-4로 가서 DB 설정을 해줄 것이다.

MySQL

[root@rocky9-4 ~]# dnf install mysql-server

[root@rocky9-4 ~]# systemctl start mysqld

mysql-server를 다운로드하고 시작해준다.

root 계정 비밀번호가 없는 상태이기 때문에 mysql -uroot를 사용해 접속 가능하다.

비밀번호와 함께 root 사용자를 생성하고 모든 원격지에서 모든 테이블의 권한을 갖도록 권한 설정을 해준다.

'wordpress' 이름을 가진 데이터베이스를 생성한다.


Rocky9-2로 이동해서 방금 생성한 mysql 설정을 기반으로 wp-config.php 파일을 수정할 것이다.

[root@rocky9-2 ~]# vi /var/www/html/wp-config.php

방금 DB서버(Rocky9-4)에서 설정한 데이터베이스 이름, 유저 이름, 패스워드, DB 서버 IP를 각각 넣어준다.


다시 Rocky9-4로 돌아가서 방화벽 설정을 해준다.

[root@rocky9-4 ~]# firewall-cmd --permanent --add-port=3306/tcp
success

[root@rocky9-4 ~]# firewall-cmd --reload
success

--permanent 옵션을 주면 재부팅 후에도 설정이 적용되고, 설정 이후 반드시 reload해야한다. 파일로 설정하는 것, 명령어로 설정하는 것 모두 할 줄 알아야 한다.

vi /etc/firewalld/zones/public.xml에서 3306 포트를 추가해 주는 방식을 사용할 수도 있다.

MySQL의 3306번 포트 방화벽 설정을 끝내고 reload까지 완료하면 워드프레스에 접속할 수 있다. 적절하게 사이트 제목과 사용자명, 비밀번호, 이메일 주소를 입력해서 설치를 완료하면 된다.


Rocky9-3도 마찬가지로 wordpress5.8.8 세팅을 해주어야 하는데, Rocky9-2에서 작업한 history를 복사해서 스크립트 파일로 만들어 한꺼번에 실행하는 방식으로 해볼 것이다.

[root@rocky9-3 ~]# vi word.sh

==========================================
#! /bin/bash
dnf install -y wget tar httpd
wget https://ko.wordpress.org/wordpress-5.8.8-ko_KR.tar.gz
tar xvfz wordpress-5.8.8-ko_KR.tar.gz
cp -ar wordpress/* /var/www/html/
sed -i 's/DirectoryIndex index.html/DirectoryIndex index.php/g' /etc/httpd/conf/httpd.conf
dnf install -y php php-cli php-common php-mysqlnd php-gd php-curl
cp /var/www/html/{wp-config-sample.php,wp-config.php}
sed -i 's/database_name_here/wordpress/g' /var/www/html/wp-config.php
sed -i 's/username_here/root/g' /var/www/html/wp-config.php
sed -i 's/password_here/It12345!/g' /var/www/html/wp-config.php
sed -i 's/localhost/10.0.0.14/g' /var/www/html/wp-config.php
systemctl enable --now httpd
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

[root@rocky9-3 ~]# sh word.sh

위 내용을 작성하고 sh word.sh 명령을 통해 한꺼번에 실행하면 간단하게 워드프레스 세팅을 마칠 수 있다.

워드프레스 접속이 잘 되는 것을 확인할 수 있다.


HAProxy

nmtui

Rocky9-1 ~ Rocky9-4에 Host-only Network Adapter 2를 전부 추가하고 nmtui 명령을 입력해 172.16.0.11~14/24로 IP주소를 설정한다. 노란색으로 표시한 Require IPv4 addressing for this connection 옵션도 선택해준다.

Deactivate -> Activate -> Deactivate 설정을 통해 설정 내용을 활성화시켜준다.

새롭게 추가된 네트워크 카드와 세팅된 IP 주소를 확인할 수 있다.

dnf install -y NetworkManager-initscripts-updown

ifdown ens160

네트워크 매니저를 다운로드하고 ifdown 명령어를 통해 ens160에 해당하는 10.0.0.1n대의 네트워크 연결을 끊어준다. ( 이 설정을 해주지 않아도 HAProxy 실습은 가능하다. 다시 활성화하기 위해서는 ifup ens160 명령어를 사용해주면 된다. )


Rocky9-1에서 HAProxy 세팅을 해줄 것이다.

[root@rocky9-1~]# dnf install lynx

[root@rocky9-1~]# lynx 172.16.0.12

lynx를 다운로드하고 Rocky9-2, Rocky9-3에 접속해보면 해당 웹서버에 접속할 수 있다.

[root@rocky9-1~]# vi /etc/haproxy/haproxy.cfg

haproxy.cfg 파일에서 frontend main 부분의 포트 번호를 80으로 바꿔 주고, use_backend_static 부분을 주석처리해준다. 그리고 3, 4번째 서버는 사용하지 않을 예정이기 때문에 주석처리해준 뒤 1, 2번째 서버의 IP 주소와 포트 번호를 입력해주면 된다.

roundrobin 방식으로, HTTP 요청을 순차적으로 백엔드 서버에 분배하여 서버 간의 부하를 균등하게 나누어 웹페이지에 출력해준다.

[root@rocky9-2~]# echo ‘web1’ > /var/www/html/index.html

[root@rocky9-3~]# echo ‘web2’ > /var/www/html/index.html

각각 웹서버의 index.html 파일에 web1, web2 텍스트를 추가해 준다.

이제 HAProxy 서버인 10.0.0.11에 접속했을 때 새로고침할 때마다 웹서버 두 개의 index.html이 번갈아가며 나오는 것을 확인할 수 있다.


오류 해결

HAProxy 작업을 할 때 다 잘 세팅한 것 같았는데 웹페이지 접속이 안 되거나 웹서버의 index.html 페이지가 출력되지 않는 오류가 발생하였다. 이때 Virtual Network Editor에서 새롭게 추가해준 Host-only 네트워크 카드의 Subnet IP 부분과 DHCP 설정을 체크해제하였더니 정상적으로 출력되었다.

0개의 댓글