MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Kasus penggunaan MariaDB dan Docker, Bagian 1

Beberapa pertanyaan paling umum yang diajukan oleh pengguna kami adalah mengenai dukungan MariaDB di Docker, dan khususnya bagaimana dukungan tersebut dapat digunakan dalam pengembangan atau penerapan produksi tertentu. Rangkaian artikel ini akan mencoba membahas beberapa kasus penggunaan Docker dan MariaDB.

Mengapa memilih Docker untuk MariaDB?

  • Container Docker dapat digunakan untuk menguji, men-deploy, dan merilis aplikasi dalam lingkungan apa pun.
  • Penerapan Docker dapat diotomatisasi dengan mudah, menciptakan lingkungan penerapan dan mereproduksinya dengan mudah dalam staging dan produksi.
  • Docker adalah virtualisasi ringan. Hypervisor tidak diperlukan, dan wadah MariaDB Docker akan berfungsi sama baiknya dengan penginstalan MariaDB normal tanpa overhead yang mencolok.
  • Docker bersifat agnostik – setelah Anda menginstal Docker di OS Anda, instruksi untuk menjalankan container sama persis, baik Anda menjalankan CentOS, Debian atau Ubuntu, atau bahkan Mac OS X dan Windows.

Beberapa poin penting tentang container Docker

  • Kontainer buruh pelabuhan tidak dapat diubah. Mereka tidak dapat dengan mudah dimodifikasi setelah dimulai (kecuali Anda melampirkannya dan menghancurkan semuanya).
  • Secara default dan karena hal di atas, data tidak persisten. Docker menggunakan volume data untuk memperbaikinya. Wadah MariaDB menggunakan volume untuk menyimpan data (lebih lanjut tentang ini nanti).

Status MariaDB di Docker

MariaDB selalu didukung dengan sangat baik di Docker selama beberapa tahun, berkat banyak upaya oleh tim dan komunitas Docker. Hingga hari ini, Docker mendukung ketiga rilis MariaDB:5.5, 10.0 dan 10.1. Wadah buruh pelabuhan MariaDB memiliki kekhususan berikut:

  • Kata sandi root MariaDB dapat disetel atau dibuat melalui variabel lingkungan.
  • Pengguna baru dan database kosong dapat dibuat melalui proses yang sama seperti di atas.
  • Instance memiliki volume data persisten /var/lib/mysql default, yang dapat Anda izinkan untuk dikelola oleh buruh pelabuhan secara internal atau dipasang ke direktori pilihan Anda.
  • Contoh container dapat dipasang pada volume data yang ada (misalnya cadangan).
  • Port jaringan dapat diikat ke port sembarang di sisi host.
  • Basis pengetahuan MariaDB memiliki artikel dokumentasi yang luas tentang buruh pelabuhan. Bacalah!

Kasus penggunaan Docker #1:Multi Tenancy

Kasus penggunaan umum untuk MariaDB dan Docker menjalankan beberapa instance MariaDB pada host fisik yang sama. Sudah ada solusi seperti MySQL Sandbox dan lainnya, namun tidak ada satupun yang memberikan fleksibilitas, kemudahan penggunaan, dan kekuatan yang ditawarkan Docker.

Untuk mengilustrasikan poin kita, mari kita mulai tiga instance MariaDB yang berbeda, masing-masing menjalankan versi utama yang berbeda:

docker run -d -p 3301:3306 -v ~/mdbdata/mdb55:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin --name mdb55 mariadb:5.5
docker run -d -p 3302:3306 -v ~/mdbdata/mdb10:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin --name mdb10 mariadb:10.0
docker run -d -p 3303:3306 -v ~/mdbdata/mdb11:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin --name mdb11 mariadb:10.1

Docker akan secara otomatis menarik gambar mariadb resmi dari repositori dan meluncurkannya. Sekarang kita cukup terhubung ke salah satu instance tersebut menggunakan port dan kata sandi yang disediakan:

$ mysql -u root -padmin -h 127.0.0.1 -P3302
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 2
Server version: 10.0.22-MariaDB-1~jessie mariadb.org binary distribution Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

Perhatikan bahwa setiap instance kami akan menggunakan volume data persisten yang terletak di bawah ~/mdbdata direktori – Docker akan secara otomatis membuat pohon direktori ini untuk kita.

Sekarang setelah kita selesai melakukannya, mari kita selidiki fitur-fitur canggih Docker. Docker mendukung grup kontrol Linux (cgroups), yang dapat digunakan untuk membatasi, memperhitungkan, atau mengisolasi penggunaan sumber daya. Katakanlah kita menginginkan instance MariaDB 10.1 kita (bernama mdb11 ) untuk memiliki prioritas CPU yang lebih tinggi daripada dua instans lainnya. Dalam hal ini kita dapat menurunkan bagian CPU mdb10 dan mdb55 . Setiap instance memiliki 1024 pembagian CPU maks secara default, jadi mari kita buat ulang mdb55 kita dan mdb10 container dengan masing-masing 512 CPU.

