elastic scalability in mysql fabric using openstack

43
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Elastic Scalability in MySQL Fabric using OpenStack Mats Kindahl Senior Principal Software Developer Narayanan Venkateswaran Principal Software Developer Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

Upload: mats-kindahl

Post on 01-Dec-2014

497 views

Category:

Software


4 download

DESCRIPTION

Elastic scalability, the ability to quickly adapt to changing demands for resources, is critical to running modern applications. Both over- and underallocation of resources have an impact on a business’s bottom line. OpenStack is a cloud operating system that achieves elastic scalability by managing the allocation of compute, storage, and network resources. MySQL Fabric is a new member of the community enabling large database systems to be managed easily, providing support for handling high availability and sharding. In this session, you will learn how to leverage OpenStack and MySQL Fabric to build a system in which resources can be added on demand, providing elastic scalability, sharding, and high availability as a single system.

TRANSCRIPT

Page 1: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |

Elastic Scalability inMySQL Fabric usingOpenStack

Mats KindahlSenior Principal Software Developer

Narayanan VenkateswaranPrincipal Software Developer

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

Page 2: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |

Safe Harbor Statement

The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

2014-10-02

Page 3: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Session Outline

Elasticity in Computing1

2

3

4

5

OpenStack

Introduction to MySQL Fabric

Elasticity in MySQL Fabric using OpenStack

Closing Remarks & Thoughts for the Future

Page 4: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Elasticity in Computing

Page 5: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

“[Elasticity] is defined as the degree to which a system is able to adapt to workload changes by provisioning and deprovisioning resources in an autonomic manner”

What is Elasticity?

Page 6: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Elasticity from our Perspective● Managing read load

– Read load increases– Problem: Read servers

overloaded– Solution: Add more read

servers● Managing shards

– A shard is hot or full– Problem: slower queries– Solution: Split the shard

• Managing server failures– A server in a group fails– Slave is promoted– Problem: Availability is

affected– Solution: Add replacement

node

Page 7: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

OpenStack

Page 8: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

“OpenStack is a free and open-source software cloud computing software platform”

What is OpenStack?

What is that?

Page 9: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Cloud Computing According to NIST● Resouce pooling

– Resources are assigned and reassigned based on customer demand

● Broad network access– Capabilities are accessed over the network through standard mechanisms

● Measured service● On-demand self-service

– Customer can unilaterally provision computing capabilities

● Rapid elasticity– Capabilities can be elastically provisioned and released

Page 10: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

OpenStack Deployment Example

● Controller Node– Manages Identities– Manages Images– Manages Block Storage

● Compute Node– (Virtual) machine host– Contain hypervisor– Spawn and destroy virtual

machines

Controller

Compute(VM Host)

Page 11: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Introduction toMySQL Fabric

Page 12: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

What is MySQL Fabric?

An extensible and easy-to-use framework for managing a farm of MySQL servers supporting high-availability and sharding

Page 13: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

What does all that mean?

● Management System– Manages a MySQL Farm– Distributed Framework

● Framework– Procedure execution– State store– Transaction Routing

● Extensible– Extensions are first-class– High-availability groups– “Semi-automatic” sharding

● Written in Python● Latest Release 1.5.2 GA● Open Source

– You can participate– Suggest features– Report bugs– Contribute patches

● MySQL 5.6 is focus

Page 14: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

MySQL Fabric: Goals & Features

● Decision logic in connector– Eliminates network hop– Reduce network load– Eliminate single point of failure– Scale naturally: not a bottleneck

● Connector API extensions– Support transactions– Support full SQL

● Load balancing– Read-write split– Weighted round-robin

● Cloud integration– Support elasticity– Servers on-demand

● Multi-table sharding● Sharding functions

– Range– (Consistent) hash

● Shard operations– Shard move– Shard split

● Global updates– Global tables– Schema updates

Page 15: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

A Brief History of MySQL Fabric

● MySQL Fabric 1.4– First public release Sept 2013– MySQL Fabric 1.4.3 GA May 2014– High-availability groups– Failure detection– Load balancing– Range and hash sharding– Shard move and split– Connector/J support– Connector/PHP support– Connector/Python support– Doctrine– Hibernate

