Mongodb 설치 가이드

1. 문서 개요

1.1. 목적

본 문서(Mongodb 서비스팩 설치 가이드)는 전자정부표준프레임워크 기반의 PaaS-TA에서 제공되는 서비스팩인 Mongodb 서비스팩을 Bosh를 이용하여 설치 하는 방법과 PaaS-TA의 SaaS 형태로 제공하는 Application 에서 Mongodb 서비스를 사용하는 방법을 기술하였다.

1.2. 범위

설치 범위는 Mongodb 서비스팩을 검증하기 위한 기본 설치를 기준으로 작성하였다.

1.3. 시스템 구성도

본 문서의 설치된 시스템 구성도입니다. Mongodb Server, Mongodb 서비스 브로커로 최소사항을 구성하였다.
구분
스펙
PaaS-TA-mongodb-broker
1vCPU / 1GB RAM / 8GB Disk
Mongos
1vCPU / 1GB RAM / 8GB Disk
Mongo Config
1vCPU / 1GB RAM / 8GB Disk+4GB(영구적 Disk)
Mongod
1vCPU / 1GB RAM /8GB Disk+4GB(영구적 Disk)

1.4. 참고자료

2. Mongodb 서비스팩 설치

2.1. 설치전 준비사항

본 서비스팩 설치를 위해서는 먼저 BOSH CLI가 설치 되어 있어야 하고 BOSH 에 로그인 및 target 설정이 되어 있어야 한다. BOSH CLI 가 설치 되어 있지 않을 경우 먼저 BOSH 설치 가이드 문서를 참고 하여 BOSH CLI를 설치 해야 한다. PaaS-TA에서 제공하는 압축된 릴리즈 파일들을 다운받는다. (PaaS-TA-Services.zip, PaaS-TA-Deployment.zip, PaaS-TA-Sample-Apps.zip)

2.2. Mongodb 서비스 릴리즈 업로드

  • PaaS-TA-Services.zip 파일 압축을 풀고 폴더안에 있는 Mongodb 서비스 릴리즈 pasta-mongodb-shard-2.0.tgz 파일을 확인한다.
