GlusterFS 설치 가이드

Table of Contents

1. 문서 개요

1.1. 목적

본 문서(GlusterFS 서비스팩 설치 가이드)는 전자정부 표준 프레임워크 기반의 PaaS-TA에서 제공되는 서비스팩인 GlusterFS 서비스팩을 Bosh를 이용하여 설치 하는 방법과 PaaS-TA의 SaaS 형태로 제공하는 Application 에서GlusterFS 서비스를 사용하는 방법을 기술하였다. PaaS-TA 3.5 버전부터는 Bosh2.0 기반으로 deploy를 진행하며 기존 Bosh1.0 기반으로 설치를 원할경우에는 PaaS-TA 3.1 이하 버전의 문서를 참고한다.

1.2. 범위

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

1.3. 시스템 구성도

본 문서의 설치된 시스템 구성도이다. Mysql Server, GlusterFS 서비스 브로커로 최소사항을 구성하였고 서비스 백엔드는 외부에 구성되어 있다.

시스템 구성도
  • 설치할때 cloud config에서 사용하는 VM_Tpye명과 스펙

VM_Type

스펙

minimal

1vCPU / 1GB RAM / 8GB Disk

  • 각 Instance의 Resource Pool과 스펙

구분

Resource Pool

스펙

paasta-glusterfs-broker

minimal

1vCPU / 1GB RAM / 8GB Disk

mysql

minimal

1vCPU / 1GB RAM / 8GB Disk

1.4. 참고자료

http://bosh.io/docs http://docs.cloudfoundry.org/

2. GlusterFS 서비스 설치

2.1. Prerequisite

본 설치 가이드는 Linux 환경에서 설치하는 것을 기준으로 하였다. 서비스 설치를 위해서는 BOSH 2.0과 PaaS-TA 5.0 이상, PaaS-TA 포털이 설치되어 있어야 한다.

2.2. Stemcell 확인

Stemcell 목록을 확인하여 서비스 설치에 필요한 Stemcell이 업로드 되어 있는 것을 확인한다. (PaaS-TA 5.5.1 과 동일 stemcell 사용)

$ bosh -e micro-bosh stemcells

Using environment '10.0.1.6' as client 'admin'
Name Version OS CPI CID
bosh-aws-xen-hvm-ubuntu-xenial-go_agent 621.94* ubuntu-xenial - ami-0297ff649e8eea21b
(*) Currently deployed
1 stemcells
Succeeded

2.3. Deployment 다운로드

서비스 설치에 필요한 Deployment를 Git Repository에서 받아 서비스 설치 작업 경로로 위치시킨다.

# Deployment 다운로드 파일 위치 경로 생성 및 설치 경로 이동
$ mkdir -p ~/workspace/paasta-5.5.1/deployment
$ cd ~/workspace/paasta-5.5.1/deployment
# Deployment 파일 다운로드
$ git clone https://github.com/PaaS-TA/service-deployment.git -b v5.0.6
# common_vars.yml 파일 다운로드(common_vars.yml가 존재하지 않는다면 다운로드)
$ git clone https://github.com/PaaS-TA/common.git

2.4. Deployment 파일 수정

BOSH Deployment manifest는 Components 요소 및 배포의 속성을 정의한 YAML 파일이다. Deployment 파일에서 사용하는 network, vm_type, disk_type 등은 Cloud config를 활용하고, 활용 방법은 BOSH 2.0 가이드를 참고한다.

  • Cloud config 설정 내용을 확인한다.

$ bosh -e micro-bosh cloud-config

