the 2 nd cloud frontier 2011 hands on lab

40
The 2 nd CLOUD FRONTIER 2011 Hands On Lab 2011.10.19 한한한한한한한한한한

Upload: mab

Post on 12-Jan-2016

28 views

Category:

Documents


2 download

DESCRIPTION

The 2 nd CLOUD FRONTIER 2011 Hands On Lab. 2011.10.19. 한국자바개발자협의회. KT ucloud 에 대한 소개 – KT 박상학 팀장 (5 분 ) 클라우드 환경에서 Java Platform (5 분 ) IaaS 기반 Java Platform 환경 구축 실습 (55 분 ) Apache HTTP Server + Tomcat Integration Java Application Deployment - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

The 2nd CLOUD FRONTIER 2011

Hands On Lab

2011.10.19

한국자바개발자협의회

Page 2: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

Agenda

1. KT ucloud 에 대한 소개 – KT 박상학 팀장 (5 분 )2. 클라우드 환경에서 Java Platform (5 분 )3. IaaS 기반 Java Platform 환경 구축 실습 (55 분 )

Apache HTTP Server + Tomcat Integration

Java Application Deployment

4. KT ucloud Storage Service 소개 – KT 황진경 팀장 (5 분 )5. KT ucloud Storage Service 데모 (10 분 )

Ajax 기반 Application

6. KT ucloud PaaS Service 소개 – KT 김기현 팀장 (10 분 )7. KT ucloud PaaS Service 데모 (10 분 )

Auto Scaling

Threshold

Page 3: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

Java EE Platform

Page 4: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

Java EE Application Architecture

Page 5: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

Java EE Application 의 환경 변화

IoC Framework :: Spring Framework

EJB POJO & POJI POJO :: Plain Old Java Object POJI :: Plain Old Java Interface

Java EE Server (WAS) Web Container

JSP/Servlet REST(JSON, XML)

Web Browser Any Device

Page 6: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

Java EE Application 의 변화

Web Container :: Tomcat, Jetty, JBossWeb, … WAR Deployment

Virtual Machine 환경에 보다 적합

Stateless Application :: REST (JAX-RS Standard) State Management :: Server Client

Scalability 확보가 용이

IoC Container :: Spring Framework Lightweight, POJO, Unmanaged Environment

Scalability 확보가 용이

Page 7: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

System Architecture On Java

Fire

wal

l

Fire

wal

lL4 Switch

(Load Balancing)Client

Apache HTTP (2)

Apache HTTP (1)

AppServer (1)

AppServer (2)

AppServer (3)

AppServer (4)

Load Balancing

Load Balancing

Load Balancing

Database (1)

Database (2)

DatabaseClustering

DMZ Inner Network

Web Server Failover

Application ServerFailover

DatabaseFailover

Page 8: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

Java On Cloud

IaaS(Infrastructure as a Service) Virtualization :: KT ucloud server 기존의 애플리케이션을 그대로 Migration 하는 방식 경량의 Runtime Environment 구현 필요 장비만 없을 뿐 , 설정은 그대로 진행해야 하나 on demand 기존에 사용하던 소프트웨어의 라이선스 정책 확인 필요 서비스 제공자가 제공하는 서비스에 따라서 제약 발생이 있음

예 ) Database (Oracle 을 사용하지만 VM 에서는 라이선스 문제로 사용이 어려움 )

PaaS(Platform as a Service) 사전에 정의되어 있는 개발 및 배포 환경 개발자는 개발과 배포에 집중 개발 및 배포에 있어서 환경적 제약이 발생하나 개발자는 시스템에

대해서 알아야 필요 없음 서비스 제공자는 개발 환경과 배포 환경을 제공

Page 9: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

Java System Architecture on IaaS

L4 Switch(Load Balancing)

Client

Apache HTTP (2)

Apache HTTP (1)

AppServer (1)

AppServer (2)

AppServer (3)

AppServer (4)

Load Balancing

Load Balancing

Load Balancing

Database (1)

Database (2)KT ucloud콘솔 설정

VM 에 각각의 서비스를 개별로 설정

VM 에 서비스를 하나 이상의 서비스를 결합

VM 에 모든 서비스를하나로 구성

Page 10: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