1
$ ls –all
Copied!
1
-rw-rw-r-- 1 ubuntu ubuntu 121273779 Jan 16 04:05 paasta-mongodb-shard-2.0.tgz
Copied!
  • 업로드 되어 있는 릴리즈 목록을 확인한다.
    1
    $ bosh releases
    Copied!
    1
    +--------------------+----------------+-------------+
    2
    | Name | Versions | Commit Hash |
    3
    +--------------------+----------------+-------------+
    4
    | cf-monitoring | 0+dev.1* | 00000000 |
    5
    | cflinuxfs2-rootfs | 1.40.0* | 19fe09f4+ |
    6
    | etcd | 86* | 2dfbef00+ |
    7
    | logsearch | 203.0.0+dev.1* | 00000000 |
    8
    | metrics-collector | 0+dev.1* | 00000000 |
    9
    | paasta-container | 0+dev.1* | b857e171 |
    10
    | paasta-controller | 0+dev.1* | 0f315314 |
    11
    | paasta-garden-runc | 2.0* | ea5f5d4d+ |
    12
    +--------------------+----------------+-------------+
    13
    (*) Currently deployed
    14
    (+) Uncommitted changes
    Copied!
    Mongodb 서비스 릴리즈가 업로드 되어 있지 않은 것을 확인
  • Mongodb 서비스 릴리즈를 업로드한다.
    1
    $ bosh upload release paasta-mongodb-shard-2.0.tgz
    Copied!
    ``` Uploading release paasta-mongod: 96% |oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo | 111.0MB 22.9MB/s ETA: 00:00:00 Director task 692 Started extracting release > Extracting release. Done (00:00:01)
    Started verifying manifest > Verifying manifest. Done (00:00:00)
    Started resolving package dependencies > Resolving package dependencies. Done (00:00:00)
    Started creating new packages Started creating new packages > mongodb_broker/d547d39098e73acb70d58ab2be2c18c2410dfa5b. Done (00:00:01) Started creating new packages > java7/cb28502f6e89870255182ea76e9029c7e9ec1862. Done (00:00:01) Started creating new packages > cli/24305e50a638ece2cace4ef4803746c0c9fe4bb0. Done (00:00:00) Started creating new packages > mongodb/b355ac045b257e6a0cec85874c6fb6e7abe92b6d. Done (00:00:00) Done creating new packages (00:00:02)
    Started creating new jobs Started creating new jobs > mongodb_slave/cd18c5187f44f8e3d1d2c7937047cc748a851a43. Done (00:00:00) Started creating new jobs > mongodb_broker/10da2f3c0e374b01f818b28ff5ecb8044fd0cd1a. Done (00:00:00) Started creating new jobs > mongodb_config/dcb9c707d4e9757a150f540ee5af39efb8580f04. Done (00:00:01) Started creating new jobs > mongodb_master/adfc199c9d2f3aceaf31fe56e553e15faf605ee7. Done (00:00:00) Started creating new jobs > mongodb_broker_deregistrar/d797f068e89265313436b7c6439d93288d0fafbe. Done (00:00:00) Started creating new jobs > mongodb_shard/a549bee23d326211549a2dce9def42d85b655e4d. Done (00:00:00) Started creating new jobs > mongodb_broker_registrar/a4892a7dfec7acdc7ba0cd2618a79ee3b2f80d9b. Done (00:00:00) Done creating new jobs (00:00:01)
    Started release has been created > paasta-mongodb-shard/2.0. Done (00:00:00)
Task 692 done
Started 2017-01-16 04:16:20 UTC Finished 2017-01-16 04:16:24 UTC Duration 00:00:04 paasta-mongod: 96% |oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo | 111.3MB 11.0MB/s Time: 00:00:10
Release uploaded
1
- 업로드 되어 있는 릴리즈 목록을 확인한다.
Copied!
$ bosh releases
1
Copied!
Acting as user 'admin' on 'my-bosh'
+----------------------+----------------+-------------+ | Name | Versions | Commit Hash | +----------------------+----------------+-------------+ | cf-monitoring | 0+dev.1 | 00000000 | | cflinuxfs2-rootfs | 1.40.0 | 19fe09f4+ | | etcd | 86 | 2dfbef00+ | | logsearch | 203.0.0+dev.1 | 00000000 | | metrics-collector | 0+dev.1 | 00000000 | | paasta-container | 0+dev.1 | b857e171 | | paasta-controller | 0+dev.1 | 0f315314 | | paasta-garden-runc | 2.0 | ea5f5d4d+ | | paasta-mongodb-shard | 2.0 | 85e3f01e+ | +----------------------+----------------+-------------+ () Currently deployed (+) Uncommitted changes
Releases total: 9
1
Mongodb 서비스 릴리즈가 업로드 되어 있는 것을 확인
2
3
4
5
### 2.3. Mongodb 서비스 Deployment 파일 수정 및 배포
6
7
BOSH Deployment manifest 는 components 요소 및 배포의 속성을 정의한 YAML 파일이다.
8
Deployment manifest 에는 sotfware를 설치 하기 위해서 어떤 Stemcell (OS, BOSH agent) 을 사용 할 것이며 Release (Software packages, Config templates, Scripts) 이름과 버전, VMs 용량, Jobs params 등을 정의가 되어 있다.
9
10
- PaaS-TA-Deployment.zip 파일 압축을 풀고 폴더안에 있는 vSphere 용 Mongodb Deployment 파일인 paasta-mongodb-shard-vsphere-2.0.yml 를 복사한다.
11
다운로드 받은 Deployment Yml 파일을 확인한다. (paasta-mongodb-shard-vsphere-2.0.yml)
Copied!
$ ls –all
1
![mongodb_image_03]
2
3
4
- Director UUID를 확인한다.
5
BOSH CLI가 배포에 대한 모든 작업을 허용하기 위한 현재 대상 BOSH Director의 UUID와 일치해야 한다. ‘bosh status’ CLI 을 통해서 현재 BOSH Director에 target 되어 있는 UUID를 확인할 수 있다.
Copied!
$ bosh status
1
![mongodb_image_04]
2
3
4
- Deploy시 사용할 Stemcell을 확인한다.
Copied!
$ bosh stemcells
1
![mongodb_image_05]
2
Stemcell 목록이 존재 하지 않을 경우 BOSH 설치 가이드 문서를 참고 하여 Stemcell을 업로드 해야 한다.
3
4
5
- paasta-mongodb-shard-vsphere-2.0.yml Deployment 파일을 서버 환경에 맞게 수정한다. (빨간색으로 표시된 부분 특히 주의)
Copied!
$ vi paasta-mongodb-shard-vsphere-2.0.yml
1
```yaml
2
# paasta-mongodb-shard-vsphere 설정 파일 내용
3
4
---
5
name: paasta-mongodb-shard-service # 서비스 배포이름(필수)
6
director_uuid ################## # bosh status 에서 확인한 Director UUID을 입력(필수)
7
8
release:
9
name: paasta-mongodb-shard # 서비스 릴리즈 이름(필수)
10
version: 2.0 # 서비스 릴리즈 버전(필수):latest 시 업로드된 서비스 릴리즈 최신버전
11
12
compilation: # 컴파일시 필요한 가상머신의 속성(필수)
13
cloud_properties: # 컴파일 VM을 만드는 데 필요한 IaaS의 특정 속성 (instance_type, availability_zone)
14
instance_type: monitoring # 인스턴스 타입: Flavors 타입 (필수)
15
network: default # Networks block에서 선언한 network 이름(필수)
16
reuse_compilation_vms: true # 컴파일지 VM 재사용 여부(옵션)
17
workers: 4 # 컴파일 하는 가상머신의 최대수(필수)
18
19
# this section describes how updates are handled
20
update:
21
canaries: 1 # canary 인스턴스 수(필수)
22
canary_watch_time: 30000 # canary 인스턴스가 수행하기 위한 대기 시간(필수)
23
update_watch_time: 30000 # non-canary 인스턴스가 병렬로 update 하는 최대 개수(필수)
24
max_in_flight: 4
25
networks: # 네트워크 블록에 나열된 각 서브 블록이 참조 할 수있는 작업이 네트워크 구성을 지정, 네트워크 구성은 네트워크 담당자에게 문의 하여 작성 요망
26
- name: default
27
subnets:
28
- cloud_properties:
29
net_id: b7c8c08f-2d3b-4a86-bd10-641cb6faa317
30
security_groups: [bosh]
31
dns: # DNS 정보
32
- 10.244.3.4
33
- 8.8.8.8
34
gateway: 10.244.3.1
35
range: 10.244.3.0/24 # 사용할 네트워크 범위
36
reserved: # 설치시 제외할 IP 설정
37
- 10.244.3.2 - 10.244.3.140
38
static:
39
- 10.244.3.141 - 10.244.3.170 # 사용 가능한 IP 설정
40
resource_pools: # 배포시 사용하는 resource pools를 명시하며 여러 개의 resource pools 을 사용할 경우 name 은 unique >해야함(필수)
41
- cloud_properties:
42
instance_type: monitoring
43
env:
44
bosh: #password: dhvms09!
45
password: $6$mwZOg/kA$r64mds4/xoqhW2tR8ck7oxmhqGiCBsDS5SWW/j8vgahvpdHkKJrb25/Wc2..CT3ja02qLgh0JB60RTP2ndjAh0
46
# bosh:
47
# password: $6$4gDD3aV0rdqlrKC$2axHCxGKIObs6tAmMTqYCspcdvQXh3JJcvWOY2WGb4SrdXtnCyNaWlrf3WEqvYR2MYizEGp3kMmbpwBC6jsHt0
48
name: small # 고유한 resource pool 이름
49
network: default
50
stemcell:
51
name: bosh-openstack-kvm-ubuntu-trusty-go_agent # stemcell 이름(필수)
52
version: 3309 # stemcell 버전(필수)
53
54
55
jobs:
56
- name: mongodb_slave1 # 작업 이름(필수): mongodb replica set의 slave 서버
57
template: mongodb_slave # job template 이름(필수)
58
instances: 1 # job 인스턴스 수(필수)
59
resource_pool: small # resource_pools block에 정의한 resource pool 이름(필수)
60
persistent_disk: 9000 # 영구적 디스크 사이즈 정의(옵션): 16G
61
networks: # 네트워크 구성정보
62
- name: default # Networks block에서 선언한 network 이름(필수)
63
static_ips: # 사용할 IP addresses 정의(필수)
64
- 10.244.3.142
65
properties:
66
replSetName: op1 # replicaSet1 의 이름
67
68
- name: mongodb_master1 # 작업 이름(필수): mongodb replica set의 master 서버
69
template: mongodb_master # job template 이름(필수)
70
instances: 1 # job 인스턴스 수(필수)
71
resource_pool: small # resource_pools block에 정의한 resource pool 이름(필수)
72
persistent_disk: 9000 # 영구적 디스크 사이즈 정의(옵션): 16G
73
networks: # 네트워크 구성정보
74
- name: default # Networks block에서 선언한 network 이름(필수)
75
static_ips:
76
- 10.244.3.141 # 사용할 IP addresses 정의(필수)
77
properties:
78
replSet_hosts: ["10.244.3.141","10.244.3.142"] # 첫번째 Host는 replicaSet1의 master
79
replSetName: op1 # replicaSet1 의 이름
80
81
- name: mongodb_config
82
template: mongodb_config
83
instances: 1
84
resource_pool: small
85
persistent_disk: 9000 # 영구적 디스크 사이즈 정의(옵션): 16G
86
networks:
87
- name: default
88
static_ips:
89
- 10.244.3.150
90
91
- name: mongodb_shard
92
template: mongodb_shard
93
instances: 1
94
resource_pool: small
95
persistent_disk: 9000 # 영구적 디스크 사이즈 정의(옵션): 16G
96
networks:
97
- name: default
98
static_ips:
99
- 10.244.3.170
100
properties:
101
bindIp: 0.0.0.0
102
configsvr_hosts: # mongodb_config hosts
103
- 10.244.3.150
104
105
repl_name_host_list: # mongodb_master properties
106
- op1/10.244.3.141 # replicaSet1 의 이름/host
107
# - op2/10.244.3.144 # replicaSet2 의 이름/host
108
# - op3/10.244.3.147 # replicaSet3 의 이름/host
109
110
- name: mongodb_broker # 작업 이름(필수): mongodb 서비스 브로커
111
template: mongodb_broker # job template 이름(필수)
112
instances: 1 # job 인스턴스 수(필수)
113
resource_pool: small # resource_pools block에 정의한 resource pool 이름(필수)
114
networks: # 네트워크 구성정보
115
- name: default # Networks block에서 선언한 network 이름(필수)
116
static_ips: # 사용할 IP addresses 정의(필수)
117
- 10.244.3.154
118
119
- name : mongodb_broker_registrar # 작업 이름: 서비스 브로커 등록
120
template : mongodb_broker_registrar
121
instances: 1
122
lifecycle: errand # bosh deploy시 vm에 생성되어 설치 되지 않고 bosh errand 로 실행할때 설정, 주로 테스트 용도에 쓰임
123
resource_pool: small
124
networks:
125
- name: default
126
properties:
127
broker: # 서비스 브로커 설정 정보
128
host: 10.244.3.154 # 서비스 브로커 IP
129
name: Mongo-DB # CF에서 서비스 브로커를 생성시 생기는 서비스 이름 브로커에 고정되어있는 값
130
password: cloudfoundry # 브로커 접근 아이디 비밀번호(필수)
131
username: admin # 브로커 접근 아이디(필수)
132
protocol: http
133
port: 8080 # 브로커 포트
134
cf:
135
admin_password: admin # CF 사용자의 패스워드
136
admin_username: admin # CF 사용자 이름
137
api_url: https://api.api.115.68.151.188.xip.io # CF 설치시 설정한 api uri 정보(필수)
138
release: paasta-mongodb-shard
139
140
- name : mongodb_broker_deregistrar # 작업 이름: 서비스 브로커 삭제
141
template : mongodb_broker_deregistrar
142
instances: 1
143
lifecycle: errand
144
resource_pool: small
145
networks:
146
- name: default
147
properties:
148
broker:
149
host: 10.244.3.154
150
name: Mongo-DB
151
password: cloudfoundry
152
username: admin
153
protocol: http
154
port: 8080
155
cf:
156
admin_password: admin
157
admin_username: admin
158
api_url: https://api.115.68.151.188.xip.io
159
release: paasta-mongodb-shard
160
161
meta:
162
apps_domain: api.115.68.151.188.xip.io # CF 설치시 설정한 apps 도메인 정보
163
environment: null
164
external_domain: api.115.68.151.188.xip.io # CF 설치시 설정한 외부 도메인 정보
165
nats: # CF 설치시 설정한 nats 정보
166
machines:
167
- 10.244.3.11
168
password: admin
169
port: 4222
170
user: nats
171
syslog_aggregator: null
172
173
properties:
174
mongodb: # mongodb shard release의 여러 job에서 공통적으로 허용하는 properties
175
# key는 shard를 구성할 때 mongos와 각 replicaSet의 인증을 하기위해 사용
176
key: |
177
+Qy+1icfeV8D2WXIfCojRjvYlryMVI2Ry+dAi8mYZ1H1Z9pDstRkOC0/oJYs0L/i
178
+Dj/3PurWo8MJuqBYrWVGsRnsx31um0SVAgFZM2GQEKvHIByX5hq/MuHlulSLM0h
179
GKkMT19zqDwFBFIN53jN0PLuuOnJ6FxZSb4cTLymfWM543WGpYx/31b8ehPYyeRp
180
T7P2o2vUd9hecb8mQFxcjsBN7PTLwuPb5lK0BRL4Ze7rh6qeC8j7M3zimV8lX2X5
181
9EtWlQP0ORYIlFpqijatZhS8Bf5AfI1EW6kZgfqwycl2ghxmSIbeleiqyQgYZNKQ
182
yBXV9disuBXcKy4tsOjSFvKw7y61kjjQOn8KXElefokefdLbcrpeARP6LR9WwR1v
183
ZTHcChfzWA4apHo6gJZkoqGVPjF4ArXTYxZfC+hHrsa5oe3XZjNapwV6XQfBNCuQ
184
EihT3Td/B7iAUWJnGQvugFJwYKJ5EYOYubhk8QtO9QIvoZxQPDq9tgUsVgiQ6gty
185
ZT83oxFAIgm3vky9l3uPwYi6jQ2FvsEJvDyiZl7gulOaC5UD/BdcM4Y5n/dxy/6Y
186
qphWWuPsJwnYBXLJgwtTZ/NkYDYyX/tL9gyzXGPkpMMD7DofFjWEpJvHlVRKIxp1
187
/zlxbVOMAmASgZDaqFperSQQyrfQqpuvAA8pRkWgorROyrsiRYYWlJZWWa4qHlI9
188
OZ1dDp8o71l3v0SqsKbEtxINpdiUNx4OdafsMNN/KVxw9oGdrPXnDl5DomtmAoKZ
189
uaCf3AQ3RsDeymgVX3j5EpLCHBhcPj+0B5tv4Yln652HAzDissOUKPyDf+PJaVRo
190
OfDOkUvmuqnwl45DOoOtZ0BMw7hXGdgm6Xfv5jEmtSjJzQ1pfwHOOfiY+zZWhHAi
191
ow/WNvLtUgNUhobi+OQb11bMMNNtmGWe+cZft6QzBsnd2xa/tAYTZDfAJ8OCvYQK
192
e46UrHd54ZJFzdzicRZ8DeuU9G4K
193
user: root # admin 권한 사용자이름
194
passwd: paasta # admin 권한 사용자 비밀번호
195
# replSetName: op
196
# bindIp: 10.244.3.153 # shard server ip
197
port: 27017 # mongodb port
198
199
mongodb_broker:
200
db_name: mongodb-broker # mongodb broker 관리용 데이터베이스
201
authsource: admin # mongodb broker 관리용 데이터베이스에 접근할 때 인증정보가 있는 데이터베이스
202
hosts: 10.244.3.153 # mongodb Host
Copied!
  • Deploy 할 deployment manifest 파일을 BOSH 에 지정한다.