Using environment '10.0.1.6' as client 'admin'
azs:
- cloud_properties:
availability_zone: ap-northeast-2a
name: z1
- cloud_properties:
availability_zone: ap-northeast-2a
name: z2
... ((생략)) ...
disk_types:
- disk_size: 1024
name: default
- disk_size: 1024
name: 1GB
... ((생략)) ...
networks:
- name: default
subnets:
- az: z1
cloud_properties:
security_groups: paasta-security-group
subnet: subnet-00000000000000000
dns:
- 8.8.8.8
gateway: 10.0.1.1
range: 10.0.1.0/24
reserved:
- 10.0.1.2 - 10.0.1.9
static:
- 10.0.1.10 - 10.0.1.120
... ((생략)) ...
vm_types:
- cloud_properties:
ephemeral_disk:
size: 3000
type: gp2
instance_type: t2.small
name: minimal
- cloud_properties:
ephemeral_disk:
size: 10000
type: gp2
instance_type: t2.small
name: small
... ((생략)) ...
Succeeded
  • common_vars.yml을 서버 환경에 맞게 수정한다.

  • glusterfs에서 사용하는 변수는 system_domain, paasta_admin_username, paasta_admin_password 이다.

$ vi ~/workspace/paasta-5.5.1/deployment/common/common_vars.yml

# BOSH INFO
bosh_ip: "10.0.1.6" # BOSH IP
bosh_url: "https://10.0.1.6" # BOSH URL (e.g. "https://00.000.0.0")
bosh_client_admin_id: "admin" # BOSH Client Admin ID
bosh_client_admin_secret: "ert7na4jpew48" # BOSH Client Admin Secret('echo $(bosh int ~/workspace/paasta-5.5.1/deployment/paasta-deployment/bosh/{iaas}/creds.yml --path /admin_password)' 명령어를 통해 확인 가능)
bosh_director_port: 25555 # BOSH director port
bosh_oauth_port: 8443 # BOSH oauth port
bosh_version: 271.2 # BOSH version('bosh env' 명령어를 통해 확인 가능, on-demand service용, e.g. "271.2")
# PAAS-TA INFO
system_domain: "61.252.53.246.xip.io" # Domain (xip.io를 사용하는 경우 HAProxy Public IP와 동일)
paasta_admin_username: "admin" # PaaS-TA Admin Username
paasta_admin_password: "admin" # PaaS-TA Admin Password
paasta_nats_ip: "10.0.1.121"
paasta_nats_port: 4222
paasta_nats_user: "nats"
paasta_nats_password: "7EZB5ZkMLMqT73h2Jh3UsqO" # PaaS-TA Nats Password (CredHub 로그인후 'credhub get -n /micro-bosh/paasta/nats_password' 명령어를 통해 확인 가능)
paasta_nats_private_networks_name: "default" # PaaS-TA Nats 의 Network 이름
paasta_database_ips: "10.0.1.123" # PaaS-TA Database IP (e.g. "10.0.1.123")
paasta_database_port: 5524 # PaaS-TA Database Port (e.g. 5524(postgresql)/13307(mysql)) -- Do Not Use "3306"&"13306" in mysql
paasta_database_type: "postgresql" # PaaS-TA Database Type (e.g. "postgresql" or "mysql")
paasta_database_driver_class: "org.postgresql.Driver" # PaaS-TA Database driver-class (e.g. "org.postgresql.Driver" or "com.mysql.jdbc.Driver")
paasta_cc_db_id: "cloud_controller" # CCDB ID (e.g. "cloud_controller")
paasta_cc_db_password: "cc_admin" # CCDB Password (e.g. "cc_admin")
paasta_uaa_db_id: "uaa" # UAADB ID (e.g. "uaa")
paasta_uaa_db_password: "uaa_admin" # UAADB Password (e.g. "uaa_admin")
paasta_api_version: "v3"
# UAAC INFO
uaa_client_admin_id: "admin" # UAAC Admin Client Admin ID
uaa_client_admin_secret: "admin-secret" # UAAC Admin Client에 접근하기 위한 Secret 변수
uaa_client_portal_secret: "clientsecret" # UAAC Portal Client에 접근하기 위한 Secret 변수
# Monitoring INFO
metric_url: "10.0.161.101" # Monitoring InfluxDB IP
syslog_address: "10.0.121.100" # Logsearch의 ls-router IP
syslog_port: "2514" # Logsearch의 ls-router Port
syslog_transport: "relp" # Logsearch Protocol
saas_monitoring_url: "61.252.53.248" # Pinpoint HAProxy WEBUI의 Public IP
monitoring_api_url: "61.252.53.241" # Monitoring-WEB의 Public IP
### Portal INFO
portal_web_user_ip: "52.78.88.252"
portal_web_user_url: "http://portal-web-user.52.78.88.252.xip.io"
### ETC INFO
abacus_url: "http://abacus.61.252.53.248.xip.io" # abacus url (e.g. "http://abacus.xxx.xxx.xxx.xxx.xip.io")
  • Deployment YAML에서 사용하는 변수 파일을 서버 환경에 맞게 수정한다.