KT ucloud :: Load Balancer

Page 11: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

KT ucloud :: Load Balancer

Page 12: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

KT ucloud :: Database Service

Page 13: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

KT ucloud :: Database Service

Page 14: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

Apache HTTP Server & Tomcat

L4 Switch192.168.10.1

app1

app2

app3

Apache1192.168.10.2

Apache2192.168.10.3

AppServer1192.168.10.4

AppServer2192.168.10.5

app1

app2

app3

Client

Page 15: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

Java System Architecture on IaaS

Apache HTTP Server

AppServer (2)(Tomcat)

Load Balancing

Database Server

MySQL on VMOR

KT ucloud DB)

AppServer (1)(Tomcat)

mod_jk

mod_jk.somod-jk.confuriworkermap.propertiesworkers.properties

<TOMCAT>/conf/server.xml

Page 16: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

실습 절차

1. KT ucloud server VM 접속2. install.sh 스크립트 다운로드 및 실행

Apache HTTP Server, MySQL, Tomcat 다운로드 및 설치

3. Apache HTTP Server & mod_jk 설정4. Apache Tomcat 설정5. MySQL 스키마 생성6. Apache HTTP Server & MySQL 서비스

재시작7. 예제 Application 배포8. Apache Tomcat 재시작9. 테스트

Page 17: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

실습용 스크립트

http://14.63.194.232/download/script.txt

Page 18: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

실습 :: 1. 접속 및 설치

KT ucloud server 접속1. Putty 를 실행하고2. 책상에 있는 접속 IP/Username/Password 로 VM 에 접속

접속 후 다음의 커맨드를 실행[root@i-2732-16209-VM ~]# wget http://14.63.194.232/download/install_x86.sh[root@i-2732-16209-VM ~]# sh install_x86.sh ...Press Enter to continue..... 엔터

Done....[root@i-2732-16209-VM ~]# . .bashrc[root@i-2732-16209-VM ~]# java

Page 19: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

실습 :: 2. 다운로드 파일 확인

root@i-2732-16209-VM:~ #> lltotal 14212-rw------- 1 root root 973 Nov 8 2010 anaconda-ks.cfgdrwxr-xr-x 6 root root 4096 Oct 19 00:36 apache-maven-3.0.3drwxr-xr-x 9 root root 4096 Oct 19 00:36 apache-tomcat-7.0.22-rw-r--r-- 1 root root 305 Oct 19 00:39 bashrc-rwxr-xr-x 1 root root 2598 Oct 19 00:42 install.sh-rwxr-xr-x 1 root root 2617 Oct 19 00:42 install_x86.shlrwxrwxrwx 1 root root 11 Oct 19 00:36 jdk -> jdk1.6.0_27drwxr-xr-x 10 root root 4096 Oct 19 00:36 jdk1.6.0_27-rw-r--r-- 1 root root 9813 Oct 17 02:10 jpetstore-mysql-dataload.sql-rw-r--r-- 1 root root 5616 Oct 17 02:10 jpetstore-mysql-schema.sqllrwxrwxrwx 1 root root 18 Oct 19 00:36 maven -> apache-maven-3.0.3-rw-r--r-- 1 root root 330 Oct 17 01:46 mod-jk.conf-rw-r--r-- 1 root root 394007 Oct 17 01:46 mod_jk.so-rw-r--r-- 1 root root 14064359 Oct 17 02:09 ROOT.war-rw-r--r-- 1 root root 31 Oct 17 01:46 uriworkermap.properties-rw-r--r-- 1 root root 345 Oct 17 01:46 workers.properties

Page 20: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

실습 :: 3. mod_jk 설정

root@i-2732-16209-VM:~ #> cp mod-jk.conf /etc/httpd/conf.dLoadModule jk_module modules/mod_jk.soJkWorkersFile conf.d/workers.propertiesJkLogFile logs/mod_jk.logJkLogLevel debug 로깅 레벨은 운영시 infoJkLogStampFormat "[%a %b %d %H:%M:%S %Y]"JkOptions +ForwardKeySize +ForwardURICompatUnparsed -ForwardDirectoriesJkRequestLogFormat "%w %V %T"JkMountFile conf.d/uriworkermap.propertiesJkShmFile run/jk.shm

