태그 Archives: dnf

Oracle Linux 8 (arm64) 서버에 mariadb 10.7 설치

Oracle Cloud Infrastructure (https://www.oracle.com/kr/cloud/free/)

에서 무료로 제공 되고 있는 서버중 Ampere 를 이용한 인스턴스(VM.Standard.A1.Flex)를 확보 하게 되었다 ‘ㅅ’a (평생 무료)

2코어 12GB 램을 가지고 있어서 활용 방법을 구상 하다가 개인의 DB 서버를 구축을 해서 운용 하면 좋을것으로 판단되어서 mariadb 10.7을 설치 하고

현재 웹사이트인 www.enteroa.com 의 데이터베이스 서버로 활용을 하기로 하였다.

 

서버 확보가 쉽지 않았지만… (무료 인스턴스 제공 갯수 제한이 있어 Out of host capacity 오류로 생성이 잘 되지 않는다.)

 

먼저 서버의 시간을 지정 하고 OS 업데이트를 진행 한뒤 재부팅 및 기본 적인 설정을 한다.

 

이후 mariadb.org 에서 현재 상황에 맞게 설치를 진행 한다. (https://mariadb.org/download/?t=repo-config&d=Red+Hat+EL+8+%28ARM64%29&v=10.7&r_m=yongbok)

2022-04-27_101422

오라클 리눅스는 기본적으로 RHEL 8 의 복제판 이기 때문에 RHEL 8(ARM64)을 선택하고 RC 가 아닌 최신 10.7 버전을 선택 하였다.

 

이후 안내 되는 내용에 따라 /etc/yum.repos.d/MariaDB.repo 파일을 생성 하여 아래와 같이 입력 한다.

 

dnf 명령어를 이용하여 설치를 하고 서비스 활성화 및 데몬을 실행 시킨다.

 

AWS 의 경우 방화벽이 서버 밖에 테이블 형태로 제어 되지만 오라클 클라우드 의 경우 서버내의 firewalld 으로 제어 되기 때문에 방화벽에서 mysql 서비스를 외부 접근을 허용 한다.

 

데이터베이스 서버에 불필요한 일부 데몬(atd, gssproxy, rpcbind)을 정지 한다. (메모리 절감)

 

기본 인코딩을 설정하고 및 로깅을 위해 /etc/my.cnf.d/mysql-clients.cnf 파일을 수정 한다. (mariadb 10.7 은 기본 캐릭터셋이 utf8mb3 이다.)

수정한 설정 파일을 적용 하기 위해 mariadb 를 재시작 한다.

 

mysql 로그인을 한뒤  변경된 내용을 확인 한다.

 

불피요한 데이터 베이스인 test 를 삭제 하고 필요한 database 및 로그인 권한을 생성 한다.

 

이제 이용하면 된다 ‘ ㅅ’a

AWS 서버 발생 로그의 분리 보관 (amazon-cloudwatch-agent)

서버내 dbus -> rsyslogd 에 의해 수집된 시스템 로그는 /var/log 아래에 파일 형태로 저장 된다.

이는 /etc/logrotate.conf 설정에 따라 서버내에 보관이 된다.

 

다만 보관된 파일의 파일 형태로 저장되어 있기 때문에 구조만 알고 있다면 파일을 삭제 하거나 변조 할 수 있으므로

추후 추적을 용의 하게 하기 위해, 데이터 무결성을 보장하기 위해, 혹은 다중의 서버의 데이터를 모아서 보관 하기위해 log 콜렉팅을 하는것이 일반적인 보안 방법 이다.

 

단순한 rsyslogd 를 이용한 udp 푸시 및 graylog collecting 은 기존에 설명을 했지만

AWS 상에서는 CloudWatch Log 라는 기능을 제공 한다 이를 통해 지표 형태로 보거나 알람 설정등을 할 수 있다.

 

서버에서는 CloudWatch log 쪽으로 데이터를 넣어주는 프로그램을 설치해서 운용 하며 이후

Log 파일의 안전한 분리 보관, 보관 주기 설정, 알람 설정 등을 웹 콘솔상에서 편하게 진행할 수 있다.

 

기존에 centos 7 에서는 yum 을 이용하여 awslogs 라는 프로그램을 설치하여 같은 기능을 사용하고 있었으나

Rockylinux 8 에서는 dnf 패키지가 없는 관계로 RPM 설치를 필요로 한다.


AWS 웹콘솔 에서 IAM 메뉴의 Role (역할) 을 생성 하고 권한을 부여 한다. (중간에 권한은 지정하지 않고 생성 하고 추후 인라인 정책으로 생성 한다.)

2022-04-08_161452 2022-04-08_161613 2022-04-08_162326

 

인라인 정책을 생성 한다. (생성한 정책이 다른 계정 이나 역할에 공통으로 부여할 필요하 있으면 일반 정책 생성 후 연결 한다.)

2022-04-08_162608 2022-04-08_163101 2022-04-08_163232

위 json 정책은 ap-northeast-2 (서울) 리전에 로그 를 쌓는 기능만 허용 하는것으로 제한 하였다.

 

생성된 Role (역할) 을 필요한 EC2에 연결 한다.

2022-04-08_164417 2022-04-08_164648

 

위에서 이야기 했지만 yum(dnf) 설치가 RockyLinux 8 에서 되지 않는다. 때문에 AWS 에서 배포 하는 rpm 파일을 가지고 설치를 진행 한다. (amazon-cloudwatch-agent  설치 메뉴얼)

 

편리하게 사용하라고 대화식 명령어를 실행 하도록 되어 있다.
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

하지만 문답 형식의 영어를 읽기도 귀찮고(어렵고) Role (정책)을 부여하여 키없이 로그를 쌓게 하고자 했으나

스크립트에서는 필수적으로 Access Key/Secret Key 를 입력 해야 하는 부분이 있기 때문에 스크립트로 진행이 어렵다.

때문에 /opt/aws/amazon-cloudwatch-agent/bin/config.json 파일을 직접 수정 해 준다. (amazon-cloudwatch-agent 설정 메뉴얼)

위 예제는 apache, php, nginx 등을 dnf(yum) 설치를 한경우 일반 적인 log 포멧의 timestamp를 인식 하도록 정리한 것이다. (secure, message 로그 및 apache, nginx, php-fpm 로그)

필요에 따라 수정을 해서 사용 하도록 한다.

 

이후 다음 명령어로 설정된 config.json 을 점검 하고 문제가 없다면 자동으로 서비스가 시작된다.

 

웹 콘솔 에서 Cloudwatch > 로그 그룹에서 보관 기간 을 설정 하고 로그 데이터가 잘 적재 되고 있는지 확인 한다.

2022-04-08_1810182022-04-08_1649512022-04-08_181557