● MySQL Fabric 1.5– MySQL Fabric 1.5.1 RC in Aug 2014– MySQL Fabric 1.5.2 GA in Sept 2014– Cloud Integration (WL#6432)– MySQL-RPC support (WL#7600)– Connector/NET support– Labs: C API

Page 16: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Birds-eye View

High Availability Groups

Application

XML-RPCMySQL-RPC

SQL

SQL

Connector

Connector

Connector

Operator

MySQLFabricNode

DatabaseServers

Page 17: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

High-Level Components

● Fabric-aware Connectors– Python, PHP, Java, .NET, C– Enhanced Connector API

● MySQL Fabric Node– Manage information about farm– Provide status information– Execute procedures

● MySQL Servers– Organized in high-availability

groups– Handling application data

High AvailabilityGroup

ApplicationConnector

Connector

Connector

MySQLFabricNode

Page 18: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

MySQL Fabric Node Architecture

MySQL

MySQL FabricFramework

Executor State Store(Persister)

Sh

?HA

MySQL-RPCAMQP XML-RPC

?Connector

Connector

Connector

Protocols

Extensions

BackingStore

Page 19: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

High-Availability Concepts

● Redundancy– Duplicate components

● Monitoring– Detecting failing components– Monitor load

● Procedures– Activate replacements– Distribute load

Page 20: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

MySQL Fabric and the CloudUsing OpenStack for Elasticity

Page 21: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Server Providers● Server Creation

– Create new server instances● Internal Memory● Disk Size● Number of CPUs

– Configured for the purpose● GTID enabled● Binary log enabled● Correct engines enabled

● Server Filling– Fill instance with data

● Clone from an existing server● Restore a backup

– Set up replication● Point secondary to primary

– Custom filling operation

Already handled

in MySQL Fabric

MySQL Fabric + Cloud

Page 22: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Server Providers● A “server factory”

– Abstract concept

– Extension interface added to MySQL Fabric

● Possible to support multiple providers– OpenStack Nova (in MySQL Fabric 1.5)

– OpenStack Trove

– Amazon AWS

– Amazon RDS

– Custom hardware registry

Page 23: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

MySQL Fabric and OpenStack

MySQL Fabric NodeOpenStack Instance

Application

High-Availability Groups / Shards

Page 24: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Adding a new provider to MySQL Fabric● Register a provider with MySQL Fabric● Provide API address and user credentials● Provider type OPENSTACK spawns new virtual machines

mysqlfabric provider register my_stack mats xyzzy http://example.net:5000/v2.0/ my_project --provider_type=OPENSTACK

Page 25: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Creating a new server from MySQL Fabric● Create a new machine using the registered provider● Provide an image to use for the machine

– You have to set up the image beforehand

● Provide a cloud-init script to set up MySQL server

mysqlfabric machine create my_stack --image name=”Oracle Linux 7 amd64” --flavor name=m1.small --userdata=mysql-oracle-linux-init

Page 26: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Creating a snapshot from MySQL Fabric● Create a snapshot of an existing machine● Return an provider-internal name of the snapshot● Can be used to create your “golden image”

mysqlfabric snapshot create my_stack 903476b7-db4d-4d63-84e6-f79c7d0cec31

Page 27: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Elasticity using providers● Read load increases

– Spawn new read servers

– Add them to the group

● Shard is overloaded– Spawn new servers for a shard

– Create a new shard

– Split existing shard

● Server is lost– High-availability is reduced

– Spawn new server

– Add it to the group

Can we automate this?

Yes, we can!

Page 28: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

MySQL Fabric executor● Event driven

– Events will trigger execution of procedures

– Procedures can trigger events themselves

– Each step of a procedure is called a job

● Procedures– Written in Python

– Interacts with servers

– Write state changes into backing store

– Lock manager for conflict resolution● Conservative two-phase locking strategy● Avoid deadlocks

Queue

BackingStore

Events

Page 29: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Automatically adding a server to a group

● Register procedure for event– @on_event decorator

– Accept event to register for

● Fetch the group the server belonged to

● Fetch a new server from the provider

● Add the server to the group

@on_event(SERVER_LOST)def _add_server(group_id, server_uuid):    group = Group.fetch(group_id)    machines = PROVIDER.create_machines(        parameters    )    server = MySQLServer(        server_uuid, address    )    MySQLServer.add(server)    group.add(server)    _configure_as_slave(server)

Page 30: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

MySQL Fabric procedure execution● Before starting a job:

– Aquire the necessary locks

– Checkpoint execution state in backing store

– Start a transaction on the backing store

● When executing job:– Make updates to backing store inside transaction

– Interact with servers

● After executing a job:– Mark job completed in internal log

– Commit transaction on backing store

Queue

BackingStore

Events

What about crashes?

Page 31: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

MySQL Fabric executor recovery● Two types of jobs:

– Idempotent: Restart the job

– Not idempotent: Execute compensation

● Recovery procedure– Start the executor

– Collect unfinished checkpoints

– Execute compensation activity for each job associated with the checkpoint

… if there is one

– Re-schedule each job

Queue

BackingStore

Events

Page 32: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Defining an compensation procedure

● Use the @undo decorator● Compensating action

– Search for the machine by UUID

– Give it back to provider

● Compensating actions need to be idempotent

@_add_server.undodef _undo_add_srv(group_id, server_uuid):

    meta_filters = {       'mysql­fabric­machine­group­uuid':       server_uuid    }

    machines = MANAGER.search_machines(        {}, meta_filters    )

    for machine in machines:        MANAGER.destroy_machine(            machine.uuid        )

Page 33: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Example using Rackspace Provider

mysqlfabric provider register my_rackspace   mats xyzzy https://lon.identity.api.rackspacecloud.com/v2.0/   ­­tenant accountnumber   ­­extra auth_system=rackspace   ­­provider_type OPENSTACK

mysqlfabric machine create my_rackspace   ­­image id=8c964b3f­8c15­4966­86ee­7a55824df564   ­­flavor name="512MB Standard Instance"

Note

Require support for authentication plugins

(coming)

Page 34: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Experiments with Amazon AWS

mysqlfabric provider register my_amazon   AKIAIOSFODNN7EXAMPLE wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY   eu­west­1 ­­provider_type=AMAZON

mysqlfabric machine create my_amazon   ­­image image­id=ami­892fe1fe   ­­flavor name=t2.micro

Note!Not in MySQL Fabric 1.5Will be on MySQL Labs

Page 35: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Experiments with OpenStack Trove

mysqlfabric provider register my_trove   mats xyzzy https://lon.identity.api.rackspacecloud.com/v2.0/   ­­tenant 123456   ­­extra service_type=rax:database   ­­provider_type=OPENSTACK.DATABASE

mysqlfabric server create my_trove   ­­flavor name="512MB Instance" ­­size 1   ­­users mats:xyzzy ­­databases employee   ­­datastore MySQL ­­datastore_version 5.6 Note!

Not in MySQL Fabric 1.5Will be on MySQL Labs

Page 36: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Closing remarks

Page 37: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

What do we have now?● High-availability

– Group Concept– Slave promotion

● Sharding– Range and hash sharding– Shard move and shard split

● Connector APIs– Transaction properties– “Virtual” connections

● Cloud integration– “Server providers”– OpenStack Nova

● Enhanced connectors– Connector/Python– Connector/PHP– Connector/J– Connector/NET

● Interfaces– Command-line– XML-RPC– MySQL-RPC

● Distributed failure detector– Connectors report failures– Custom failure detectors

● Credentials– RFC 2617– SSL support

Page 38: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Thoughts for the Future

● Connector multi-cast– UNION of result sets– More complex operations?

● Extension interfaces– Improve extension support– Improve procedures support

● Command-line interface– Focus on ease-of-use

● Cloud support– OpenStack Trove– Amazon AWS– Amazon RDS

● More protocols– MySQL-RPC Protocol?

● More frameworks?– Django?

● More connectors?– C/C++?– Fabric-unaware connectors?

● More HA group types– DRBD– MySQL Cluster– Amazon RDS?

Done!

In Labs!

Page 39: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Thoughts for the Future

● Automatic sharding– Single-query transactions?– Speculative execution?– Cross-shard queries?

● Multiple shard mappings– Independent tables

● Multi-way shard split– Efficient initial sharding– Better use of resources

● Highly-available executor– Node failure stop execution

● Execution restart on recovery– Replicated State Machine (RSM)

● Paxos?● Raft?

– Fail-over execution

● Session consistency– We have a distributed database– It should look like a single database– Read monotonicity– Write monotonicity

Page 40: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Reading for the Interested

● MySQL Forum: Fabric, Sharding, HA, Utilitieshttp://forums.mysql.com/list.php?144

● MySQL Fabric Documentationhttp://dev.mysql.com/doc/mysql-utilities/1.4/en/fabric.html

● Migrating From an Unsharded to a Sharded Setuphttp://vnwrites.blogspot.com/2013/09/mysqlfabric-sharding-migration.html

● Configuring and running MySQL Fabrichttp://alfranio-distributed.blogspot.com/2014/03/mysqlfabric-installation.html

Page 41: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Want to contribute?

● Check it– … and send us use-case and feature suggestions

● Test it– … and send comments to the forum

● Break it– … and send in bugs to http://bugs.mysql.com

Page 42: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |2014-10-02

Mats KindahlTwitter: @mkindahlhttp://mysqlmusings.blogspot.com

Alfranio CorreiaTwitter: @alfraniohttp://alfranio-distributed.blogspot.com

Keeping in Touch

Narayanan VenkateswaranTwitter: @vn_tweetshttp://vnwrites.blogspot.com

Geert VanderkelenTwitter: @geertjanvdkhttp://geert.vanderkelen.org

Page 43: Elastic Scalability in MySQL Fabric Using OpenStack

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |

Safe Harbor Statement

The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

2014-10-02