centos7에 설치/운영되고 있는 mongoDB 5를 mongoDB 7로 업그레이드 하기 위해서는
2번의 업그레이가 필요. 
(mongoDB 7.0.26 으로 설치해도 7.0.26-1 이 설치됨: 이버전으로 업그레이드 목표)


0. 공통 사전 준비

버전/구성 파악
FCV가 "version" : "5.0" 인지 확인 (5.0.x에서 6.0으로 올릴 때 전제조건)MongoDB


mongosh --eval 'db.version()' mongosh --eval 'rs.status()' mongosh --eval 'db.adminCommand({getParameter:1, featureCompatibilityVersion:1})'


백업 필수

각 노드에서 mongodump 로 전체 백업 (tools는 CentOS 7 지원)MongoDB

mongodump --host <primary-host>:27017 --authenticationDatabase admin \ -u <user> -p<password> --out /backup/mongo_$(date +%F)


드라이버/애플리케이션 호환성 확인
사용하는 드라이버가 MongoDB 6.0, 7.0을 지원하는지 체크 (공식 드라이버 호환 테이블 참고)MongoDB
MongoDB 공식 yum repo 확인
현재 /etc/yum.repos.d/mongodb-org-5.0.repo (혹은 비슷한 이름) 있을 것.
6.0 / 7.0 업그레이드 시 이 repo 파일을 버전별로 교체하거나, baseurl의 5.0 부분을 6.0 / 7.0 으로 바꾸는 식으로 진행.
예시(6.0용 repo, CentOS 7):

