[카테고리:] DB

  • MongoDB TooManyLogicalSessions 에러

    MongoDB TooManyLogicalSessions 에러

    ERROR Case
    pymongo.errors.OperationFailure: cannot add session into the cache, full error: {‘operationTime’: Timestamp(1714353661, 2), ‘ok’: 0.0, ‘errmsg’: ‘cannot add session into the cache’, ‘code’: 261, ‘codeName’: ‘TooManyLogicalSessions’, ‘$clusterTime’: {‘clusterTime’: Timestamp(1714353661, 2), ‘signature’: {‘hash’: b’\x81\xd5\x8f0[\x82\xcb{\xd8]\xd4\xba\x97\xc4\x0f+R \x88"’, ‘keyId’: 7317447343970713660}}}

    참고자료

    maxsession 관련 정보 :

    Maxsession 관련 정보의 reference

    서버세션 또는 논리적세션 명령 :

    서버세션 또는 논리적세션


    🚀 확인 Commmand

    ### 로지컬 세션 확인. (PRIMARY)
    # mongo
    mongo
    use admin
    db.auth({user:'', pwd:''})
    db.serverStatus().logicalSessionRecordCache

  • MongoDB 레플리카 셋 구축 가이드

    MongoDB 레플리카 셋 구축 가이드

    MongoDB 레플리카 셋 구축 가이드

    • 몽고디비 레플리카 셋 구축.

    ON-premise 서버 교체로 인해 몽고디비 레플리카셋 테스트의 기록

    몽고디비를 같은 버전으로 설치

    sudo vi /etc/yum.repos.d/mongodb-org-4.0.repo
    
    ---
    [mongodb-org-4.0]
    name=MongoDB Repository
    baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
    gpgcheck=1
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc

    몽고디비 4.0.28 버전 설치

    sudo yum install -y mongodb-org-4.0.28

    설치되는 것들


    • mongodb-org-server: MongoDB 서버
    • mongodb-org-mongos: MongoDB의 라우팅 서버
    • mongodb-org-shell: MongoDB 셸 도구
    • mongodb-org-tools: 백업 및 복구 도구

    🚨 몽고디비 config 파일 구성을 바꾸거나, security 관련해서 키파일을 넣어주면 systemctl 로는 몽고디비 실행 불가.

    mongod --config /etc/mongod.conf

    이 명령어로 실행해야 함

    한개의 서버에 포트를 나누어 몽고디비 2개 실행

    포트를 나누는 conf 파일을 하나 더 만든다. 기존 mongod.conf 파일을 copy => mongod02.conf로..

    • 바뀌는 부분.
    • path: /var/log/mongodb02/mongod02.log
      dbPath: /var/lib/mongo02
      pidFilePath: /var/run/mongodb/mongod02.pid
    • 디렉토리는 직접 생성해줘야 함.
    • chmod, chown 둘 다 확인해야 함. => 안그러면 오류남.
    # mongod02.conf
    
    ---
    # for documentation of all options, see:
    #   http://docs.mongodb.org/manual/reference/configuration-options/
    # where to write logging data.
    systemLog:
      destination: file
      logAppend: true
      logRotate: rename
      path: /var/log/mongodb02/mongod02.log
    # Where and how to store data.
    storage:
      dbPath: /var/lib/mongo02
      journal:
        enabled: true
    #  engine:
    #  mmapv1:
    #  wiredTiger:
    # how the process runs
    processManagement:
      fork: true  # fork and run in background
      pidFilePath: /var/run/mongodb/mongod02.pid  # location of pidfile
      timeZoneInfo: /usr/share/zoneinfo
    # network interfaces
    net:
      port: 27018
      # bindIp: 127.0.0.1  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
      bindIp: 0.0.0.0
    security:
      keyFile: /etc/mongodb.key
      authorization: enabled
    #operationProfiling:
    replication:
      replSetName: rs0
    #sharding:
    ## Enterprise-Only Options
    #auditLog:
    #snmp:
    • 실행 하려면..
    mongod --config /etc/mongod02.conf
    
    ### 설정 포트에 몽고디비 접속하려면.
    mongo --port 27018

    replica set 설정

    먼저 primary로 원하는 서버에 들어가 mongo shell 접속. mongo shell 에서,

    use admin
    -> 계정을 안만들었으면, conf 파일에서 security를 주석 처리해준 다음, mongo shell 다시 들어와 admin 계정 생성.
    만든 다음, conf 파일에서 security 주석 제거 한 다음, mongo shell 들어와서,
    rs.initiate({
      _id: "설정한 레플리카 셋 이름",
      members: [
        { _id: 0, host: "primary_host:27017" },     // Primary 노드
        { _id: 1, host: "secondary_host_1:27017" }, // Secondary 노드
        { _id: 2, host: "secondary_host_2:27017" }  // Secondary 노드
      ]
    })
    이런식으로, 코드 날리기.

    rs.status() 로 상태확인 하기

    포트는 열려 있어야 함. 포트 안열리면 통신 안됨 (27017)

  • Mongo DB | Logical Session vs 일반 Session

    Mongo DB | Logical Session vs 일반 Session

    몽고디비에서는 일반적으로 사용되는 세션과 Logical Session 두 가지 유형의 세션이 있습니다.

    일반 세션(Session):
    이전 버전의 MongoDB에서 사용되는 일반적인 세션입니다.
    클라이언트가 데이터베이스와 상호 작용할 때 일반 세션을 사용하여 트랜잭션을 관리합니다.
    클라이언트가 데이터를 변경할 때 해당 변경 사항을 확정(commit)하거나 취소(abort)할 수 있습니다.

    Logical Session (논리적 세션):
    MongoDB 4.0부터 도입된 개념으로, 클라이언트와 서버 간의 통신을 추적하는 데 사용됩니다.
    Logical Session은 트랜잭션을 실행하거나 관리하는 것이 아니라, 클라이언트와 데이터베이스 간의 일관된 상태를 유지하기 위해 사용됩니다.
    Logical Session은 일련의 연속적인 데이터베이스 작업에 대해 일관된 뷰를 제공하고, 장애 복구 시 클라이언트 상태를 복원하는 데 도움이 됩니다.
    따라서 Logical Session은 단일 트랜잭션을 관리하는 데 사용되지 않고, 클라이언트 상태를 유지하고 일관된 뷰를 제공하는 데 사용됩니다. 일반 세션은 트랜잭션 관리에 중점을 두고 있습니다.

    Session 별 최대 허용 갯수

    일반 세션(Session)의 최대 허용 갯수:
    MongoDB의 구성 파일(/etc/mongod.conf)에서 maxSession 또는 maxClientSessions와 같은 매개변수를 통해 설정할 수 있습니다.
    MongoDB의 기본 설정은 일반적으로 수천 개의 세션을 지원할 수 있도록 되어 있습니다.
    그러나 MongoDB가 실행 중인 호스트의 메모리 및 기타 자원에 따라 최대 허용 세션 수가 달라질 수 있습니다.

    Logical Session (논리적 세션)의 최대 허용 갯수:
    논리적 세션은 클라이언트와 서버 간의 통신을 추적하는 데 사용되므로, 일반적으로 매우 많은 수의 세션을 생성할 수 있습니다.
    MongoDB의 구성 파일을 통해 논리적 세션의 최대 허용 수를 직접 설정할 필요는 없습니다. 이러한 세션은 MongoDB 서버의 리소스를 직접적으로 소모하지 않으므로 일반적으로 제한되는 경우는 드물습니다.

  • pgloader를 이용한 이기종 DB 데이터 Migration

    pgloader를 이용한 이기종 DB 데이터 Migration

    환경

    MariaDB ➡️ pgloader ➡️ postgreSQL

    pgloader 서버의 Migration 세부파일 내용

    # migration_add.load
    
    LOAD DATABASE
         FROM mysql://
         INTO postgresql://
    
    WITH
        create tables,
        create indexes,
        reset sequences,
        batch rows = 1000,
        workers = 2,
        concurrency = 1,
        multiple readers per thread,
        prefetch rows = 5000,
        foreign keys
    
    EXCLUDING TABLE NAMES MATCHING # 제외 테이블
        ~/TB_/,
        ~/TB_/,
        ~/TB_/,
        ~/TB_/,
        ~/TB_/
    
    ===
    INCLUDING ONLY TABLE NAMES MATCHING # 포함 테이블
        ~/TB_/,
        ~/TB_/,
        ~/TB_/

    실행

    export SBCL_OPTIONS="--dynamic-space-size 16384" # 메모리 사이즈
    pgloader --logfile pgloader.log migration_add2.load