[Aws Ubuntu] MongoDB 설치 (tistory.com)


서버의 문제 혹은 접속이 불가능한 상황을 대응하기 위해 주 1회 mongodb 데이터를 S3로 백업할 수 있는 방법에 대해서 정리를 해보았습니다.

 

1. s3 인입 권한을 가진 계정 생성하여 Access Token 발급

1) AWS Console IAM 접속

2) 사용자 추가
3) 직접 정책 연결
4) 정책 생성 클릭
5) JSON 인입

- 삭제 권한은 제거하고 인입 권한만 부여

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
        },
        {
            "Effect": "Deny",
            "Action": "s3:DeleteObject",
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
        }
    ]
}

6) 권한 정책 창에서 정책 세로고침 후 연결

7) 보안 자격 증명 창에서 엑세스 키 발급

 

2. aws cli 설치 및 연동

# AWS CLI 설치
sudo apt update
sudo apt install awscli

# AWS CLI 구성
aws configure

3. mongodb_backup_to_s3.sh 생성

sudo vi mongodb_backup_to_s3.sh
#!/bin/bash

# MongoDB 설정
DB_NAME="chat"  # 백업할 MongoDB 데이터베이스 이름
# 백업 파일을 저장할 실제 존재하는 경로로 변경하세요
OUTPUT_DIR="/path/to/backup/folder"
MONGO_URI="mongodb://user:password@주소:port/chat?authSource=admin"

# S3 설정
S3_BUCKET="db-backup-s3"
TODAY_DATE=$(date '+%Y-%m-%d')
S3_PATH="s3://${S3_BUCKET}/app-chat-db/${TODAY_DATE}"

# 백업 디렉토리 확인 및 생성
if [ ! -d "$OUTPUT_DIR" ]; then
    mkdir -p "$OUTPUT_DIR"
fi

# MongoDB 데이터베이스의 모든 컬렉션 이름 가져오기
COLLECTIONS=$(mongosh "$MONGO_URI" --quiet --eval "db.getCollectionNames().join(' ')")

# 각 컬렉션에 대해 백업 수행
for COLLECTION_NAME in $COLLECTIONS
do
    # MongoDB에서 지정된 컬렉션 백업
    mongodump --uri="$MONGO_URI" --collection=${COLLECTION_NAME} --archive=${OUTPUT_DIR}/${COLLECTION_NAME}.gz

    # 백업된 tarball을 S3로 업로드
    aws s3 cp ${OUTPUT_DIR}/${COLLECTION_NAME}.gz ${S3_PATH}/

    # JSON 형식으로 백업 데이터를 변환
    mongoexport --uri="$MONGO_URI" --collection=${COLLECTION_NAME} --out=${OUTPUT_DIR}/${COLLECTION_NAME}.json

    # 백업된 JSON 데이터를 S3로 업로드
    aws s3 cp ${OUTPUT_DIR}/${COLLECTION_NAME}.json ${S3_PATH}/

    # (선택적) 로컬에 저장된 백업 파일 삭제
    rm ${OUTPUT_DIR}/${COLLECTION_NAME}.gz
    rm ${OUTPUT_DIR}/${COLLECTION_NAME}.json

    echo "Backup for ${COLLECTION_NAME} completed!"
done

4. 백업 테스트

./mongodb_backup_to_s3.sh

 

5. 자동 스케줄러(cron)

crontab -e
# 월요일 새벽 2시에 실행
0 2 * * 1 /path/to/script/mongodb_backup_to_s3.sh

 

Mongo DB에 유저를 생성하고 권한을 부여해보겠습니다.

먼저MongoDB 쉘에 접속을 해야합니다.

 

1. Mongo Shell 설치

sudo apt-get update
sudo apt-get install -y mongodb-org-shell

 

2. Mongo Shell 실행

mongosh

 

3. 관리자 유저 생성하는 법

# admin database 진입
use admin

# admin user 생성 및 권한 부여
db.createUser({
  user: "yourUsername",
  pwd: "yourPassword",
  roles: [{ role: "userAdminAnyDatabase", db: "admin" }]
});

 

4. 개발용 유저 생성하는 법

# 관리자로 접속
mongosh -u adminUser -p adminPassword --authenticationDatabase admin

# admin database 진입
use admin

# dev user 생성
db.createUser({
  user: "myuser",
  pwd: "mypwd",
  roles: []
});

# dev user 권한 부여
db.grantRolesToUser("myuser", [
  "readWriteAnyDatabase",
  "dbAdminAnyDatabase",
  "userAdminAnyDatabase"
])

# 접속 확인
mongodb://myuser:mypwd@{mongodb설치된url:port}

[linux] MongoDB 설치하기 (tistory.com)

 

[linux] MongoDB 설치하기

저번 시간에는 aws ec2 centos linux에 MongoDB를 설치하기 위해 드라이브 공간을 추가해보는 작업을 진행하였습니다. [linux] AWS Centos EBS Volume 추가하기 (tistory.com) [linux] AWS Centos EBS Volume 추가하기 AWS Cento

nitpick92.tistory.com

서버의 문제 혹은 접속이 불가능한 상황을 대응하기 위해 주 1회 mongodb 데이터를 S3로 백업할 수 있는 방법에 대해서 정리를 해보았습니다.

 

1. s3 인입 권한을 가진 계정 생성하여 Access Token 발급

1) AWS Console IAM 접속

2) 사용자 추가
3) 직접 정책 연결
4) 정책 생성 클릭
5) JSON 인입

- 삭제 권한은 제거하고 인입 권한만 부여

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
        },
        {
            "Effect": "Deny",
            "Action": "s3:DeleteObject",
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
        }
    ]
}

