View
229
Download
0
Category
Preview:
Citation preview
MySQL and Docker Strategies PatrickGalbraithGiuseppeMaxia
About the speakers ● PatrickGalbraith(patg@patg.net)● HPAdvancedTechnologyGroup● HasworkedatBlueGecko,MySQLAB,Classmates,
Slashdot,CobaltGroup,USNavy,K-mart● MySQLprojects:memcachedUDFs,DBD::mysql,federated
storageengine● NewtechnologiesandautomaRon● Family● Outdoors
About the speakers GiuseppeMaxia,a.k.a."TheDataCharmer"
QAArchitectatVMware25+yearsdevelopmentandDBexperienceLongRmerMySQLcommunitymember.
OracleACEDirectorBlog:hZp://datacharmer.blogspot.com
TwiZer:@datacharmer
What are containers?
Server
HostOS
Hypervisor
GuestOS
GuestOS
GuestOS
Bins/Libs
Bins/Libs
Mysql
Bins/Libs
Mysql App
Server
HostOS
Bins/LibsBins/Libs
Mysql
Mysql
App
App
App
Mysql D
ocker
VM Containers
Containers vs. VMs
● MulRpleisolateduserspaceinstances● OnlylibrariesandcomponentsneededforapplicaRon● Runsonthesamekernel(usingCgroups).● Muchsmaller,easiertopackage● VERYfasttostart!● Containerrunsusing(a)specificprocess(es)● SSHnotneeded● Securitylimitedtoapp
What is Docker? ● Bothadaemonandacommandlinetool● ApplicaRonthatmanagescontainers(CLI,API)● AutomatesthedeploymentofapplicaRonsinsidesoawarecontainers
● WriZeninGo,OpensourcedotCloud● Usesunionfilesystem(AUFS)● CanuseCLItosearchDockerreposforimages● Usedtobe‘awsomesauce’aroundlxc,nowusinglibcontainer
● No“dependencyhell”
Two ways to Docker • FortesRng
• Quickmanualdeployment(1–10containers)• EasyconfiguraRon• Rapiddeploy-test-destroy-retrycycle• Workseverywhere
• ForproducRon• Quicktool-assisteddeployment(100,1000,…Ncontainers)• Maintainedbyorchestrators• Perishablebydefault• Easytoreplace
Virtual Machines
Containers
Docker concepts
Giuseppe’s Agenda (20 min)
• DifferencebetweenVMsandContainers(Patrick)• Twocasesforcontainers(testandprod)• Sevenkeypoints(fullsystem–Linux–minimal–passwords–isolaRon–volumes–configuraRon)• Sharedvolumeforbackup• Simpleexample• Morecomplexexample• InspecRngacontainer• (Quickdemo)
Installing Docker
1. GOTOhZps://docs.docker.com/engine/installaRon/2. FollowtheinstrucRonsforyourO.S.
First off: get the MySQL image $ docker pull mysql/mysql-server Using default tag: latest latest: Pulling from mysql/mysql-server 5e7ce0e805ba: Pull complete 4b9736773855: Pull complete 4fb9c55b1f85: Pull complete 19452ca711c2: Pull complete 0c660f33db44: Pull complete b8e96405c8c7: Pull complete 9bdbb574fa66: Pull complete 24c2343e048d: Pull complete Digest: sha256:da24eddcb99cbeba979d7da8170991278ca59838401a7c7bf17c66307acc641c Status: Downloaded newer image for mysql/mysql-server:latest
SEVEN key points
#1 - Containers are FULL systems
• Everycontainercontainsanexecutablelayer• It'safullO.S.
#2 – Containers are always Linux
• Linuxflavorinthecontainerisindependentfromthehost• ButtheyhaveacompaRblekernel• That’swhycontainersarefasterthanVMs
#3 – The O.S. in the container is minimal
• Don’texpectallthetoolsyougetfromaUbuntuDVD• YouwillhaveonlythebareessenRals
#4 – MySQL installaYon requires a password
• Securityvariesdependingonthemaintainer• Youmayusefiles(recommended)• Youmaygeneratearandompassword(don’t)
#5 – Containers are ISOLATED
• YoucanaccesscontainerizedMySQLfromothercontainers• Youneedexplicitaccessfromtheexterior.
#6 – Data storage can be tricky
• Bydefault,thedatadirectoryisinsidethecontainer• ContainersarevolaRlebydefaultandbydesign• Youmustusevolumestopreserveyourdata
#7 – ConfiguraYon is done by adding files
• WithVM,youdeployandthenconfigure.ThistakesRme• Withcontainer,youdeployandaddconfiguraRonfileson-the-fly• Containersarereadytoworkfromthestart.
Examples
Simple MySQL deployment
docker run \ --name mybox \ -e MYSQL_ROOT_PASSWORD=secret \ -d \ mysql/mysql-server 06d3392543500455adcfe6cba36736739c46688de8028647d38109c0ec3cf250 # WILL RUN WITH DEFAULT VALUES
Adding log-bin and server-id (1)
## OPTION 1 : on the command line docker run \
--name mybox \
-e MYSQL_ROOT_PASSWORD=secret \
-d \
mysql/mysql-server --log-bin --server-id=100
Adding log-bin and server-id (2) ## OPTION 2 : with a "volume" file $ cat minimal.cnf [mysqld] user=mysql log-bin=mysql-bin server-id=100 $ docker run \ --name mybox \ -e MYSQL_ROOT_PASSWORD=secret \ -d --hostname mybox \ -v $PWD/minimal.cnf:/etc/my.cnf mysql/mysql-server
InspecYng a container
docker exec -ti mybox bash [root@mybox /]# mysql -p Enter password: [...] Server version: 5.7.11-log MySQL Community Server (GPL) [...] mysql> select @@server_id; +-------------+ | @@server_id | +-------------+ | 100 | +-------------+ 1 row in set (0.00 sec)
Shared backup with containers
database server
Physical hostshared folder
Shared container
database server
database server
Shared backup with containers
$ docker create -v /dbdata \ --name dbdata mysql/mysql-server /bin/true
$ docker run --name mysql1 \
-e MYSQL_ROOT_PASSWORD=secret \
--volumes-from dbdata -d mysql/mysql-server
$ docker run --name mysql2 \
-e MYSQL_ROOT_PASSWORD=secret \
--volumes-from dbdata -d mysql/mysql-server
Demo
Shared backup with containers
$ docker create -v /dbdata \ --name dbdata mysql/mysql-server /bin/true
$ docker run --name mysql1 \
-e MYSQL_ROOT_PASSWORD=secret \
--volumes-from dbdata -d mysql/mysql-server
$ docker run --name mysql2 \
-e MYSQL_ROOT_PASSWORD=secret \
--volumes-from dbdata -d mysql/mysql-server
Container AutomaYon
• Ansible(hZp://docs.ansible.com/ansible/docker_module.html) • YAML• Defineanynumberofcontainers• Variousansiblemodulesforbuilding,running,andfact-gatheringandservicediscoveryofcontainersaswellasmanagingimages• dynamicinventoryplugin.
• DockerCompose(hZps://docs.docker.com/compose/)• DefineandrunmulRplecontainerizedapplicaRons
Container AutomaYon (cont)
• Chef(hZps://docs.chef.io/containers.html)• Dockercookbook--installandmanageDocker,managecontainersandimages• Etcdandconsulcookbooks–servicediscovery
• Puppet(hZps://forge.puppet.com/puppetlabs/docker_plaporm) • Packer(hZps://www.packer.io)
• creaRngidenRcalmachineimagesformulRpleplapormsfromasinglesourceconfiguraRon
Ansible Example ---
- hosts: "{{ target|default('docker') }}”
sudo: false
tasks:
- name: run db1 container
local_action:
module: docker
name: db1
pull: missing
Ansible Example (cont) image: registry-host:443/db-img hostname: db1
state: started
restart_policy: always
volumes:
- /var/data/db1-data:/var/lib/mysql
- /var/data/backups:/var/data/site/backups
- /home:/home
detach: True
ansible-playbook –i inv.txt db1.yaml
Container Clustering
• Kubernetes--hZp://kubernetes.io/• CoreOS--hZps://coreos.com/ • Swarm--hZps://docs.docker.com/swarm/overview/• Mesos--hZp://mesos.apache.org/ • RancherOS--hZp://rancher.com/rancher-os/ • Deis--hZp://deis.io/ • Kupack• Redspread• KPM
Kubernetes
Galera on Kubernetes
Apiserver
pxc_node1pod
pxc_node2pod
pxc_node3pod
pxccontainer pxccontainer pxccontainer
pxc_node1service
pxc_node2service
pxc_node3service
pxc_clusterservice
pxc_node1podandservicefile
pxc_node2podandservicefile
pxc_node3podandservicefile
kubectl
pxc_clusterServicefile
Formoreinfo…4:30pmto5:20pmBallroomA
Demo
Summary
• Technologyrapidlyevolving• Containersgoodforprototyping(manually)• AndforproducRon(withtools)• GreatfordistribuRngsoaware(dev&produsethesamebits)• NOTvirtualmachines(eveniftheyplayoneonTV)
• hZp://www.datacharmer.blogspot.com/• hZp://patg.net
Recommended