Migrasi basis data tidak berskala dengan baik. Biasanya Anda perlu melakukan banyak tes sebelum Anda dapat menarik pelatuk dan beralih dari yang lama ke yang baru. Migrasi biasanya dilakukan secara manual, karena sebagian besar proses tidak memungkinkan otomatisasi. Namun bukan berarti tidak ada ruang untuk otomatisasi dalam proses migrasi. Bayangkan menyiapkan sejumlah node dengan perangkat lunak baru, menyediakannya dengan data, dan mengonfigurasi replikasi antara lingkungan lama dan baru dengan tangan. Ini membutuhkan waktu berhari-hari. Otomatisasi bisa sangat berguna saat menyiapkan lingkungan baru dan menyediakannya dengan data. Dalam posting blog ini, kita akan melihat migrasi yang sangat sederhana - dari Percona Server 5.7 mandiri ke Percona XtraDB Cluster 5.7 3-node. Kami akan menggunakan Ansible untuk mencapai itu.
Deskripsi Lingkungan
Pertama-tama, satu penafian penting - apa yang akan kami tunjukkan di sini hanyalah draf dari apa yang mungkin ingin Anda jalankan dalam produksi. Itu berfungsi di lingkungan pengujian kami tetapi mungkin memerlukan modifikasi agar cocok untuk lingkungan Anda. Dalam pengujian kami, kami menggunakan empat VM Ubuntu 16.04 yang digunakan menggunakan Vagrant. Satu berisi Percona Server 5.7 mandiri, tiga sisanya akan digunakan untuk node Percona XtraDB Cluster. Kami juga menggunakan node terpisah untuk menjalankan playbook yang memungkinkan, meskipun ini bukan persyaratan dan playbook juga dapat dijalankan dari salah satu node. Selain itu, konektivitas SSH tersedia di antara semua node. Anda harus memiliki konektivitas dari host tempat Anda menjalankan yang memungkinkan, tetapi memiliki kemampuan untuk ssh antar node berguna (terutama antara master dan slave baru - kami mengandalkan ini di buku pedoman).
Struktur Playbook
Playbook yang memungkinkan biasanya memiliki struktur yang sama - Anda membuat peran, yang dapat ditetapkan ke host yang berbeda. Setiap peran akan berisi tugas yang akan dijalankan di dalamnya, templat yang akan digunakan, file yang akan diunggah, variabel yang ditentukan untuk buku pedoman khusus ini. Dalam kasus kami, pedomannya sangat sederhana.
.
├── inventory
├── playbook.yml
├── roles
│ ├── first_node
│ │ ├── my.cnf.j2
│ │ ├── tasks
│ │ │ └── main.yml
│ │ └── templates
│ │ └── my.cnf.j2
│ ├── galera
│ │ ├── tasks
│ │ │ └── main.yml
│ │ └── templates
│ │ └── my.cnf.j2
│ ├── master
│ │ └── tasks
│ │ └── main.yml
│ └── slave
│ └── tasks
│ └── main.yml
└── vars
└── default.yml
Kami mendefinisikan beberapa peran - kami memiliki peran utama, yang dimaksudkan untuk melakukan beberapa pemeriksaan kewarasan pada simpul mandiri. Ada node budak, yang akan dieksekusi di salah satu node Galera untuk mengkonfigurasinya untuk replikasi, dan mengatur replikasi asinkron. Kemudian kita memiliki peran untuk semua node Galera dan peran untuk node Galera pertama yang mem-bootstrap cluster darinya. Untuk peran Galera, kami memiliki beberapa template yang akan kami gunakan untuk membuat file my.cnf. Kami juga akan menggunakan .my.cnf lokal untuk menentukan nama pengguna dan kata sandi. Kami memiliki file yang berisi beberapa variabel yang mungkin ingin kami sesuaikan, seperti kata sandi. Akhirnya kami memiliki file inventaris, yang mendefinisikan host di mana kami akan menjalankan buku pedoman, kami juga memiliki file buku pedoman dengan informasi tentang bagaimana tepatnya hal-hal harus dijalankan. Mari kita lihat bagian-bagiannya.
File Inventaris
Ini adalah file yang sangat sederhana.
[galera]
10.0.0.142
10.0.0.143
10.0.0.144
[first_node]
10.0.0.142
[master]
10.0.0.141
Kami memiliki tiga grup, 'galera', yang berisi semua node Galera, 'first_node', yang akan kami gunakan untuk bootstrap dan terakhir 'master', yang berisi node Server Percona mandiri kami.
Playbook.yml
File playbook.yml berisi panduan umum tentang bagaimana playbook harus dijalankan.
- hosts: master
gather_facts: yes
become: true
pre_tasks:
- name: Install Python2
raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal)
vars_files:
- vars/default.yml
roles:
- { role: master }
Seperti yang Anda lihat, kami memulai dengan node mandiri dan kami menerapkan tugas yang terkait dengan peran 'master' (kami akan membahasnya secara lebih rinci di postingan ini).
- hosts: first_node
gather_facts: yes
become: true
pre_tasks:
- name: Install Python2
raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal)
vars_files:
- vars/default.yml
roles:
- { role: first_node }
- { role: slave }
Kedua, kita pergi ke node yang didefinisikan dalam grup 'first_node' dan kita menerapkan dua peran:'first_node' dan 'slave'. Yang pertama dimaksudkan untuk menyebarkan kluster PXC node tunggal, yang selanjutnya akan mengonfigurasinya untuk berfungsi sebagai budak dan menyiapkan replikasi.
- hosts: galera
gather_facts: yes
become: true
pre_tasks:
- name: Install Python2
raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal)
vars_files:
- vars/default.yml
roles:
- { role: galera }
Terakhir, kami menelusuri semua node Galera dan menerapkan peran 'galera' pada semuanya.
Panduan Manynines DevOps untuk Manajemen DatabasePelajari tentang apa yang perlu Anda ketahui untuk mengotomatisasi dan mengelola database open source AndaUnduh GratisVariabel
Sebelum kita mulai melihat peran, kami ingin menyebutkan variabel default yang kami definisikan untuk pedoman ini.
sst_user: "sstuser"
sst_password: "pa55w0rd"
root_password: "pass"
repl_user: "repl_user"
repl_password: "repl1cati0n"
Seperti yang kami nyatakan, ini adalah buku pedoman yang sangat sederhana tanpa banyak opsi untuk penyesuaian. Anda dapat mengonfigurasi pengguna dan kata sandi dan ini pada dasarnya. Satu mengerti - pastikan bahwa kata sandi root node mandiri cocok dengan 'root_password' di sini karena jika tidak, playbook tidak akan dapat terhubung di sana (dapat diperpanjang untuk menanganinya tetapi kami tidak membahasnya).
File ini tidak memiliki banyak nilai tetapi, sebagai aturan praktis, Anda ingin mengenkripsi file apa pun yang berisi kredensial. Jelas, ini untuk alasan keamanan. Ansible hadir dengan ansible-vault, yang dapat digunakan untuk mengenkripsi dan mendekripsi file. Kami tidak akan membahas detailnya di sini, semua yang perlu Anda ketahui tersedia di dokumentasi. Singkatnya, Anda dapat dengan mudah mengenkripsi file menggunakan kata sandi dan mengonfigurasi lingkungan Anda sehingga buku pedoman dapat didekripsi secara otomatis menggunakan kata sandi dari file atau diteruskan dengan tangan.
Peran
Di bagian ini kita akan membahas peran yang didefinisikan dalam buku pedoman, meringkas apa yang ingin mereka lakukan.
Peran utama
Seperti yang kami nyatakan, peran ini dimaksudkan untuk menjalankan pemeriksaan kewarasan pada konfigurasi MySQL mandiri. Ini akan menginstal paket yang diperlukan seperti percona-xtrabackup-24. Itu juga membuat pengguna replikasi di master node. Konfigurasi ditinjau untuk memastikan bahwa server_id dan replikasi lain dan pengaturan terkait log biner telah ditetapkan. GTID juga diaktifkan karena kami akan mengandalkannya untuk replikasi.
Peran first_node
Di sini, simpul Galera pertama diinstal. Repositori Percona akan dikonfigurasi, my.cnf akan dibuat dari template. PXC akan diinstal. Kami juga menjalankan beberapa pembersihan untuk menghapus pengguna yang tidak dibutuhkan dan untuk membuatnya, yang akan diperlukan (pengguna root dengan kata sandi pilihan kami, pengguna diperlukan untuk SST). Akhirnya, cluster di-bootstrap menggunakan node ini. Kami mengandalkan 'wsrep_cluster_address' yang kosong sebagai cara untuk menginisialisasi cluster. Inilah sebabnya mengapa nanti kami masih menjalankan peran 'galera' pada node pertama - untuk menukar my.cnf awal dengan yang terakhir, berisi 'wsrep_cluster_address' dengan semua anggota cluster. Satu hal yang perlu diingat - ketika Anda membuat pengguna root dengan kata sandi, Anda harus berhati-hati agar tidak terkunci dari MySQL sehingga Ansible dapat menjalankan langkah-langkah lain dari buku pedoman. Salah satu cara untuk melakukannya adalah dengan menyediakan .my.cnf dengan pengguna dan kata sandi yang benar. Hal lain yang harus diingat untuk selalu menyetel login_user dan login_password yang benar dalam modul 'mysql_user'.
Peran budak
Peran ini adalah tentang mengonfigurasi replikasi antara node mandiri dan cluster PXC node tunggal. Kami menggunakan xtrabackup untuk mendapatkan data, kami juga memeriksa gtid yang dieksekusi di xtrabackup_binlog_info untuk memastikan cadangan akan dipulihkan dengan benar dan replikasi itu dapat dikonfigurasi. Kami juga melakukan sedikit konfigurasi, memastikan bahwa node slave dapat menggunakan replikasi GTID. Ada beberapa kesalahan di sini - tidak mungkin menjalankan 'RESET MASTER' menggunakan modul 'mysql_replication' pada Ansible 2.7.10, seharusnya bisa melakukannya di 2.8, kapan pun itu akan keluar. Kami harus menggunakan modul 'shell' untuk menjalankan perintah MySQL CLI. Saat membangun kembali simpul Galera dari sumber eksternal, Anda harus ingat untuk membuat ulang pengguna yang diperlukan (setidaknya pengguna yang digunakan untuk SST). Jika tidak, node yang tersisa tidak akan dapat bergabung dengan cluster.
Peran Galera
Terakhir, ini adalah peran di mana kita menginstal PXC pada dua node yang tersisa. Kami menjalankannya di semua node, yang awal akan mendapatkan "produksi" my.cnf alih-alih versi "bootstrap". Dua node yang tersisa akan menginstal PXC dan mereka akan mendapatkan SST dari node pertama di cluster.
Ringkasan
Seperti yang Anda lihat, Anda dapat dengan mudah membuat buku pedoman Ansible yang sederhana dan dapat digunakan kembali yang dapat digunakan untuk menyebarkan Percona XtraDB Cluster dan mengonfigurasinya untuk menjadi budak node MySQL mandiri. Sejujurnya, untuk memigrasi satu server, ini mungkin tidak ada gunanya karena melakukan hal yang sama secara manual akan lebih cepat. Namun, jika Anda berharap Anda harus menjalankan kembali proses ini beberapa kali, pasti masuk akal untuk mengotomatiskannya dan membuatnya lebih efisien waktu. Seperti yang kami nyatakan di awal, ini sama sekali bukan buku pedoman yang siap produksi. Ini lebih merupakan bukti konsep, sesuatu yang dapat Anda kembangkan agar sesuai dengan lingkungan Anda. Anda dapat menemukan arsip dengan buku pedoman di sini:http://severalnines.com/sites/default/files/ansible.tar.gz
Kami harap Anda menganggap entri blog ini menarik dan berharga, jangan ragu untuk membagikan pemikiran Anda.