2019/01/15 - [Cloud/Oracle Cloud Infrastructure] - 13. OCI를 이용해서 데이터베이스 어플리케이션 아키텍쳐 구성하기 - 웹서버
3단계. 웹서버 구성
rsync 설정
rsync 설정은 rsync 데몬으로 사용할 수 도 있고, xinetd를 통해 실행할 수도 있다. 실제 리눅스 운영 환경에서는 xinetd를 많이 사용하므로 이번 테스트에서는 xinetd를 이용해서 설정해 본다. 웹서버#1을 rsync 서버로, 웹서버#2가 rsync 클라이언트로 설정하여, 웹서버#2에서 웹서버#1의 컨텐츠를 rsync로 끌어오는 방식으로 구성해 볼 것이다.
먼저 rysnc와 xinetd가 설치되어 있는 지 확인한다. rysnc는 설치되어 있으나, xinetd는 추가 설치가 필요하다. YUM으로 xinetd를 설치한다. 혹시 rsync가 설치되어 있지 않다면, rsync로 YUM으로 설치한다.
[opc@web1 ~]$ rpm -qa | grep rsync rsync-3.1.2-4.el7.x86_64 [opc@web1 ~]$ rpm -qa | grep xinetd [opc@web1 ~]$ sudo yum install xinetd -y Loaded plugins: langpacks, ulninfo ksplice-uptrack | 951 B 00:00:00 ol7_UEKR5 | 1.2 kB 00:00:00 : : : Installed: xinetd.x86_64 2:2.3.15-13.el7
Complete! |
rsync 데몬이 정상 작동하는 지 테스트해 본다. 비어 있는 파일을 하나 만들어서 로컬에 파일을 복제해 본다.
[opc@web1 ~]$ touch 1.txt [opc@web1 ~]$ rsync -azvh 1.txt 2.txt sending incremental file list 1.txt
sent 94 bytes received 35 bytes 258.00 bytes/sec total size is 0 speedup is 0.00 [opc@web1 ~]$ ls 1.txt 2.txt |
rsync가 로컬에서 정상 작동하는 것을 확인했으니, 웹서버#2에서 웹서버#1로 rsync 파일을 끌어오는 것을 수행해 본다. 여기서부터 테스트는 권한 관련 이슈를 피하고, 설명을 단순화하기 위해 root 유저로 실행한다.
xinetd를 통해 rsync를 사용할 것이므로 웹서버#1에서 아래와 같은 내용으로 “/etc/xinetd.d/rsync” 설정 파일을 만들었다. disable 옵션을 “no”로 하는 것에 유의한다.
[opc@web1 ~]$ sudo su [root@web1 opc]# vi /etc/xinetd.d/rsync [root@web1 opc]# cat /etc/xinetd.d/rsync service rsync { disable = no socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID } |
rsync 자체의 설정 파일도 웹서버#1에 “/etc/rsyncd.conf”으로 만든다. 테스트에서는 “websync” 라는 서비스 이름을 사용했고, host allow 옵션에서 rsync 클라이언트가 될 웹서버#2의 IP 주소를 입력했다.
[root@web1 opc]# vi /etc/rsyncd.conf [root@web1 opc]# cat /etc/rsyncd.conf [websync] path = /var/www/html uid = root gid = root use chroot = yes read only = no hosts allow = 10.0.4.2 max connections = 3 timeout = 600 |
rsync 설정을 마치고, xinetd 서비스를 재시작한다.
[root@web1 opc]# service xinetd restart Redirecting to /bin/systemctl restart xinetd.service |
rsync가 사용할 TCP, UDP 873 포트를 OS에서도 개방해 준다.
[root@web1 opc]# firewall-cmd --permanent --add-port=873/tcp success [root@web1 opc]# firewall-cmd --permanent --add-port=873/udp success [root@web1 opc]# firewall-cmd --reload success |
rsync 서버 역할을 하는 웹서버#1에서 873 포트를 개방해도 SELinux가 enforcing 상태에서 rsync가 정상 작동하지 않는 경우가 있다. 아래와 같이 SELinux를 disabled 상태로 변경해서 이를 피할 수도 있다. SELinux가 enforcing 인 상태에서 rsync를 사용하기 위해서는 SELinux 파라미터 변경이 필요하다. 상세 내용은 [참조. SELinux를 disable 시키지 않고 rsync 수행하는 방법]를 참고한다.
[root@web1 opc]# setenforce 0 [root@web1 opc]# vi /etc/sysconfig/selinux [root@web1 opc]# cat /etc/sysconfig/selinux : : : SELINUX=disabled : : : |
웹서버#1의 /var/www/html 에 만든 파일을 웹서버#2에서 정상적으로 rsync로 동기화 되는지를 확인할 차례다. 우선 웹서버#2에서 웹서버#1로 rsync 포트로 통신이 되는 지 확인한다. 여기서는 telnet으로 확인했다. 만일 설치되어 있지 않다면 YUM으로 설치한다. 웹서버#2에서 아래와 같이 확인한다.
[opc@web2 ~]$ sudo su [root@web2 opc]# telnet 10.0.3.2 873 Trying 10.0.3.2... Connected to 10.0.3.2. Escape character is '^]'. @RSYNCD: 31.0 : : : |
테스트를 위해 웹서버#1에 파일을 생성한다.
[root@web1 opc]# touch /var/www/html/rsynctest.txt [root@web1 opc]# ls -al /var/www/html/rsynctest.txt -rw-rw-r--. 1 opc opc 0 Jan 4 07:36 /var/www/html/rsynctest.txt |
웨서버#2에서 rsync를 수행한다. 전송 받을 위치에서 rsync 명령은 다음과 같은 포맷으로 이루어진다.
rsync [옵션] [전송받을 서버]::[서비스명] [저장 디렉토리]
[root@web2 opc]# ls -l /var/www/html/ total 0 [root@web2 opc]# rsync -avz 10.0.3.2::websync /var/www/html receiving incremental file list ./ rsynctest.txt
sent 50 bytes received 131 bytes 362.00 bytes/sec total size is 0 speedup is 0.00 [root@web2 opc]# ls -l /var/www/html/ total 0 -rw-rw-r--. 1 opc opc 0 Jan 4 07:36 rsynctest.txt |
웹서버#1 인스턴스 재부팅 이후에 xinetd와 rsync가 자동으로 기동되도록 systemctl 명령으로 설정한다. 웹서버#2에서도 rsync에 대해 systemctl 명령으로 설정한다.
[root@web1 opc]# systemctl enable xinetd [root@web1 opc]# systemctl enable rsyncd Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service. |
참조. SELinux를 disable 시키지 않고 rsync 수행하는 방법 오라클 리눅스 7.6에서는 SELinux에서는 기본값으로 rsync가 파일을 읽고, 쓰는 것을 차단한다. 이를 조절할 수 있는 SELinux 파라미터는 rsync_export_all_ro, rsync_full_access 등이 있다. • “rsync_export_all_ro = off”: 기본값으로 rsync가 파일을 읽는 것을 차단 • “rsync_full_access = off”: 기본값으로 rsync가 파일을 읽고, 쓰는 것을 차단
setsebool 명령으로 파일 읽기/쓰기 차단을 해제할 수 있다. 이번 테스트와 같이 웹서버#1의 파일을 읽어서 웹서버#2에서 동기화 시키는 경우, 아래와 같이 SELinux를 enforcing 상태로 변경해도, rsync_export_all_ro 파라미터를 on으로 변경하여 파일 읽기를 허용하면 정상적으로 앞서 수행했던 rsync가 작동한다.
[root@web1 opc]# setenforce 1 [root@web1 opc]# setsebool -P rsync_export_all_ro 1 [root@web1 opc]# getsebool -a | grep rsync postgresql_can_rsync --> off rsync_anon_write --> off rsync_client --> off rsync_export_all_ro --> on rsync_full_access --> off
|
rsync 설정
이제 웹서버#1의 /var/www/html 디렉토리 아래 파일들이 웹서버#2로 정기적으로 동기화되도록 crontab에 등록할 차례다. 웹서버#2에서 crontab을 열어서, rsync가 5분마다 웹서버#1의 파일을 가져와 동기화하도록 작업을 등록했다.
[opc@web1 ~]$ crontab -e */5 * * * * rsync -avz --delete 10.0.3.2::websync /var/www/html >> /tmp/rsync.log 2>&1 |
crontab에서 지정한 로그를 확인한다. 웹서버#1에서 새로 만든 파일도 정상적으로 동기화되고 있음을 확인할 수 있다.
[root@web2 opc]# tail -f /tmp/rsync.log receiving incremental file list
sent 24 bytes received 84 bytes 216.00 bytes/sec total size is 0 speedup is 0.00 : : [root@web2 opc]# ls -al /var/www/html total 8 drwxrwxr-x+ 2 root root 52 Jan 4 07:56 . drwxrwxr-x+ 4 root root 33 Jan 2 10:51 .. -rw-r--r--. 1 root root 0 Jan 4 07:56 rsynctest_2nd.txt -rw-rw-r--. 1 opc opc 0 Jan 4 07:36 rsynctest.txt |
참조. 자주 사용되는 rsync 옵션 • -a: archive mode. 아카이브 모드 전송. 권한, 속성, 심볼릭 링크 등을 그대로 전송. • -v: verbose. 전송 정보에 대한 자세한 출력 • -z: 데이커를 압축하여 전송 • -r: 하위 디렉토리까지 포함하여 전송 • --delete: 전송 보낼 위치에서 삭제된 파일은 전송 받을 위치에서도 삭제 • --progress: 전송 진행 상태를 출력
|
작성자: 정영균
OCI를 이용해서 데이터베이스 어플리케이션 아키텍쳐 구성하기 시리즈
1. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – Intro
2. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – VCN
3. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – VCN
4. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – VCN (인터넷게이트웨이)
5. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – VCN (라우트테이블)
6. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – VCN (시큐리티리스트)
7. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – VCN (서브넷)
8. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – Bastion 서버
9. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – Bastion 서버 (시큐리티 리스트)
10. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – Bastion 서버 (인스턴스)
11. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – Bastion 서버 (웹서버 연결)
12. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – Bastion 서버 (NAT 설정)
13. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – 웹서버
14. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – 웹서버 (rsync)
15. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – 웹서버 (NFS 설정)
16. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – 웹서버 (NFS 설정, 파일시스템)
17. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – 웹서버 (NFS 설정, 파일시스템마운트)
18. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – 로드밸런서
19. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – 로드밸런서 (아파치웹서버)
20. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – 로드밸런서 (로드밸런서생성)
21. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – 로드밸런서 (백엔드서버)
22. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – 로드밸런서 (리스너)
23. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – 데이터베이스
24. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – 데이터베이스 (DB 시스템)
25. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – 데이터베이스 (데이터베이스구성)
26. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – 데이터베이스 (DB 시스템연결)
27. OCI를이용해서데이터베이스어플리케이션아키텍쳐구성하기 – 데이터베이스 (DB 시스템연결)
'Cloud > Oracle Cloud Infrastructure' 카테고리의 다른 글
16. OCI를 이용해서 데이터베이스 어플리케이션 아키텍쳐 구성하기 - 웹서버 (NFS 설정, 파일시스템) (0) | 2019.01.16 |
---|---|
15. OCI를 이용해서 데이터베이스 어플리케이션 아키텍쳐 구성하기 - 웹서버 (NFS 설정) (0) | 2019.01.16 |
13. OCI를 이용해서 데이터베이스 어플리케이션 아키텍쳐 구성하기 - 웹서버 (0) | 2019.01.15 |
12. OCI를 이용해서 데이터베이스 어플리케이션 아키텍쳐 구성하기 - Bastion 서버 (NAT 설정) (0) | 2019.01.15 |
11. OCI를 이용해서 데이터베이스 어플리케이션 아키텍쳐 구성하기 - Bastion 서버 (웹서버 연결) (0) | 2019.01.15 |