Taming the Cloud Database with Apache jclouds http://rack.to/jo14db



Similar documents
OpenShift on you own cloud. Troy Dawson OpenShift Engineer, Red Hat November 1, 2013

Mobile Cloud Computing T Open Source IaaS

Database Usage in the Public and Private Cloud: Choices and Preferences

Integration in the cloud - IPaaS with Fuse technology. Charles Moulliard Apache Committer

Cloud Vendor Benchmark Price & Performance Comparison Among 15 Top IaaS Providers Part 1: Pricing. April 2015 (UPDATED)

Manage cloud infrastructures using Zend Framework

2) Xen Hypervisor 3) UEC

1 What is Cloud Computing? Cloud Infrastructures OpenStack Amazon EC CAMF Cloud Application Management

Hadoop on OpenStack Cloud. Dmitry Mescheryakov Software

Virtualization and Cloud Computing

cloud functionality: advantages and Disadvantages

McAfee Public Cloud Server Security Suite

Cloud Computing. Chapter 1 Introducing Cloud Computing

Infrastructure as a Service (IaaS)

Virtualization & Cloud Computing (2W-VnCC)

Jfokus PaaS Hands-On Lab

CLOUD COMPUTING. When It's smarter to rent than to buy

Cloud Platform Comparison: CloudStack, Eucalyptus, vcloud Director and OpenStack

Cloud Computing. Chapter 1 Introducing Cloud Computing

CloudCenter Full Lifecycle Management. An application-defined approach to deploying and managing applications in any datacenter or cloud environment

White Paper. Deploying and Provisioning Databases in the Cloud: How Tesora s Database as a Service (DBaaS) Platform is Transforming Enterprise IT

Cloud Computing: Making the right choices

Cloud on TEIN Part I: OpenStack Cloud Deployment. Vasinee Siripoonya Electronic Government Agency of Thailand Kasidit Chanchio Thammasat University

Alfresco Enterprise on Azure: Reference Architecture. September 2014

Introduction to OpenStack

OpenStack Cloud Migration : Migrating On-premise workloads to OpenStack Private Cloud

RED HAT OPENSTACK PLATFORM A COST-EFFECTIVE PRIVATE CLOUD FOR YOUR BUSINESS

MANAGE YOUR AMAZON AWS ASSETS USING BOTO

Topics. Images courtesy of Majd F. Sakr or from Wikipedia unless otherwise noted.

Nagios and Cloud Computing

OpenStack Cloud Migration:

Deploy Your First CF App on Azure with Template and Service Broker. Thomas Shao, Rita Zhang, Bin Xia Microsoft Azure Team

How To Compare Cloud Computing To Cloud Platforms And Cloud Computing

Identity and Access Management for the Cloud What You Need to Know About Managing Access to Your Clouds

How To Use Arcgis For Free On A Gdb (For A Gis Server) For A Small Business

Building Private Cloud on

IOS110. Virtualization 5/27/2014 1

Blog:

IPFW Innovate Cloud Service Task Force

Server Virtualization and Consolidation

Outline. What is cloud computing? History Cloud service models Cloud deployment forms Advantages/disadvantages

Mobile Admin Architecture

Zadara Storage Cloud A

OpenStack IaaS. Rhys Oxenham OSEC.pl BarCamp, Warsaw, Poland November 2013

Introduction to Cloud : Cloud and Cloud Storage. Lecture 2. Dr. Dalit Naor IBM Haifa Research Storage Systems. Dalit Naor, IBM Haifa Research

Zabbix for Hybrid Cloud Management

Disaster Recovery Infrastructure

Data Centers and Cloud Computing

Part 1: Price Comparison Among The 10 Top Iaas Providers

What's the Difference Between OpenStack & A Cloud Management Platform?

Frédéric Dang Tran Orange Labs

Cloud Computing 101 Dissipating the Fog 2012/Dec/xx Grid-Interop 2012

Selling OpenStack to Egypt. Mohammed Arafa

Cisco Hybrid Cloud Solution: Deploy an E-Business Application with Cisco Intercloud Fabric for Business Reference Architecture

GitLab as an Alternative Development Platform for Github.com

CLOUD CRUISER FOR WINDOWS AZURE PACK

HP CloudSystem Enterprise

Own your own Enterprise Cloud with. FlexCloud

Red Hat Network Satellite Management and automation of your Red Hat Enterprise Linux environment

Automated Configuration of Open Stack Instances at Boot Time

Cisco Intercloud Fabric for Business