$ vi ~/workspace/paasta-5.5.1/deployment/service-deployment/glusterfs/vars.yml

# STEMCELL
stemcell_os: "ubuntu-xenial" # stemcell os
stemcell_version: "621.94" # stemcell version
# NETWORK
private_networks_name: "default" # private network name
public_networks_name: "vip" # public network name
# MYSQL
mysql_azs: [z4] # mysql azs
mysql_instances: 1 # mysql instances
mysql_vm_type: "medium" # mysql vm type
mysql_persistent_disk_type: "1GB" # mysql persistent disk type
mysql_port: 13306 # mysql port (e.g. 13306) -- Do Not Use "3306"
mysql_admin_username: "<MYSQL_ADMIN_USERNAME>" # mysql admin username (e.g. "root")
mysql_admin_password: "<MYSQL_ADMIN_PASSWORD>" # mysql admin password (e.g. "admin1234")
# GLUSTERFS SERVER
glusterfs_url: "<GLUSTERFS_PUBLIC_IP>" # Glusterfs 서비스 public 주소
glusterfs_tenantname: "<GLUSTERFS_TENANT_NAME>" # Glusterfs 서비스 테넌트 이름(e.g. "service")
glusterfs_username: "<GLUSTERFS_USERNAME>" # Glusterfs 서비스 계정 아이디(e.g. "swift")
glusterfs_password: "<GLUSTERFS_PASSWORD>" # Glusterfs 서비스 암호(e.g. "password")
# GLUSTERFS_BROKER
broker_azs: [z4] # glusterfs broker azs
broker_instances: 1 # glusterfs broker instances
broker_persistent_disk_type: "4GB" # glusterfs broker persistent disk type
broker_vm_type: "small" # glusterfs broker vm type
# GLUSTERFS_BROKER_REGISTRAR
broker_registrar_azs: [z4] # broker registrar azs
broker_registrar_instances: 1 # broker registrar instances
broker_registrar_vm_type: "small" # broker registrar vm type
# GLUSTERFS_BROKER_DEREGISTRAR
broker_deregistrar_azs: [z4] # broker deregistrar azs
broker_deregistrar_instances: 1 # broker deregistrar instances
broker_deregistrar_vm_type: "small" # broker deregistrar vm type

2.5. 서비스 설치

  • 서버 환경에 맞추어 Deploy 스크립트 파일의 VARIABLES 설정을 수정하고, Option file을 추가할지 선택한다.

    (선택) -o operations/use-compiled-releases.yml (ubuntu-xenial/621.94로 컴파일 된 릴리즈 사용)

$ vi ~/workspace/paasta-5.5.1/deployment/service-deployment/glusterfs/deploy.sh