1
$ bosh deployment {Deployment manifest 파일 PATH}
Copied!
1
Deployment set to '/home/ubuntu/workspace/bd_test/paasta-mongodb-shard-2.0.yml'
Copied!
  • Mongodb 서비스팩을 배포한다.
1
$ bosh deploy
Copied!
1
Acting as user 'admin' on deployment 'paasta-mongodb-shard-service' on 'my-bosh'
2
Getting deployment properties from director...
3
Unable to get properties list from director, trying without it...
4
5
Detecting deployment changes
6
----------------------------
7
resource_pools:
8
9
중략
10
11
Please review all changes carefully
12
13
Deploying
14
---------
15
Are you sure you want to deploy? (type 'yes' to continue): yes
16
17
Director task 756
18
Deprecation: Ignoring cloud config. Manifest contains 'networks' section.
19
20
Started preparing deployment > Preparing deployment. Done (00:00:01)
21
22
Started preparing package compilation > Finding packages to compile. Done (00:00:00)
23
24
Started creating missing vms
25
Started creating missing vms > mongodb_slave1/0 (66bbef0c-e135-417c-ba20-d61195fb7cfd)
26
Started creating missing vms > mongodb_master1/0 (6090417a-2183-4d98-ac5b-9883172f2e0c)
27
Started creating missing vms > mongodb_config/0 (2409b059-873e-45d1-b452-05fd5a336fff)
28
Done creating missing vms > mongodb_master1/0 (6090417a-2183-4d98-ac5b-9883172f2e0c) (00:01:20)
29
Started creating missing vms > mongodb_shard/0 (3e7db12a-0c39-4cb3-9e31-04a647206c00)
30
Done creating missing vms > mongodb_slave1/0 (66bbef0c-e135-417c-ba20-d61195fb7cfd) (00:01:24)
31
Started creating missing vms > mongodb_broker/0 (9de2c4f3-abd0-4cf3-91cb-674ae7d3b598)
32
Done creating missing vms > mongodb_config/0 (2409b059-873e-45d1-b452-05fd5a336fff) (00:01:24)
33
Done creating missing vms > mongodb_shard/0 (3e7db12a-0c39-4cb3-9e31-04a647206c00) (00:01:21)
34
Done creating missing vms > mongodb_broker/0 (9de2c4f3-abd0-4cf3-91cb-674ae7d3b598) (00:01:21)
35
Done creating missing vms (00:02:45)
36
37
Started updating job mongodb_slave1 > mongodb_slave1/0 (66bbef0c-e135-417c-ba20-d61195fb7cfd) (canary). Done (00:01:11)
38
Started updating job mongodb_master1 > mongodb_master1/0 (6090417a-2183-4d98-ac5b-9883172f2e0c) (canary). Done (00:01:07)
39
Started updating job mongodb_config > mongodb_config/0 (2409b059-873e-45d1-b452-05fd5a336fff) (canary). Done (00:01:15)
40
Started updating job mongodb_shard > mongodb_shard/0 (3e7db12a-0c39-4cb3-9e31-04a647206c00) (canary). Done (00:01:13)
41
Started updating job mongodb_broker > mongodb_broker/0 (9de2c4f3-abd0-4cf3-91cb-674ae7d3b598) (canary). Done (00:00:48)
42
43
Task 756 done
44
45
Started 2017-01-16 09:19:33 UTC
46
Finished 2017-01-16 09:27:53 UTC
47
Duration 00:08:20
48
49
Deployed 'paasta-mongodb-shard-service' to 'my-bosh'
Copied!
  • 배포된 Mongodb 서비스팩을 확인한다.