Dalam pembukaan kami mengatakan bahwa wadah Docker tidak dapat diubah. Jika kita ingin mengubah parameter container kita, kita harus menghapusnya. Ini bukan masalah karena kami telah menetapkan volume data persisten di ~/mdbdata, jadi konten sebenarnya dari database kami akan tetap ada saat kami membuat ulang container.

docker rm -f mdb55 mdb10
docker run -d -p 3301:3306 --cpu-shares=512 -v ~/mdbdata/mdb55:/var/lib/mysql --name mdb55 mariadb:5.5
docker run -d -p 3302:3306 --cpu-shares=512 -v ~/mdbdata/mdb10:/var/lib/mysql --name mdb10 mariadb:10.0

Kami telah membuat ulang dua instans MariaDB dengan masing-masing 512 CPU yang dibagikan. Ini adalah batas lunak, dan hanya diberlakukan ketika proses bersaing untuk siklus CPU. Jika instans lain menganggur, instans apa pun dapat menggunakan hingga 100% dari semua CPU. Dalam praktiknya, ini berarti bahwa jika ketiga instance menggunakan CPU secara bersamaan, masing-masing dari dua container pertama, yang masing-masing memiliki 512 share, (mdb55 dan mdb10 ) akan dapat menggunakan hingga 25% dari semua CPU, sedangkan penampung ketiga, yang memiliki 1024 bagian, akan dapat menggunakan hingga 50% dari semua CPU.

Opsi lainnya adalah mengikat instance ke inti CPU tertentu, jadi mari buat ulang container dan lakukan itu:

docker rm -f mdb55 mdb10 mdb11
docker run -d -p 3301:3306 --cpuset-cpus=0 -v ~/mdbdata/mdb55:/var/lib/mysql --name mdb55 mariadb:5.5
docker run -d -p 3302:3306 --cpuset-cpus=1 -v ~/mdbdata/mdb10:/var/lib/mysql --name mdb10 mariadb:10.0
docker run -d -p 3303:3306 --cpuset-cpus=2-3 -v ~/mdbdata/mdb10:/var/lib/mysql --name mdb11 mariadb:10.1

Pada contoh di atas, dengan sistem 4 CPU Core, container saya mdb55 dan mdb10 masing-masing akan berjalan pada inti CPU tunggal yang terpisah sedangkan mdb11 akan kedua inti yang tersisa.

Kami juga dapat mengontrol cara wadah kami mengakses disk dan sumber daya memori, yang pasti berguna pada sistem yang sibuk – Anda tidak ingin kueri pengembangan yang tidak terkendali menggunakan semua disk dari instance pengujian beban Anda, misalnya. Sementara batas memori mudah, pembagian blok IO bekerja dengan cara yang sama seperti pembagian CPU, kecuali bahwa pembagian blok IO default adalah 500 dalam kisaran 10 hingga 1000.

Mari batasi dua kontainer pertama kita menjadi 512M memori dan 250 blok berbagi IO:

docker rm -f mdb55 mdb10
docker run -d -p 3301:3306 --blkio-weight=250 --memory=512M -v ~/mdbdata/mdb55:/var/lib/mysql --name mdb55 mariadb:5.5
docker run -d -p 3302:3306 --blkio-weight=250 --memory=512M  -v ~/mdbdata/mdb10:/var/lib/mysql --name mdb10 mariadb:10.0

Serupa dengan apa yang telah kita lihat dalam contoh pembagian CPU, jika ketiga instans bersaing untuk IO, masing-masing dari dua kontainer pertama akan dibatasi hingga 25% dari kapasitas IO yang tersedia, kontainer ketiga dibatasi pada kapasitas yang tersisa, mis. 50%.

Ada lebih banyak lagi kendala runtime Docker yang telah kita bicarakan di sini di artikel ini. Harap baca referensi ekstensif Docker run untuk mengetahui semua opsi yang memungkinkan.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 4 Fungsi yang Mengekstrak Mikrodetik dari Nilai Waktu di MariaDB

  2. HOUR() vs EXTRACT(HOUR ...) di MariaDB:Apa Bedanya?

  3. MariaDB JSON_QUERY() Dijelaskan

  4. Cara Melakukan Perubahan Skema di MySQL &MariaDB dengan Cara yang Aman

  5. Cara Mengidentifikasi Masalah Kinerja MySQL dengan Query Lambat