#!/bin/bash
# VARIABLES
COMMON_VARS_PATH="<COMMON_VARS_FILE_PATH>" # common_vars.yml File Path (e.g. ../../common/common_vars.yml)
BOSH_ENVIRONMENT="${BOSH_ENVIRONMENT}" # bosh director alias name (PaaS-TA에서 제공되는 create-bosh-login.sh 미 사용시 bosh envs에서 이름을 확인하여 입력)
bosh -e ${BOSH_ENVIRONMENT} -n -d glusterfs deploy --no-redact glusterfs.yml \
-l ${COMMON_VARS_PATH} \
-l vars.yml
  • 서비스를 설치한다.

$ cd ~/workspace/paasta-5.5.1/deployment/service-deployment/glusterfs
$ sh ./deploy.sh

2.6. 서비스 설치 - 다운로드 된 PaaS-TA Release 파일 이용 방식

  • 서비스 설치에 필요한 릴리즈 파일을 다운로드 받아 Local machine의 서비스 설치 작업 경로로 위치시킨다.

  • 설치 릴리즈 파일 다운로드 : paasta-glusterfs-2.0.1.tgz

# 릴리즈 다운로드 파일 위치 경로 생성
$ mkdir -p ~/workspace/paasta-5.5.1/release/service
# 릴리즈 파일 다운로드 및 파일 경로 확인
$ ls ~/workspace/paasta-5.5.1/release/service
paasta-glusterfs-2.0.1.tgz
  • 서버 환경에 맞추어 Deploy 스크립트 파일의 VARIABLES 설정을 수정하고 Option file 및 변수를 추가한다.

    (추가) -o operations/use-offline-releases.yml (미리 다운받은 offline 릴리즈 사용)

    (추가) -v releases_dir=""

$ vi ~/workspace/paasta-5.5.1/deployment/service-deployment/glusterfs/deploy.sh

#!/bin/bash
# VARIABLES
COMMON_VARS_PATH="<COMMON_VARS_FILE_PATH>" # common_vars.yml File Path (e.g. ../../common/common_vars.yml)
BOSH_ENVIRONMENT="${BOSH_ENVIRONMENT}" # bosh director alias name (PaaS-TA에서 제공되는 create-bosh-login.sh 미 사용시 bosh envs에서 이름을 확인하여 입력)
bosh -e ${BOSH_ENVIRONMENT} -n -d glusterfs deploy --no-redact glusterfs.yml \
-l ${COMMON_VARS_PATH} \
-l vars.yml \
-v releases_dir="/home/ubuntu/workspace/paasta-5.5.1/release"
  • 서비스를 설치한다.

$ cd ~/workspace/paasta-5.5.1/deployment/service-deployment/glusterfs
$ sh ./deploy.sh

2.7. 서비스 설치 확인

설치 완료된 서비스를 확인한다.

$ bosh -e micro-bosh -d glusterfs vms

Using environment '10.0.1.6' as client 'admin'
Task 1343. Done
Deployment 'glusterfs'
Instance Process State AZ IPs VM CID VM Type Active
mysql/8770bc70-8681-4079-8360-086219d6231b running z3 10.30.52.10 vm-96697221-0ff9-4520-8a68-2314c62057a5 medium true
paasta-glusterfs-broker/229fb890-645b-4213-89a1-fc2116de3f54 running z3 10.30.52.11 vm-ace55b8f-3ce0-4482-b03b-96fbc567592e medium true
2 vms
Succeeded

3. GlusterFS 연동 Sample App 설명

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

3.1. 서비스 브로커 등록

GlusterFS 서비스팩 배포가 완료 되었으면 Application에서 서비스 팩을 사용하기 위해서 먼저 GlusterFS 서비스 브로커를 등록해 주어야 한다. 서비스 브로커 등록시에는 PaaS-TA에서 서비스 브로커를 등록할 수 있는 사용자로 로그인 하여야 한다

서비스 브로커 목록을 확인한다.

$ cf service-brokers

$ cf service-brokers
Getting service brokers as admin...
name url
No service brokers found

GlusterFS 서비스 브로커를 등록한다.

$ cf create-service-broker [SERVICE_BROKER] [USERNAME] [PASSWORD] [SERVICE_BROKER_URL]