1
$ bosh vms
Copied!
1
Acting as user 'admin' on deployment 'paasta-mongodb-shard-service' on 'my-bosh'
2
3
Director task 764
4
5
Task 764 done
6
7
+----------------------------------------------------------+---------+-----+---------+--------------+
8
| VM | State | AZ | VM Type | IPs |
9
+----------------------------------------------------------+---------+-----+---------+--------------+
10
| mongodb_broker/0 (9de2c4f3-abd0-4cf3-91cb-674ae7d3b598) | running | n/a | small | 10.244.3.154 |
11
| mongodb_config/0 (2409b059-873e-45d1-b452-05fd5a336fff) | running | n/a | small | 10.244.3.150 |
12
| mongodb_master1/0 (6090417a-2183-4d98-ac5b-9883172f2e0c) | running | n/a | small | 10.244.3.141 |
13
| mongodb_shard/0 (3e7db12a-0c39-4cb3-9e31-04a647206c00) | running | n/a | small | 10.244.3.170 |
14
| mongodb_slave1/0 (66bbef0c-e135-417c-ba20-d61195fb7cfd) | running | n/a | small | 10.244.3.142 |
15
+----------------------------------------------------------+---------+-----+---------+--------------+
16
17
VMs total: 5
Copied!

2.4. Mongodb 서비스 브로커 등록