[mongodb-org-6.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/6.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc

 

1단계: 5 -> 6

1단계: MongoDB 5.0.23 → 6.0.x (Replica Set 기준)

MongoDB 공식 문서에서도 5.0 → 6.0 업그레이드는 replica set의 각 멤버를 5.0에서 6.0으로 순차 업그레이드하는 방식으로 안내합니다.MongoDB+1

1-1. 세컨더리 업그레이드 (각각 순서대로)

각 세컨더리에서 아래를 한 대씩 수행합니다.

  1. 해당 노드 상태 확인
    mongosh --host <secondary-host> --eval 'rs.isMaster()' # "secondary" 인지 확인
  2. 서비스 중지
    sudo systemctl stop mongod

  3. yum repo를 6.0용으로 변경
  4. $sudo yum clean all
    $sudo yum makecache
    이게 안되면..
    (1.centOs 를 기본으로 바꾸고)
    sudo sed -i 's|mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-*.repo
    sudo sed -i 's|#baseurl=http://mirror.centos.org/centos/$releasever|baseurl=http://vault.centos.org/7.9.2009|g' /etc/yum.repos.d/CentOS-*.repo


    (2.ius 업데이트 차단)
    sudo sed -i 's/enabled *= *1/enabled=0/g' /etc/yum.repos.d/ius*.repo  후에

    sudo yum --disablerepo="*" --enablerepo="mongodb-org-6.0" makecache

    MongoDB 6.0으로 패키지 업그레이드

    $ sudo yum update -y mongodb-org-6.0.24 mongodb-org-server-6.0.24 mongodb-org-shell-6.0.24 mongodb-org-mongos-6.0.24 mongodb-org-tools-6.0.24

    안되면 

    //$sudo yum install -y mongodb-org
    # 또는
    //$ sudo yum update -y mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-mongos mongodb-org-tools

    (혹시 gpg key= 패키지 키 설치에러면)
    $ sudo rpm --import https://pgp.mongodb.com/server-6.0.asc
    후에
    $ sudo rpm -qi gpg-pubkey-64c3c388-* 로 확인

    sudo yum --disablerepo="*" --enablerepo="mongodb-org-6.0" makecache 

    ==> 있으면 다시 yum update 
    sudo yum --disablerepo="*" --enablerepo="mongodb-org-6.0" update -y mongodb-org-6.0.24 mongodb-org-server-6.0.24 mongodb-org-shell-6.0.24 mongodb-org-mongos-6.0.24 mongodb-org-tools-6.0.24

  5.  서비스 재시작 & 상태 확인
    (mongod --version 으로 확인해보고)

    sudo systemctl start mongod sudo systemctl status mongod
  6. Replica Set에서 정상 합류 확인
     
    mongosh --host <primary-host> --eval 'rs.status()'
    • 해당 노드가 SECONDARY 상태로 돌아오면 다음 세컨더리로 넘어갑니다.
    • 세컨더리 하나 업그레이드가 완전히 끝난 뒤 다음 세컨더리 진행 (동시에 하지 말 것).
  7. Primary에서:
    mongosh --host <primary-host> --eval 'rs.status()'
    해당 노드가 SECONDARY 상태로 돌아오면 다음 세컨더리로 넘어갑니다.

    세컨더리 하나 업그레이드가 완전히 끝난 뒤 다음 세컨더리 진행 (동시에 하지 말 것).
sudo sed -i 's|mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-*.repo
sudo sed -i 's|#baseurl=http://mirror.centos.org/centos/$releasever|baseurl=http://vault.centos.org/7.9.2009|g' /etc/yum.repos.d/CentOS-*.repo

1-2. Primary 업그레이드

  1. Primary를 강제로 Step Down
    • 다른 노드가 자동으로 Primary가 됩니다.
       
      mongosh --host <primary-host> rs.stepDown(60) // 60초 동안 재선출 허용
  2. 원래 Primary 노드에서 mongod 중지
    sudo systemctl stop mongod
  3. 해당 노드도 repo를 6.0용으로 변경 & 패키지 업그레이드
     
    sudo yum clean all sudo yum makecache sudo yum install -y mongodb-org
  4. 서비스 시작
    sudo systemctl start mongod
  5. Replica Set 전체 버전 확인
     
    Primary(새로 선출된 노드)에서:
mongosh
rs.status()
db.adminCommand({ getParameter: 1, featureCompatibilityVersion: 1 })
  • 모든 멤버의 mongod --version이 6.0.x 인지 확인.


1-3. FCV를 6.0으로 올리기

MongoDB는 메이저 업그레이드 시 바이너리 버전 → FCV 순서로 올리라고 합니다.MongoDB+1

  1. Primary에서 실행:
    db.adminCommand({ setFeatureCompatibilityVersion: "6.0" })
  2. 다시 확인:
    db.adminCommand({ getParameter: 1, featureCompatibilityVersion: 1 }) # "version" : "6.0" 이어야 함
  3. 애플리케이션 기능 테스트, 로그 에러 여부 확인.

 

 

2단계: MongoDB 6.0.x → 7.0.x 업그레이드

MongoDB 7.0 업그레이드 문서도 동일한 패턴(세컨더리 → Primary, FCV 설정)을 안내합니다.MongoDB+1

2-1. 사전 확인

  1. 7.0 호환성 변경 사항 검토
    • 인덱스, 제거된 옵션, 암호화 컬렉션, FCV 다운그레이드 제한 등.MongoDB+1
  2. 드라이버가 7.0 지원하는지 재확인
  3. FCV가 현재 6.0인지 확인
    db.adminCommand({ getParameter: 1, featureCompatibilityVersion: 1 })

2-2. 세컨더리부터 7.0으로 업그레이드

각 세컨더리에서 다시 한 대씩 아래 수행:

  1. 상태 확인 (SECONDARY인지)
  2. mongod 중지
    sudo systemctl stop mongod
  3. yum repo를 7.0용으로 변경
     
    [mongodb-org-7.0]
    name=MongoDB Repository
    baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/7.0/x86_64/
    gpgcheck=1
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc
  4. 패키지 업그레이드
     
    sudo yum clean all sudo yum makecache sudo yum install -y mongodb-org
  5. 서비스 시작 & 상태 확인 (rs.status()로 SECONDARY 복귀 확인)


  6. secondary 한대 추가될때마다 application 에 IP 앞쪽에 추가/뒤쪽에 삭제 해서 배포
    (단, 다른글 - add/remove글 참조)

2-3. Primary 업그레이드

  1. Primary에서 step down
     
    mongosh --host <primary-host> rs.stepDown(60)
  2. 해당 노드에서 mongod 중지 → repo 7.0으로 변경 → 패키지 업그레이드 → mongod 시작
  3. 전체 상태 점검
    rs.status() # 각 노드의 mongo --version 도 7.0.x 인지 확인

2-4. FCV를 7.0으로 올리기 (주의)

MongoDB 7.0에서는 FCV를 올린 뒤에는 다운그레이드가 훨씬 까다롭다고 명시합니다.MongoDB+1

  1. 충분히 테스트한 뒤, Primary에서:
     
    db.adminCommand({ setFeatureCompatibilityVersion: "7.0" })
  2. 확인:
     
    db.adminCommand({ getParameter: 1, featureCompatibilityVersion: 1 }) # "version" : "7.0"
  3. 모든 애플리케이션 기능/쿼리 테스트, 로그 모니터링.

3. CentOS 7에서의 현실적인 권장 사항

  • MongoDB는 RHEL/CentOS 7/8/9를 지원 리스트에 올리고 있지만MongoDB
  • CentOS 7 자체가 2024-06-30 EOL이라 보안 패치가 더 이상 안 나옵니다.
  • 운영 환경이면,
    • **새 서버(RHEL 8/9, Rocky 8/9, Alma 8/9, Amazon Linux 2023 등)**에 MongoDB 7.0 새로 설치
    • 기존 5.0.23 클러스터에서 mongodump → 새 클러스터로 mongorestore 또는
    • Replica Set을 새 서버로 확장(add member) 후, 구 서버 멤버를 하나씩 제거하는 방식으로 롤링 마이그레이션
      같은 OS 마이그레이션 + 버전 업그레이드 계획을 같이 가져가는 걸 개인적으로 가장 추천합니다.
Posted by yongary
,