Unlimited Server 24/7/365 Support

Cloud Sure - Virtual Machines

Cloud Computing Submitted By : Fahim Ilyas ( ) Submitted To : Martin Johnson Submitted On: 31 st May, 2009

HOSTWAY. FlexCloudTM. Servers

Oracle Platform as a Service and Infrastructure as a Service Public Cloud Service Descriptions-Metered & Non-Metered.

Sistemi Operativi e Reti. Cloud Computing

Siemens SAP Cloud - Infrastructure as a Service

Introduction What is the cloud

Getting Started with Database As a Service on OpenStack

Business Alliance B.A.A.E.R. Managed services

RED HAT ENTERPRISE VIRTUALIZATION

Server Virtualization with Windows Server Hyper-V and System Center

Build Your Own Performance Test Lab in the Cloud. Leslie Segal Testware Associate, Inc.

Installing and Configuring Windows Server Module Overview 14/05/2013. Lesson 1: Planning Windows Server 2008 Installation.

HP Asset Manager. Implementing Single Sign On for Asset Manager Web 5.x. Legal Notices Introduction Using AM

A Gentle Introduction to Cloud Computing

Building Out Your Cloud-Ready Solutions. Clark D. Richey, Jr., Principal Technologist, DoD

Understanding ArcGIS Deployments in Public and Private Cloud. Marwa Mabrouk

Managed Servers ASA Extract FY14

JAVA IN THE CLOUD PAAS PLATFORM IN COMPARISON

Cloud on TIEN Part I: OpenStack Cloud Deployment. Vasinee Siripoonya Electronic Government Agency of Thailand Kasidit Chanchio Thammasat

ANS Monitoring as a Service. Customer requirements

SUSE Manager. A Comprehensive Linux Server Management the Linux Way. Name. Title

ArcGIS for Server: In the Cloud

Today. 1. Private Clouds. Private Cloud toolkits. Private Clouds and OpenStack Introduction

IBM Watson Ecosystem. Getting Started Guide

SUSE Cloud 2.0. Pete Chadwick. Douglas Jarvis. Senior Product Manager Product Marketing Manager

Transcription:

Taming the Cloud Database with Apache jclouds 1

Before we begin: Setup Virtual Machine pre-setup provided http://rack.to/jo14vm Avoid downloading during this presentation Convenient way to get up to speed with jclouds 2

Alternatively you need Oracle Java 7 Before we begin: Setup http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-inubuntu-via.html maven git http://maven.apache.org/download.cgi git config --global core.autocrlf false 3

Before we begin: Setup Testing on your machine (no subscriptions) Devstack Download yourself http://devstack.org/ Run in cloud http://blog.phymata.com/2014/04/18/devstack-icehouse-on-therackspace-cloud/ Providers: Rackspace, HP, others http://www.openstack.org/marketplace/public-clouds/ 4

Before we begin: Setup Testing on your machine with Rackspace: http://rack.to/jo14signup 5

Before we begin: Setup git clone https://github.com/zack-shoylev/jcloudsdeveloper-examples.git Multiple branches git clone https://github.com/rackerlabs/jcloudsexamples.git Branch trove-example-only 6

Introductions Zack Shoylev irc: zacksh twitter: @zackshoylev freenode #jclouds Also email @rackspace.com 7

Introductions Developer Experience sdk-support@rackspace.com 8

Goals jclouds Create a database in the cloud Abstractions and how to contribute How to add support for an API 9

The Cloud Networked and distributed computing Variety of services Compute (servers) Storage (files) Databases Email 10

The Cloud Can t someone else do it? 11

The Cloud 12

The Cloud Public cloud (external provider) Private cloud (internal deployment) Hybrid cloud Public + Private Rackspace example 13

The Cloud jclouds VM VM Your System S D K A P I Cloud VM This can be an application server Or your home machine Or belong to one of your end users Or a cloud VM Or a smartphone 14

The Cloud Advantages Metered pricing (pay as you go) Project scalability (unlimited) Safer (offsite/redundant) Economies of scale Expertise Support 15

The Cloud Disadvantages Less hardware control Provider-controlled downtime Virtualization (efficiency) Provider lock-in Provider-specific apis/sdks/features Expensive to switch clouds or deploy locally jclouds minimizes this disadvantage 16

The Cloud Database specific advantages Optimized by provider Settings Container virtualization Automated software updates Redundant data storage Backup Migration Choice Clustering (upcoming) Support 17