Mongodb 서비스팩 배포가 완료 되었으면 Application에서 서비스 팩을 사용하기 위해서 먼저 Mongodb 서비스 브로커를 등록해 주어야 한다.
서비스 브로커 등록시 개방형 클라우드 플랫폼에서 서비스브로커를 등록할 수 있는 사용자로 로그인이 되어있어야 한다.
  • 서비스 브로커 목록을 확인한다.
1
$ cf service-brokers
Copied!
  • Mongodb 서비스 브로커를 등록한다.
1
$cf create-service-broker {서비스브로커 이름} {서비스브로커 사용자ID} {서비스브로커 사용자비밀번호} http://{서비스브로커 URL(IP)}
Copied!
1
- 서비스브로커 이름 : 서비스브로커 관리를 위해 PaaS-TA에서 보여지는 명칭이다. 서비스 Marketplace에서는 각각의 API 서비스 명이 보여지니 여기서 명칭은 서비스팩 리스트의 명칭이다.
2
3
- 서비스브로커 사용자ID / 비밀번호 : 서비스 브로커에 접근할 수 있는 사용자 ID입니다. 서비스브로커도 하나의 API 서버이기 때문에 아무나 접근을 허용할 수 없어 접근이 가능한 ID/비밀번호를 입력한다.
4
5
- 서비스브로커 URL : 서비스팩이 제공하는 API를 사용할 수 있는 URL을 입력한다.
Copied!
1
$ cf create-service-broker mongodb-shard-service-broker admin cloudfoundry http://10.30.60.54:8080
Copied!
  • 등록된 mongodb 서비스 브로커를 확인한다.
