1. openssl 설치

2. openssl req -new -x509 -days 1000 -out mongodb-server.crt -keyout mongodb-server.key


[설정 내용 출력 crt,key 생성] - Key 생성

=================server===================

Country Name (2 letter code) [AU]:??

State or Province Name (full name) [Some-State]:????

Locality Name (eg, city) []:????

Organization Name (eg, company) [Internet Widgits Pty Ltd]:????

Organizational Unit Name (eg, section) []:IT

Common Name (e.g. server FQDN or YOUR name) []: 192.168.??.??

Email Address []:


3. openssl req -new -x509 -days 1000 -out mongodb-client.crt -keyout mongodb-client.key


[설정 내용 출력 crt,key 생성] - 사설 CA(Certificate Authority) 인증서 생성

=================client===================

Country Name (2 letter code) [AU]:??

State or Province Name (full name) [Some-State]:????

Locality Name (eg, city) []:????

Organization Name (eg, company) [Internet Widgits Pty Ltd]:IT

Organizational Unit Name (eg, section) []:192.168.????

Common Name (e.g. server FQDN or YOUR name) []:192.168.?????

Email Address []:



[CA.pem]

4. bash -c 'cat mongodb-client.crt mongodb-client.key' > mongodb-client.pem

[Key.pem]

4-1. bash -c 'cat mongodb-server.crt mongodb-server.key' > mongodb-server.pem

[CA인증서]

5. sudo mongod -sslMode requireSSL --sslPEMKeyFile /home/xxx/mongdo_ssl/mongodb-server.pem --dbpath /var/lib/mongodb/

[Key]

5-1. sudo mongo --ssl --sslCAFile /home/xxx/mongdo_ssl/mongodb-server.pem --sslPEMKeyFile /home/xxx/mongdo_ssl/mongodb-client.pem --sslPEMKeyPassword 123456


블로그 이미지

_B_G_

,


RePlica 란

- 하나의 DB 정보를 다른 서버와 공유 및 복제 기능

복제를 하기 위해선 세가지로 분류 된다.

PRIMARY , SECONDARY , Arbiter

PRIMARY : DB를 공유시킬 서버 (메인 역할) 

SECONDARY : 공유되는 DB를 받을 서버 (복제/백업 공간 (여러대 가능))

Arbiter : PRIMARY / SECONDARY 서버를 모니터링 해주는 역할

(끊어지는지 확인 가능)

 

RePlica 적용 방법

1. mongod.config 파일을 설정 해주어야 한다. config 파일은  Primary/Secondary

서버 두대다 설정 (replication: ReplSetName:"ABCD") 동일한 네임

설정

- 자기가 설정한 config로 실행 할때 mongod -f mongod.config 실행 해주어야함

2. Config 설정이 끝나고 난 뒤 우선 Primary 서버랑 Secondary 서버랑 서로 통신이 되는지 확인하여야 한다. 방화벽 걸리는지 등 확인,  접속 명령은 아래와 같다.

mongod localhost:27017

3. DB가 담겨져있는, 공유를 하여야 할 Primary 서버로 접근 (쉘/직접 접근 가능)

아래와 같이 예를 든다.

  • Primary : 192.168.100.100       (DB가 담겨져 있는곳)
  • Secondary : 192.168.100.101   (공유/복제 할 곳)
  • Arbiter : 192.168.100.102        (모니터링)
  • PRIMARY 서버 rs (Replication Set) 설정

    PRIMARY는 id 0 에 설정,

    SECONDARY는 id 1에 설정 SECONDARY 한대만 설정할거라 id 1번만 주었지만

    여러대 할경우 id 2,3,4 만들고 호스트네임 추가 가능

    그리고 젤 처음 id는 ReplSetName으로 설정

    $rs.initiate(
       {
          _id: "ABCD",
          version: 1,
          members: [
             { _id: 0, host : "192.168.100.100:27017" },
             { _id: 1, host : "192.168.100.101:27017" }
          ]
       }
    )

    그럼 PRIMARY 서버에서

    "> " 였던 prompt가

    "ABCD:PRIMARY > " 로 바뀌어져 있음

    4. 구성이 잘되었는지 확인 rs.status() 그럼 해당 서버 (PRIMARY/SECONDARY)

    상태가 보임 등록한 호스트 리스트들을 볼려면 rs.config() 입력

    PRIMARY 접속 후

    Robo 몽고 툴로 둘다 접속하여 PRMARY에 데이터를 만들고 SECONDARY에도 쌓이는지 확인

    SECONDARY 접속하여

    show dbs 등 명령어는 안됨 기존 mongo 자체에서 SECONDARY 서버는 변조를 막기 위해 제한 해둠 그걸 해제 하기 위해선

    rs.slaveOk() 명령어를 하여 해제하고

    show dbs

    db.collection()

    db.getcollection('테이블').find()

    시도 가능

     

     


    블로그 이미지

    _B_G_

    ,

     

    외부접속 

    $ mongo --host 127.0.0.1 --port 27017

    mongo DB 복구

    $ mongorestore --host 127.0.0.1 --port 27017 20190101/


    * 복구 전에 존재하는 컬렉션을 없애고 싶다면 --drop 옵션

    * 20190101 : 백업시 폴더 이름을 이렇게 저장 ( 복구시에도 폴더이름을 이걸로 사용하여야함)

     

    만들어져 있는 계정이 있을경우 아래와 같이 접속

    $ mongo <host:port> -u "아이디" -p "패스워드" --authenticationDatabase "admin"

    블로그 이미지

    _B_G_

    ,

    $ mongo  ## 몽고 접속


    > use admin # admin 사용자 생성 (원하는대로 호출가능)

    > db.createUser({ user: "admin", pwd: "어드민패스워드", roles: [{ role: "userAdminAnyDatabase", db: "admin (사용자 생성한 admin 입력)" }] })


    admin이라는 DB에게 userAdminAnyDatabase 라는 권한을 줌

    userAdminAnyDatabase : 모든 데이터 베이스 사용자 관리 (작성, 업데이트, 삭제)


    다음 명령으로 위의 admin DB에게 admin 사용자 생성이 되었는지 인증 하는 명령어

    > db.auth ("admin","어드민 패스워드")

    > 1 # 이라고 뜨면 성공

    >exit

    --------------------------------------

    $ vim /etc/mongd.conf #접속


    security:

    authorization: enabled # 추가

    systemctl restart mongo # 재실행


    $ mongo # 접속


    > use admin # userAdminAnyDatabase 모든 권한이 부여된 admin 데이터베이스 접속 / 접속하면 다른 사용자에게 권한 부여 및 생성 가능

    > db.auth("admin","어드민패스워드") # 인증 접속


    > use 생성하고픈 # 계정 생성 및 권한 부여 하려는 데이터베이스 이름

    > db.createUser({ user: "youruser", pwd: "yourpassword", roles: [{ role: "dbOwner", db: "생성하고픈" }] })


    dbOwner : 사용자에게 데이터베이스의 모든 컬렉션에 대한 읽기 및 쓰기 권한을 부여한다

    > db.auth("youruser","yourpassword")

    > show collections # 체크


    블로그 이미지

    _B_G_

    ,