root@i-2732-16209-VM:~ #> cp uriworkermap.properties /etc/httpd/conf.d/=loadbalancer/*=loadbalancer

root@i-2732-16209-VM:~ #> cp workers.properties /etc/httpd/conf.dworker.list=loadbalancerworker.jvm1.host=localhost Tomcat 이 하나 더 늘어나는 경우 추가worker.jvm1.port=8009worker.jvm1.type=ajp13worker.jvm1.lbfactor=1worker.loadbalancer.type=lbworker.loadbalancer.balance_workers=jvm1

root@i-2732-16209-VM:~ #> cp mod_jk.so /etc/httpd/modules

Page 21: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

실습 :: 4. Apache Tomcat 설정

root@i-2732-16209-VM:~ #> cd /root/apache-tomcat-7.0.22/webappsroot@i-2732-16209-VM:~/apache-tomcat-7.0.22/webapps #> rm -rf ROOTroot@i-2732-16209-VM:~/apache-tomcat-7.0.22/webapps #> cp ~/ROOT.war .

root@i-2732-16209-VM:~ #> cd /root/apache-tomcat-7.0.22/confroot@i-2732-16209-VM:~/apache-tomcat-7.0.22/conf #> vi server.xml

[FROM]

<!-- You should set jvmRoute to support load-balancing via AJP ie : <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> --> <Engine name="Catalina" defaultHost="localhost">

[TO]

<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">

[VI 커맨드 ]

CTRL + F Page Down CTRL + B Page Up dd 라인 삭제 ESC + :wq 저장하고 종료

Page 22: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

실습 :: 5. 테이블 생성 및 데이터 로딩

root@i-2732-16209-VM:~ #> cd /root

root@i-2732-16209-VM:~ #> mysql -uroot -p

Enter password: ( 그냥 엔터 )

mysql> show databases;

mysql> create schema jpetstore;

mysql> show databases;

mysql> quit

Bye

root@i-2732-16209-VM:~ #> mysql -uroot -p < jpetstore-mysql-

schema.sql

root@i-2732-16209-VM:~ #> mysql -uroot -p < jpetstore-mysql-

dataload.sql

Page 23: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

실습 :: 6. 서비스 재시작

root@i-2732-16209-VM:~ #> cd /etc/init.d

root@i-2732-16209-VM:/etc/init.d #> ./httpd restart HTTP Server RestartStopping httpd: [ OK ]Starting httpd: [ OK ]

root@i-2732-16209-VM:/etc/init.d #> ./mysqld restart MySQL RestartStopping MySQL: [ OK ]Starting MySQL: [ OK ]

root@i-2732-16209-VM:/etc/init.d #> cd /root/apache-tomcat-7.0.22/binroot@i-2732-16209-VM:~/apache-tomcat-7.0.22/bin #> ./catalina.sh run...INFO: Starting ProtocolHandler ["http-bio-8080"]Oct 19, 2011 1:18:17 AM org.apache.coyote.AbstractProtocol startINFO: Starting ProtocolHandler ["ajp-bio-8009"]Oct 19, 2011 1:18:17 AM org.apache.catalina.startup.Catalina startINFO: Server startup in 2362 ms

Tomcat 을 백그라운드로 동작시키려면 run 대신

start

Page 24: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

실습 :: 7. 서비스 테스트

Page 25: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

참고 :: 도메인 연결하기

Page 26: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

참고 :: Sticky Session & JVM Route

L4 Switch192.168.10.1

Apache1192.168.10.2

Apache2192.168.10.3

Tomcat1192.168.10.4

Tomcat2192.168.10.5

Client

Session ID : z0FOv8evAScvu6jPLlcLXQ**.jvm1세션을 생성한 Tomcat으로 요청이 처리되지 않는

경우 다시 로그인 요청을 하게 되는 문제를 해결하기

위한 방법

Page 27: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

KT ucloud :: Database Service 연동

#mysql --host=172.27.202.16 -ujpetstore -proot < jpetstore-mysql-schema.sql#mysql --host=172.27.202.16 -ujpetstore -proot < jpetstore-mysql-dataload.sql

Page 28: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