1
$ cf service-brokers
Copied!
  • 접근 가능한 서비스 목록을 확인한다.
1
$ cf service-access
Copied!
서비스 브로커 생성시 디폴트로 접근을 허용하지 않는다.
  • 특정 조직에 해당 서비스 접근 허용을 할당하고 접근 서비스 목록을 다시 확인한다. (전체 조직)
1
$ cf enable-service-access Mongo-DB
2
$ cf service-access
Copied!

3. Mongodb 연동 Sample Web App 설명

본 Sample Web App은 PaaS-TA에 배포되며 Mongodb의 서비스를 Provision과 Bind를 한 상태에서 사용이 가능하다.

3.1. Sample App 구조

Sample Web App은 PaaS-TA에 App으로 배포가 된다. App을 배포하여 구동시 Bind 된 Mongodb 서비스 연결정보로 접속하여 초기 데이터를 생성하게 된다. 배포 완료 후 정상적으로 App 이 구동되면 브라우저나 curl로 해당 App에 접속 하여 Mongodb 환경정보(서비스 연결 정보)와 초기 적재된 데이터를 보여준다.
Sample Web App 구조는 다음과 같다.
이름
설명
src
Sample 소스디렉토리
manifest
PaaS-TA에 app 배포시 필요한 설정을 저장하는 파일
build.gradle
gradle project 설정 파일
build
gradle 빌드시 생성되는 디렉토리(war 파일, classes 폴더 등)
  • PaaS-TA-Sample-Apps.zip 파일 압축을 풀고 Service 폴더안에 있는 Mongodb Sample Web App인 hello-spring-mongodb를 복사한다.
    1
    $ ls -all
    Copied!

