프로젝트 방향 수정
강사님에게 이전 글에 작성했던 프로젝트의 구조에 대한 피드백을 바탕으로 다음과 같이 전체 구조를 변경하였다.
추가된 부분은 다음과 같다.
- DataBase Server 구축 - MariaDB 10.4
- DataBase 간 Relication을 구축하여 데이터베이스 이중화
- httpd 대신 wordpress를 통해 웹 서비스 제공
전체적인 구조는 아래와 같다.
우선 금일 수행할 작업은 기본 구조를 다시 설정하고, WPM 설치와 LB 구성을 실시해본다.
WPM 설치 전 구성하기
우선적으로 DB1과 DB2의 구성은 다른 가상머신들과 동일하게 구축하였다. - Key-Pair를 통한 SSH 접속 가능하도록 구성했다.
[root@ansiblehost ~]# tail -11 /etc/ansible/hosts
[webservers]
192.168.2.101
192.168.2.102
192.168.2.103
[lb]
192.168.2.200
[dbservers]
192.168.2.201
192.168.2.202
[root@ansiblehost ~]# ansible dbservers -m ping
192.168.2.202 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.2.201 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
이제 DataBase로의 접속을 위해 추가한 Isolated Network 구성을 VM1 ~ 3에게 적용해줘야한다. - 네트워크 인터페이스 추가!
[root@vm1 network-scripts]# ip a | grep 192.168.3.
inet 192.168.3.101/24 brd 192.168.3.255 scope global noprefixroute ens35
VM1 ~ VM3 사이에 DB1, DB2와 통신할 네트워크를 구성했다.
1. /etc/sysconfig/network-scripts/ifcfg-ens35를 구성하여 추가 => 실패
2. 가상머신 설정에서 자체적으로 Host-Only Network Adaptor를 하나 추가한 후 ifcfg-ens35 구성 => 성공
SELinux를 일시적으로 비활성화 & NetworkManager를 Stop 해도 network.service의 재시작에 오류가 발생하여서 최종적으로 2. 방법을 사용하여 추가적인 IP 할당을 완료하였다.
추가적으로 모든 가상머신에 wget, curl, vim을 설치하고 vi 대신 vim을 사용하는 구성을 적용한다.
또한 방화벽과 SELinux를 disable하고 NetworkManager 또한 disable을 수행해준다.
[root@ansiblehost MGMT]# ansible all -m shell -a "yum -y install wget curl vim && systemctl stop firewalld && systemctl disable firewalld && systemctl stop NetworkManager && systemctl disable NetworkManager"
[root@ansiblehost MGMT]# ansible all -m shell -a "echo \"alias vi='vim'\" >> ~/.bashrc" ## vim alias 적용
[root@ansiblehost MGMT]# ansible all -m shell -a "setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUS=disabled/' /etc/selinux/config" ## SELinux 비활성화
WPM 설치 구성하기
WPM는 CentOS7에서 자주 설치되는 WordPress & PHP & MariaDB의 줄임말이다.
WordPress를 정상적으로 사용하기 위해선 PHP와 MariaDB의 구성을 추가적으로 수행해주어야 하는데, 이를 위한 준비를 미리 수행해본다.
WPM를 설치하기 위한 과정을 2가지로 구분한다.
- WordPress 설치 및 PHP 설치 및 구성
- MariaDB 설치 및 구성
MariaDB 10.4 설치하기
DB1과 DB2에 Replication을 적용하기 전에 우선적으로 WPM 동작을 수행시키기 위해 MariaDB 10.4를 설치하고 WordPress를 위해 사용하는 계정을 별도로 지정해주자.
데이터베이스 명은 wpDB, 사용자명은 wpUser, 비밀번호는 test123로 설정하여 wpDB에만 권한을 부여받도록 설정한다.
[root@ansiblehost MGMT]# cat install_DB.sh
#!/bin/bash
echo "==================데이터베이스 설치 시작========================"
sudo tee /etc/yum.repos.d/MariaDB.repo << EOF
[Mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF
sudo yum -y install MariaDB
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo mysqladmin -u root password 'test123';
sudo mysql -h localhost -u root -ptest123 -e 'create database wpDB'
sudo mysql -h localhost -u root -ptest123 -e "grant all privileges on wpDB.* to wpUser@'192.168.3.%' identified by 'test123'"
sudo mysql -h localhost -u root -ptest123 -e "FLUSH PRIVILEGES"
echo "==================데이터베이스 설치 완료========================"
WordPress 및 PHP 설치하기
WordPress는 아래의 경로로 wget 패키지를 사용하여 다운로드 및 압축을 해제하여 기본 설정을 완료할 것이다.
PHP는 CentOS7 버전에서 YUM을 통해 설치하면 WordPress가 요구하는 버전에 못미쳐서 정상적으로 동작하지 않기 때문에 저장소를 명시하여 PHP 또한 설치한다.
[root@ansiblehost MGMT]# cat install_WP.sh
#!/bin/bash
echo "==================PHP 7.4 설치 시작========================"
sudo yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum -y install epel-release yum-utils
sudo yum-config-manager --enable remi-php74
sudo yum -y install php php-mysql php-gd
echo "==================PHP 7.4 설치 완료========================"
echo "==================WordPress 설치 시작========================"
mkdir /tempo
sudo wget https://ko.wordpress.org/wordpress-6.0.2-ko_KR.tar.gz -P /tempo/
sudo tar xfz /tempo/word* -C /tempo/
sudo mv /tempo/wordpress /var/www/html/
sudo chmod 707 /var/www/html/wordpress
sudo chown -R apache.apache /var/www/html/wordpress
echo "==================WordPress 설치 완료========================"
echo "==================WordPress 구성 시작========================"
sudo cp /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php
sudo sed -i "s/database_name_here/wpDB/g" /var/www/html/wordpress/wp-config.php
sudo sed -i "s/username_here/wpUser/g" /var/www/html/wordpress/wp-config.php
sudo sed -i "s/password_here/test123/g" /var/www/html/wordpress/wp-config.php
sudo sed -i "s/localhost/192.168.3.201/g" /var/www/html/wordpress/wp-config.php
sudo sed -i "s/\/var\/www\/html/\/var\/www\/html\/wordpress/g" /etc/httpd/conf/httpd.conf
sudo sed -i 's/AllowOverride None/AllowOverride All/g' /etc/httpd/conf/httpd.conf
echo "==================WordPress 구성 완료========================"
sudo systemctl restart httpd
sudo rm -rf /tempo
이는 위에서 설정한 MariaDB 10.4 버전과 wpDB, wpUser가 존재할 경우 정상적으로 동작한다.
아직 DB Replication을 사용하는 구조는 적용하지 못하였으므로 이에 대해서는 아직 생략한다.
L4 로드밸런서 구성하기
이번 프로젝트에서는 HAProxy를 통해서 L4 구성을 적용하여서 VM1 ~ VM3 에게 로드 밸런싱을 수행하는 구조를 작성한다.
이를 위한 패키지 설치 등은 특별히 필요하지 않고, 바로 작성해본다.
[root@ansiblehost MGMT]# cat install_LB.sh
#!/bin/bash
sudo yum -y install haproxy
sudo systemctl enable haproxy
sudo cat /tmp/LB/L4-config > /etc/haproxy/haproxy.cfg
sudo systemctl restart haproxy
[root@ansiblehost MGMT]# cat L4-config
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5s
timeout client 1m
timeout server 1m
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance roundrobin
server server_name1 192.168.1.101:80 check
server server_name2 192.168.1.102:80 check
server server_name3 192.168.1.103:80 check
이렇게 L4 로드밸런서 구성을 위한 스크립트는 준비되었다.
LB 및 WPM 배포 자동화 스크립트 작성
현재 AnsibleHost의 /root/MGMT 디렉토리의 구성은 다음과 같다.
[root@ansiblehost MGMT]# ls
0619.sh AH.pem install_DB.sh install_WP.sh LB
echo "-----------------DB 설치---------------------"
ansible dbservers -m copy -a "src=install_DB.sh dest=/tmp/"
ansible dbservers -m shell -a "chmod +x /tmp/install_DB.sh && /tmp/install_DB.sh"
echo "-----------------DB 완료---------------------"
echo "-----------------VMS 설치---------------------"
ansible webservers -m copy -a "src=install_WP.sh dest=/tmp/"
ansible webservers -m shell -a "chmod +x /tmp/install_WP.sh && /tmp/install_WP.sh"
echo "-----------------VMS 완료---------------------"
echo "-----------------LB 설치---------------------"
ansible lb -m copy -a "src=./LB/ dest=/tmp/LB"
ansible lb -m shell -a "chmod 700 /tmp/LB/* && /tmp/LB/install_LB.sh"
echo "-----------------LB 완료---------------------"
다음과 같이 스크립트를 작성하고 실행시켜 모든 가상머신에 패키지 설치 및 구성이 정상적으로 반영하는지 확인해보자!
.
이를 검증하기 위해선 아래를 확인해보면 된다.
- LB의 주소로 접속 했을 때 WordPress 화면 제공
- LB의 주소 /haproxy?stats에 접속했을 때 R-R 로드밸런싱 확인
- DB1, DB2에서 wpDB 및 wpUser 확인
모두 정상적으로 동작함을 확인할 수 있다!
현재까지 진행사항은 다음과 같다.
남은 작업
- DataBase Replication 및 WordPress에 해당 사항 적용
- Node-Export와 Prometheus 자동 구성
'Infra > Linux' 카테고리의 다른 글
도커 없이 컨테이너 만들기 - 2 (3) | 2023.11.18 |
---|---|
도커 없이 컨테이너 만들기 - 1 (0) | 2023.11.17 |
Docker Swarm Cluster 환경에서 Fast-API & MongoDB 연결 - Docker Compose & Secret 사용 (0) | 2023.08.06 |
종강 기념 프로젝트 Step 3 - WPM 자동화 프로젝트 - Prometheus & Grafana 설치 및 DB Replication 설정 자동화(CentOS7) (7) | 2023.06.25 |
종강 기념 프로젝트 Step 1 - WPM 자동화 프로젝트 - 고안 & 최초 환경 구성(CentOS7) (0) | 2023.06.18 |