[SERVICE_BROKER] : 서비스 브로커 명 [USERNAME] / [PASSWORD] : 서비스 브로커에 접근할 수 있는 사용자 ID / PASSWORD [SERVICE_BROKER_URL] : 서비스 브로커 접근 URL $ cf create-service-broker glusterfs-service admin cloudfoundry http://10.30.107.197:8080

$ cf create-service-broker glusterfs-service admin cloudfoundry http://10.30.107.197:8080
Creating service broker glusterfs-service as admin...
OK

등록된 GlusterFS 서비스 브로커를 확인한다.

$ cf service-brokers

$ cf service-brokers
Getting service brokers as admin...
name url
glusterfs-service http://10.30.107.197:8080

접근 가능한 서비스 목록을 확인한다.

$ cf service-access

$ cf service-access
Getting service access as admin...
broker: glusterfs-service
service plan access orgs
glusterfs glusterfs-5Mb none
glusterfs glusterfs-100Mb none
glusterfs glusterfs-1000Mb none

서비스 브로커 등록시 최초에는 접근을 허용하지 않는다. 따라서 access는 none으로 설정된다.

특정 조직에 해당 서비스 접근 허용을 할당하고 접근 서비스 목록을 다시 확인한다. (전체 조직)

$ cf enable-service-access glusterfs $ cf service-access

$ cf enable-service-access glusterfs
Enabling access to all plans of service glusterfs for all orgs as admin...
OK
$ cf service-access
Getting service access as admin...
broker: glusterfs-service
service plan access orgs
glusterfs glusterfs-5Mb all
glusterfs glusterfs-100Mb all
glusterfs glusterfs-1000Mb all

3.2. Sample App 구조

Sample Web App은 PaaS-TA에 App으로 배포가 된다. 배포 완료 후 정상적으로 App 이 구동되면 브라우저나 curl로 해당 App에 접속 하여 GlusterFS 환경정보(서비스 연결 정보)와파일 업로드하고 확인하는 기능을 제공한다.

Sample App 구조는 다음과 같다.

이름

설명

src

Sample 소스디렉토리

manifest

PaaS-TA에 app 배포시 필요한 설정을 저장하는 파일

pom.xml

maven project 설정 파일

target

maven build시 생성되는 디렉토리(war 파일, classes 폴더 등)

PaaSTA-Sample-Apps.zip 파일 압축을 풀고 Service폴더안에 있는 GlusterFSSample Web App인 hello-spring-glusterfs를 복사한다.

$ ls -all

glusterfs_image_07

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

Sample App에서 GlusterFS 서비스를 사용하기 위해서는 서비스 신청(Provision)을 해야 한다. *참고: 서비스 신청시 PaaS-TA에서 서비스를 신청 할 수 있는 사용자로 로그인이 되어 있어야 한다.

먼저 PaaS-TA Marketplace에서 서비스가 있는지 확인을 한다.

$ cf marketplace

glusterfs_image_08

Marketplace에서 원하는 서비스가 있으면 서비스 신청(Provision)을 한다.

$ cf create-service {서비스명} {서비스 플랜} {내 서비스명}

  • 서비스명 : p-rabbitmq로 Marketplace에서 보여지는 서비스 명칭이다.

  • 서비스플랜 : 서비스에 대한 정책으로 plans에 있는 정보 중 하나를 선택한다. RabbitMQ 서비스는 standard plan만 지원한다.

  • 내 서비스명 : 내 서비스에서 보여지는 명칭이다. 이 명칭을 기준으로 환경 설정 정보를 가져온다.

$ cf create-service glusterfs glusterfs-1000Mb glusterfs-service-instance

glusterfs_image_09

생성된 GlusterFS 서비스 인스턴스를 확인한다.

$ cf services

glusterfs_image_10

브라우에서 이미지 확인

glusterfs_image_17