3.2. PaaS-TA에서 서비스 신청

Sample Web App에서 Mongodb 서비스를 사용하기 위해서는 서비스 신청(Provision)을 해야 한다. *참고: 서비스 신청시 개방형 클라우드 플랫폼에서 서비스를 신청 할 수 있는 사용자로 로그인이 되어 있어야 한다.
  • 먼저 PaaS-TA Marketplace에서 서비스가 있는지 확인을 한다.
1
$ cf marketplace
Copied!
  • Marketplace에서 원하는 서비스가 있으면 서비스 신청(Provision)을 한다.
    1
    $ cf create-service {서비스명} {서비스플랜} {내서비스명}
    Copied!
    ```
  • 서비스명 : Mongo-DB로 Marketplace에서 보여지는 서비스 명칭이다.
  • 서비스플랜 : 서비스에 대한 정책으로 plans에 있는 정보 중 하나를 선택한다.
  • 내서비스명 : 내 서비스에서 보여지는 명칭이다. 이 명칭을 기준으로 환경설정정보를 가져온다.
    ```
1
$ cf create-service Mongo-DB default-plan mongodb-service-instance
Copied!
  • 생성된 Mongodb 서비스 인스턴스를 확인한다.
    1
    $ cf services
    Copied!

3.3. Sample App에 서비스 바인드 신청 및 App 확인

서비스 신청이 완료되었으면 Sample Web App 에서는 생성된 서비스 인스턴스를 Bind 하여 App에서 Mongodb 서비스를 이용한다. *참고: 서비스 Bind 신청시 개방형 클라우드 플랫폼에서 서비스 Bind신청 할 수 있는 사용자로 로그인이 되어 있어야 한다.
  • Sample Web App 디렉토리로 이동하여 manifest 파일을 확인한다.
1
$ cd hello-spring-mongodb
2
$ vi manifest.yml
Copied!
1
---
2
applications:
3
- name: hello-spring-mongodb #배포할 App 이름
4
memory: 512M # 배포시 메모리 사이즈
5
instances: 1 # 배포 인스턴스 수
6
path: ./build/libs/hello-spring-mongodb.war #배포하는 App 파일 PATH
Copied!
참고: ./build/libs/hello-spring-mongodb.war 파일이 존재 하지 않을 경우 gradle 빌드를 수행 하면 파일이 생성된다.
  • --no-start 옵션으로 App을 배포한다.
    --no-start: App 배포시 구동은 하지 않는다.
1
$ cf push --no-start
Copied!
  • 배포된 Sample App을 확인하고 로그를 수행한다.
    1
    $ cf apps
    Copied!
1
$ cf logs {배포된 App명}
2
$ cf logs hello-spring-mongodb
Copied!
  • Sample Web App에서 생성한 서비스 인스턴스 바인드 신청을 한다.
    1
    $ cf bind-service hello-spring-Mongodb Mongodb-service-instance
    Copied!
  • 바인드가 적용되기 위해서 App을 재기동한다.
    1
    $ cf restart hello-spring-mongodb
    Copied!