Cloud OS OpenStack Open-sourced by Rackspace and NASA (2010) Free Supported AT&T, HP, IBM, Red Hat, Rackspace, Dell, Cisco, Intel, VMware, 18

OpenStack http://stackalytics.com/ 19

Cloud SDK Apache project Java (and Clojure) Easy Portable Cloud-agnostic Community Open source jclouds 20

jclouds https://jclouds.apache.org/ 21

jclouds HTTP requests, responses, retries Authentication and re-authentication Pagination Polling Rate limits Retries Abstractions Logging Less code 22

jclouds 23

jclouds Services Storage Compute VM Images Load Balancers DNS Databases Providers Openstack Rackspace HP Amazon Azure 24

Compute Providers 25 jclouds AWS aws-ec2 US-VA,US-CA,IE,SG Bluelock bluelock-vcloud-zone01 US-IN CloudSigma US cloudsigma-lvs US-NV CloudSigma CH cloudsigma-zrh CH-ZH CloudSigma DC cloudsigma-wdc US-DC DigitalOcean digitalocean ElasticHosts GB elastichosts-lon-b GB-LND ElasticHosts GB elastichosts-lon-p GB-LND ElasticHosts US elastichosts-sat-p US-TX Go2Cloud go2cloud-jhb1 ZA-GP GoGrid gogrid US-CA,US-VA Green House Data greenhousedata-elementvcloud US-WY HP hpcloud-compute US-NV Ninefold ninefold-compute AU-NSW OpenHosting openhosting-east1 US-VA Rackspace UK (First Gen) cloudservers-uk GB-SLG Rackspace US (First Gen) cloudservers-us US-IL,US-TX Rackspace UK (Next Gen) rackspace-cloudservers-uk GB-SLG Rackspace US (Next Gen) rackspace-cloudservers-us US-IL,US-TX SeverLove serverlove-z1-man GB-MAN SkaliCloud skalicloud-sdg-my MY-10 SoftLayer softlayer

jclouds Showcase database code Best practices Compare with compute code Gotchas and workarounds Abstractions 26

Requirements Maven 3 Java 7+ jclouds Windows or Linux [etc..] (thanks Java!) 27

Java Project Skeleton Project Initialize API Create Instance Create Database Create User Test Connection Cleanup 28

Maven Dependencies Selective subset Versioning jclouds-labs Java Project 29

POM https://github.com/jclouds/jclouds-examples/blob/master/rackspace/pom.xml <dependency> <groupid>org.apache.jclouds.provider</groupid> <artifactid>rackspace-clouddatabases-us</artifactid> <version>${jclouds.version}</version> </dependency> <dependency> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <version>5.1.25</version> </dependency> 30

POM mvn dependency:copy-dependencies "-DoutputDirectory=./lib" 31

Logging // This module is responsible for enabling logging Iterable<Module> modules = ImmutableSet.<Module> of(new SLF4JLoggingModule()); ComputeServiceContext context = ContextBuilder.newBuilder(provider).credentials(username, apikey).modules(modules) // don't forget to add the modules to your context!.buildview(computeservicecontext.class); logback.xml <configuration scan="false"> <appender name="wirefile" class="ch.qos.logback.core.fileappender"> <file>target/test-data/jclouds-wire.log</file> <encoder> <Pattern>%d %-5p [%c] [%thread] %m%n</pattern> </encoder> </appender> 32

Java Project Skeleton Project Initialize API Create Instance Create Database Create User Test Connection Cleanup 33

Initialize private final TroveApi troveapi; troveapi = ContextBuilder.newBuilder("rackspace-clouddatabases-us").credentials(username, apikey).buildapi(troveapi.class); 34

Architecture jclouds-database Abstractions Trove Implementation code Increasing level of abstraction Cloud Databases Provider settings: Endpoint, etc. 35

Architecture Not implemented jclouds-database Abstractions Trove Implementation code Increasing level of abstraction Cloud Databases Provider settings: Endpoint, etc. 36

Initialize private final FlavorApi flavorapi; flavorapi = troveapi.getflavorapiforzone(zone); 37

TroveApi APIs FlavorApi InstanceApi DatabaseApi UserApi Utils 38

Java Project Skeleton Project Initialize API Create Instance Create Database Create User Test Connection Cleanup 39

Create Instance Flavor flavor = Iterables.getFirst(flavorApi.list(), null); Instance instance = instanceapi.create(flavorid, size, name); flavor.getid() Volume size in GB 40

Create Instance Instance updatedinstance = awaitavailable(instance, instanceapi); 41