6) 권한 정책 창에서 정책 세로고침 후 연결

7) 보안 자격 증명 창에서 엑세스 키 발급

 

2. aws cli 설치 및 연동

# AWS CLI 설치
sudo yum install awscli

# AWS CLI 구성
aws configure

3. mongodb_backup_to_s3.sh 생성

nano mongodb_backup_to_s3.sh
#!/bin/bash

# MongoDB 설정
DB_NAME="your-db"             # 백업할 MongoDB 데이터베이스 이름
COLLECTION_NAME="your-collection"  # 백업할 MongoDB 컬렉션 이름
OUTPUT_DIR="/path/to/backup/folder" # 백업 파일을 저장할 경로

# S3 설정
S3_BUCKET="your-bucket"
TODAY_DATE=$(date '+%Y-%m-%d')
S3_PATH="s3://${S3_BUCKET}/${TODAY_DATE}" # 원하는 경로

# MongoDB에서 지정된 collection 백업
mongodump --db=${DB_NAME} --collection=${COLLECTION_NAME} --out=${OUTPUT_DIR}

# 백업된 데이터를 tarball로 압축
tar -czvf ${OUTPUT_DIR}/${COLLECTION_NAME}.tar.gz -C ${OUTPUT_DIR} ${DB_NAME}

# 백업된 tarball을 S3로 업로드
aws s3 cp ${OUTPUT_DIR}/${COLLECTION_NAME}.tar.gz ${S3_PATH}/

# JSON 형식으로 백업 데이터를 변환
mongoexport --db=${DB_NAME} --collection=${COLLECTION_NAME} --out=${OUTPUT_DIR}/${COLLECTION_NAME}.json

# 백업된 JSON 데이터를 S3로 업로드
aws s3 cp ${OUTPUT_DIR}/${COLLECTION_NAME}.json ${S3_PATH}/

# (선택적) 로컬에 저장된 백업 파일 및 tarball, json 삭제
rm -rf ${OUTPUT_DIR}/${DB_NAME}
rm ${OUTPUT_DIR}/${COLLECTION_NAME}.tar.gz
rm ${OUTPUT_DIR}/${COLLECTION_NAME}.json

echo "Backup for ${COLLECTION_NAME} completed!"

4. 백업 테스트

./mongodb_backup_to_s3.sh

 

5. 자동 스케줄러(cron)

crontab -e
# 월요일 새벽 2시에 실행
0 2 * * 1 /path/to/script/mongodb_backup_to_s3.sh

 

'Server > AWS' 카테고리의 다른 글

[CentOS] Aws CloudWatch Memory 및 용량 확인  (0) 2023.04.13
[Windows] Aws CloudWatch Memory 및 용량 확인  (0) 2023.04.12
AWS Global Accelerator란?  (0) 2023.03.24

저번 시간에는 aws ec2 centos linux에 MongoDB를 설치하기 위해

드라이브 공간을 추가해보는 작업을 진행하였습니다.
[linux] AWS Centos EBS Volume 추가하기 (tistory.com)

 

[linux] AWS Centos EBS Volume 추가하기

AWS Centos ec2 서버에 드라이브를 추가 세팅하여 MongoDB를 설치해보려고 합니다. 이에 앞서 EBS Volumn을 추가해보려고 합니다. 1. EBS 볼륨 생성 볼륨 생성을 클릭 해줍니다. 연결 시킬 인스턴스 가용 영

nitpick92.tistory.com

 

이어서 mongodb를 설치하는 방법을 알아보겠습니다.

https://www.mongodb.com/docs/v4.4/tutorial/install-mongodb-on-amazon/ 참고 하였습니다.

 

1. MongoDB 설치

# 파일 생성 후 내용 저장
https://www.mongodb.com/docs/v4.4/tutorial/install-mongodb-on-amazon/
# 해당 텍스트 붙혀넣기 후 저장
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/amazon/2/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
# 설치 시작
sudo yum install -y mongodb-org

2. MongoDB 데이터 삽입 공간 변경

# 빈 폴더 생성
sudo mkdir -p /xvdb/mongodb/data/mongo

# 추가 된 스토리지 경로로 설치된 mongo 폴더 카피
cp -ra /var/lib/mongo /xvdb/mongodb/data/mongo

# conf파일 열기
sudo vi /etc/mongod.conf

# 추가 된 스토리지 경로로 dbPath 변경
storage:
	dbPath: /xvdb/mongodb/data/mongo

# 외부에서 접속할 수 있도록 net 변경
net:
	port: 27017
    bindIp: 0.0.0.0

# 권한 부여
sudo chown mongod:mongod /xvdb/mongodb/data/mongo

3. MongoDB 시작

# MongoDB 실행 확인 (없는 거 확인)
ps -ef | grep mongo

# 몽고 디비 실행
sudo systemctl start mongod

# 몽고 디비 상태 확인
sudo systemctl status mongod

# 접속 확인
mongo 혹은 netstat -ano | grep mongo

 

4. 서버 방화벽 오픈

linux 서버 방화벽 오픈

linux CentOS 외부 접속(방화벽 오픈) 허용 (tistory.com)

 

linux CentOS 외부 접속(방화벽 오픈) 허용

# firewalld 설치 sudo yum install firewalld # firewalld 시작 sudo systemctl start firewalld sudo systemctl enable firewalld # port 추가 sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp # firewalld 재로드 sudo firewall-cmd --reload #

nitpick92.tistory.com

aws ec2 보안 그룹 설정 > 인바운드 규칙 > 27017

5. 외부 접속 확인

 

DB Enterprise Server Download | MongoDB

접속 확인

 

+ Recent posts