ROOT.war 파일의 WEB-INF/mysql.jdbc.properties 파일을 다음과 같이 작성

KT ucloud :: Database Service 연동

jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://172.27.202.16:3306/jpetstorejdbc.username=jpetstorejdbc.password=root

Page 29: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

KT Storage Service :: 서비스 신청

Page 30: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

KT Storage Service :: Container 생성

Container

Object

Page 31: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

KT Storage Service :: API Key 생성

Storage API 를 사용하기 위한 정보

Page 32: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

KT Storage Service :: Demo App

Page 33: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

KT Storage Service :: Demo App

/upload 컨트롤러

/list 컨트롤러

/download 컨트롤러

Page 34: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

KT Storage Service :: Storage API

Page 35: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

KT Storage Service :: 사용자 설정 CLASSPATH 에 cloudfiles.properties

파일에 정보 추가 관련 정보는 KT ucloud 클라우드 콘솔에서 확인

connection_timeout=300

auth_url=https://ssproxy.ucloudbiz.olleh.com/auth/[email protected]=********************************

Page 36: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

KT Storage Service :: 파일 저장

@Controller@RequestMapping("/upload")public class UploadController {

@RequestMapping(method = RequestMethod.POST) @ResponseBody public String upload(HttpServletRequest request, HttpServletResponse response) throws Exception { DefaultMultipartHttpServletRequest req = (DefaultMultipartHttpServletRequest) request; String containerName = req.getParameter("containerName"); MultipartFile uploadedFile = req.getFile("photo-file");

FilesClient client = new FilesClient(); java-cloudfiles API if (client.login()) { if (client.containerExists(containerName)) { client.storeStreamedObject(containerName, uploadedFile.getInputStream(), uploadedFile.getContentType(), uploadedFile.getOriginalFilename(), new HashMap()); String finalFilename = client.getStorageURL() + "/" + containerName + "/" + uploadedFile.getOriginalFilename(); return "{success:true, file:'" + finalFilename + "'}"; } } return "{success:false, file:'" + uploadedFile.getOriginalFilename() + "'}"; }

}

Page 37: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

KT Storage Service :: 파일 리스트

@Controller@RequestMapping("/list")public class ListController {

@RequestMapping(method = {RequestMethod.POST, RequestMethod.GET}) @ResponseBody public String list(HttpServletRequest request, HttpServletResponse response) throws Exception { FilesClient client = new FilesClient(); List list = new LinkedList(); if (client.login()) { List<FilesContainer> containers = client.listContainers(); for (FilesContainer value : containers) { FilesContainerInfo info = value.getInfo(); List<FilesObject> objects = value.getObjects(); for (FilesObject obj : objects) { TreeItem image = new TreeItem( obj.getName(), obj.getName(), client.getStorageURL() + "/" + info.getName() + "?objectName=" + obj.getName(), "Image" ); list.add(image); } } } return JacksonUtils.toString(list); }}

파일 목록을 JSON 형태로 구성하여 클라이언트로 전달하면 목록이 나타남

https://ssproxy.ucloudbiz.olleh.com/v1/AUTH_a9876d72-5f73-46bf-af98-13779513dad9/test?objectName=DnD.png

Storage URL 은 서버에서 제공

Page 38: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

KT Storage Service :: 파일 로딩@Controller@RequestMapping("/download")public class DownloadController {

@RequestMapping(value = "/{containerName}", method = RequestMethod.GET) @ResponseBody public void download(@PathVariable("containerName") String containerName, HttpServletRequest request, HttpServletResponse response) throws Exception { String objectName = request.getParameter("objectName");

if (containerName == null || objectName == null) { response.setStatus(500); } else { FilesClient client = new FilesClient(); if (client.login()) { if (client.containerExists(containerName)) { String contentType = FileUtils.getContentType(objectName); response.setHeader("Content-Type", contentType); response.setHeader("Content-Disposition", "attachment; filename=" + objectName); IOUtils.copy(client.getObjectAsStream(containerName, objectName), response.getOutputStream()); } } else { response.setStatus(500); } } }}

/download/test?objectName=test.png

Page 39: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

Source Code

http://jcoorkr.tistory.com

Page 40: The 2 nd CLOUD FRONTIER 2011 Hands On Lab

End