Create Instance Instance updatedinstance = awaitavailable(instance, instanceapi); Polls status, waits until ready. Will not retry by itself! 42

Actual Code InstanceApi instanceapi = api.getinstanceapiforzone(zone); for (int retries = 0; retries < 10; retries++) { Instance instance = null; try { instance = instanceapi.create(flavorid, size, name); } catch (Exception e) { Uninterruptibles.sleepUninterruptibly(15, TimeUnit.SECONDS); logger.error(arrays.tostring(e.getstacktrace())); continue; } Instance updatedinstance = awaitavailable(instance, instanceapi); if (updatedinstance!= null) { return updatedinstance; } instanceapi.delete(instance.getid()); InstancePredicates.awaitDeleted(instanceApi).apply(instance); } return null; 43

Utils. getworkinginstance( String zone, String name, String flavorid, int size) Actual Code 44

Java Project Skeleton Project Initialize API Create Instance Create Database Create User Test Connection Cleanup 45

Create Database troveapi = ContextBuilder.newBuilder(PROVIDER).credentials(username, apikey).buildapi(troveapi.class); instanceapi = troveapi.getinstanceapiforzone(zone); databaseapi = troveapi.getdatabaseapiforzoneandinstance(zone,getinstance().getid()); getsomeapiforxandyandz fairly common in jclouds 46

Create Database boolean result = databaseapi.create(name); 47

Java Project Skeleton Project Initialize API Create Instance Create Database Create User Test Connection Cleanup 48

Create User userapi = troveapi.getuserapiforzoneandinstance(zone, instance.getid()); boolean result = userapi.create(uname, PASSWORD, DBNAME); User name User password Database name 49

Java Project Skeleton Project Initialize API Create Instance Create Database Create User Test Connection Cleanup 50

Load balancer needed! Test Connection CreateLoadBalancer createlb = CreateLoadBalancer.builder().name(NAME).protocol("MYSQL").port(3306).algorithm(LoadBalancer.Algorithm.RANDOM).nodes(addNodes).virtualIPType(VirtualIP.Type.PUBLIC).build(); 51

Test Connection loadbalancer = lbapi.create(createlb); 52

Test Connection StringBuilder connstring = new StringBuilder(); connstring.append("jdbc:mysql://"); connstring.append(getvirtualipv4(getlb().getvirtualips())); connstring.append("/"); connstring.append(dbname); connstring.append("?user="); connstring.append(uname); connstring.append("&password="); connstring.append(password); 53

Test Connection Connection conn = DriverManager.getConnection(connString.toString()); 54

Test Connection Statement stmt = conn.createstatement(); ResultSet rs = stmt.executequery("select 3+5"); rs.first(); System.out.format(" 3+5 is %s%n", rs.getint(1)); 55

jclouds examples Going forward https://github.com/jclouds/jclouds-examples More docs http://jclouds.incubator.apache.org/documentation/ http://javadocs.jclouds.cloudbees.net/ Maven alternatives? http://jclouds.incubator.apache.org/documentation/use rguide/installation-guide/ Contribute! https://wiki.apache.org/jclouds/how%20to%20contrib ute 56

Linux Java Project Compile javac -classpath "lib/*:src/main/java/:src/main/resources/" src/main/java/org/jclouds/examples/rackspace/*.java Run java -classpath "lib/*:src/main/java/:src/main/resources/" org.jclouds.examples.rackspace.clouddatabases.createinstance username apikey 57

Windows Java Project Compile javac -classpath "lib/*;src/main/java/;src/main/resources/" src/main/java/org/jclouds/examples/rackspace/*.java Run java -classpath "lib/*;src/main/java/;src/main/resources/" org.jclouds.examples.rackspace.clouddatabases.createinstance username apikey 58

TroveApi Going forward Backup Extension Settings Extension Clustering Abstraction layer 59

TroveApi Going forward Backup Extension Settings Extension Abstraction layer CouchDB Rackspace Microsoft Amazon Salesforce 60

TroveApi Going forward Backup Extension Settings Extension Abstraction layer CouchDB Rackspace Microsoft Amazon Salesforce 61

Going forward Trove Roadmap 62

Going forward Collaborate! http://jclouds.apache.org/ http://jclouds.apache.org/community/ 63

Implementing an API On to the IDE 64

Thank you! http://developer.rackspace.com sdk-support@rackspace.com Zack Shoylev Software Developer zacksh #jclouds @zackshoylev 65