(참고) 바인드 후 App구동시 Mongodb 서비스 접속 에러로 App 구동이 안될 경우 보안 그룹을 추가한다.
  • rule.json 파일을 만들고 아래와 같이 내용을 넣는다.
    1
    $ vi rule.json
    Copied!
    1
    [
    2
    {
    3
    "protocol": "tcp",
    4
    "destination": "10.20.0.153",
    5
    "ports": "27017"
    6
    }
    7
    ]
    Copied!
  • 보안 그룹을 생성한다.
    1
    $ cf create-security-group Mongo-DB rule.json
    Copied!
  • 모든 App에 Mongodb 서비스를 사용할 수 있도록 생성한 보안 그룹을 적용한다.
    1
    $ cf bind-running-security-group Mongo-DB
    Copied!
  • App을 리부팅 한다.
    1
    $ cf restart hello-spring-Mongodb
    Copied!
  • App이 정상적으로 Mongodb 서비스를 사용하는지 확인한다.
    curl 로 확인
    1
    $ curl hello-spring-Mongodb.115.68.46.30.xip.io
    Copied!
  • 브라우에서 확인

4. Mongodb Client 툴 접속

Application에 바인딩된 Mongodb 서비스 연결정보는 Private IP로 구성되어 있기 때문에 Mongodb Client 툴에서 직접 연결할수 없다. 따라서 SSH 터널, Proxy 터널 등을 제공하는 Mongodb Client 툴을 사용해서 연결하여야 한다. 본 가이드는 SSH 터널을 이용하여 연결 하는 방법을 제공하며 Mongodb Client 툴로써는 MongoChef 로 가이드한다. MongoChef 에서 접속하기 위해서 먼저 SSH 터널링 할수 있는 VM 인스턴스를 생성해야한다. 이 인스턴스는 SSH로 접속이 가능해야 하고 접속 후 PaaS-TA에 설치한 서비스팩에 Private IP 와 해당 포트로 접근이 가능하도록 시큐리티 그룹을 구성해야 한다. 이 부분은 OpenStack관리자 및 PaaS-TA 운영자에게 문의하여 구성한다.

4.1. MongoChef 설치 & 연결

MongoChef 프로그램은 무료로 사용할 수 있는 소프트웨어이다.
  • MongoChef을 다운로드 하기 위해 아래 URL로 이동하여 설치파일을 다운로드 한다.
  • 다운로드한 설치파일을 실행한다.
  • MongoChef 설치를 위한 안내사항이다. Next 버튼을 클릭한다.
  • 프로그램 라이선스에 관련된 내용이다. 동의(I accept the terms in the License Agreement)에 체크 후 Next 버튼을 클릭한다.
  • MongoChef 을 설치할 경로를 설정 후 Next 버튼을 클릭한다. 별도의 경로 설정이 필요 없을 경우 default로 C드라이브 Program Files 폴더에 설치가 된다.
  • Install 버튼을 클릭하여 설치를 진행한다.
  • Finish 버튼 클릭으로 설치를 완료한다.
  • MongoChef를 실행했을 때 처음 뜨는 화면이다. 이 화면에서 Server에 접속하기 위한 profile을 설정/저장하여 접속할 수 있다. Connect버튼을 클릭한다.
  • 새로운 접속 정보를 작성하기 위해New Connection 버튼을 클릭한다.
  • Server에 접속하기 위한 Connection 정보를 입력한다.
서버 정보는 Application에 바인드되어 있는 서버 정보를 입력한다. cf env 명령어로 이용하여 확인한다.
1
$ cf env hello-spring-mongodb
Copied!
  • Authentication탭으로 이동하여 mongodb 의 인증정보를 입력한다.
SSH 터널 탭을 클릭하고 PaaS-TA 운영 관리자에게 제공받은 SSH 터널링 가능한 서버 정보를 입력한다.
모든 정보를 입력했으면 Test Connection 버튼을 눌러 접속 테스트를 한다.
모두 OK 결과가 나오면 정상적으로 접속이 된다는 것이다. OK 버튼을 누른다.
  • Save 버튼을 눌러 작성한 접속정보를 저장한다.
  • 방금 저장한 접속정보를 선택하고 Connect 버튼을 클릭하여 접속한다.
  • 접속이 완료되면 좌측에 스키마 정보가 나타난다. 컬럼을 더블클릭 해보면 우측에 적재되어있는 데이터가 출력된다.
  • 우측 화면에 쿼리 항목에 Query문을 작성한 후 실행 버튼(삼각형)을 클릭한다. Query문에 이상이 없다면 정상적으로 결과를 얻을 수 있을 것이다.
Last modified 1yr ago