Tutorial ini menjelaskan proses failover dan penggantian pemulihan dari bencana (DR) lengkap di Cloud SQL untuk MySQL menggunakan replika baca lintas region.
Dalam tutorial ini, Anda akan menyiapkan instance Cloud SQL untuk MySQL untuk DR ketersediaan tinggi (HA) dan menyimulasikan pemadaman layanan. Kemudian, Anda akan menjalankan proses DR untuk memulihkan deployment awal setelah pemadaman layanan teratasi.
Tutorial ini ditujukan untuk arsitek, administrator, dan engineer database.
Untuk membaca ringkasan cara kerja pemulihan dari bencana (disaster recovery) SQL, lihat Tentang pemulihan dari bencana (disaster recovery) di Cloud SQL.
Tujuan
- Membuat instance Cloud SQL untuk MySQL dengan ketersediaan tinggi (HA).
- Men-deploy replika baca lintas region di Google Cloud menggunakan Cloud SQL untuk MySQL.
- Menyimulasikan bencana dan failover dengan Cloud SQL untuk MySQL.
- Pahami langkah-langkah untuk memulihkan deployment awal Anda menggunakan penggantian dengan Cloud SQL untuk MySQL.
Dokumen ini hanya berfokus pada proses penggantian dan failover DR lintas region. Untuk informasi tentang proses failover HA satu region, lihat Ringkasan konfigurasi ketersediaan tinggi.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Di konsol Google Cloud, aktifkan Cloud Shell.
Tahap 1: Menyiapkan instance database HA untuk DR
Fase berikut (1-3) akan memandu Anda menyelesaikan proses failover dan
penggantian. Anda dapat menjalankan semua perintah menggunakan perintah gcloud
di
Cloud Shell. Untuk menyederhanakan proses, tutorial ini menggunakan setelan default jika
memungkinkan (misalnya, versi Cloud SQL default). Dalam lingkungan produksi, Anda
dapat menambahkan konfigurasi lain.
Menetapkan variabel lingkungan
Bagian ini menyediakan contoh variabel lingkungan yang mendefinisikan berbagai nama dan region yang diperlukan untuk perintah yang Anda jalankan dalam tutorial ini. Anda dapat menyesuaikan contoh variabel ini sesuai kebutuhan Anda.
Tabel berikut menjelaskan nama instance, perannya, dan region deployment-nya untuk setiap fase DR dan proses penggantian dalam tutorial ini. Anda juga dapat memberikan nama dan wilayah Anda sendiri.
Fase awal | ||
---|---|---|
Nama instance | Peran | Region |
instance-1 |
Instance utama | us-west1 |
instance-2 |
Standby | us-west1 |
instance-3 |
Replika baca lintas region | us-west2 |
Fase bencana | ||
---|---|---|
Nama instance | Peran | Region |
instance-3 |
Instance utama | us-west2 |
instance-4 |
Standby | us-west2 |
instance-5 |
Replika baca lintas region | us-west3 |
instance-6 |
Replika baca lintas region | us-west1 |
Fase penggantian (final) | ||
---|---|---|
Nama instance | Peran | Region |
instance-6 |
Instance utama | us-west1 |
instance-7 |
Standby | us-west1 |
instance-8 |
Replika baca lintas region | us-west2 |
Nama instance dalam tabel sebelumnya tidak dienkode dengan perannya. Dalam
situasi DR, fungsi instance dapat berubah—misalnya,
replika mungkin menjadi yang utama. Jika nama instance utama baru berisi kata
replica
, dapat terjadi kebingungan dan konflik. Oleh karena itu, sebaiknya jangan
mengenkode nama instance dengan fungsi atau peran yang dijalankannya.
Tabel sebelumnya mencantumkan nama instance standby. Meskipun tutorial ini tidak menjalankan failover dengan HA, tutorial ini menyertakan nama-nama instance standby agar lengkap.
Fase penggantian membuat kembali deployment asli dari fase awal di region asli yang sama. Namun, dalam penggantian, nama instance harus berubah karena nama aslinya tidak akan segera tersedia meskipun instance asli dihapus. Untuk mendukung pembuatan instance yang cepat di fase penggantian, Anda harus menggunakan nama instance yang tidak sama dengan nama yang digunakan pada fase awal.
Di Cloud Shell, tetapkan variabel lingkungan berdasarkan spesifikasi pada tabel sebelumnya:
export primary_name=instance-1 export primary_tier=db-n1-standard-2 export primary_region=us-west1 export primary_root_password=my-root-password export primary_backup_start_time=22:00 export cross_region_replica_name=instance-3 export cross_region_replica_region=us-west2
Jika Anda ingin menggunakan tingkat yang berbeda untuk instance utama, cantumkan tingkat yang tersedia untuk Anda, lalu tetapkan nilai yang berbeda ke primary_tier:
gcloud sql tiers list
Untuk mengetahui daftar region tempat Anda dapat men-deploy Cloud SQL, lihat Setelan instance.
Membuat instance database utama
Di Cloud Shell, buat satu instance Cloud SQL:
gcloud sql instances create $primary_name \ --tier=$primary_tier \ --region=$primary_region
Perintah
gcloud
dijeda hingga instance dibuat.Atur kata sandi root:
gcloud sql users set-password root \ --host=% \ --instance $primary_name \ --password $primary_root_password
Membuat database utama
Di Cloud Shell, login ke shell MySQL dan masukkan sandi root pada perintah:
gcloud sql connect $primary_name --user=root
Pada perintah MySQL, buat database dan upload data pengujian:
CREATE DATABASE guestbook; USE guestbook; CREATE TABLE entries (guestName VARCHAR(255), content VARCHAR(255), entryID INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(entryID)); INSERT INTO entries (guestName, content) values ("first guest", "I got here!"); INSERT INTO entries (guestName, content) values ("second guest", "Me too!");
Periksa apakah data berhasil di-commit:
SELECT * FROM entries;
Verifikasi bahwa dua baris data ditampilkan.
Keluar dari shell MySQL:
exit;
Pada tahap ini, Anda memiliki satu database yang menyertakan tabel dan beberapa data pengujian.
Mengubah instance utama menjadi instance database dengan ketersediaan tinggi (HA)
Anda hanya dapat mengonfigurasi Cloud SQL sebagai sistem HA regional, bukan sebagai sistem lintas regional. (Menyiapkan replika baca lintas region berbeda dengan mengonfigurasi Cloud SQL sebagai sistem lintas regional.) Untuk mengetahui informasi selengkapnya, baca Mengaktifkan dan menonaktifkan ketersediaan tinggi pada instance.
Di Cloud Shell, buat instance Cloud SQL dengan ketersediaan tinggi (HA):
gcloud sql instances patch $primary_name \ --availability-type REGIONAL \ --enable-bin-log \ --backup-start-time=$primary_backup_start_time
Menambahkan replika baca lintas region untuk DR dengan update otomatis
Langkah-langkah berikut sudah cukup untuk membuat replika baca lintas region untuk tutorial ini:
Di Cloud Shell, siapkan replika baca lintas region:
gcloud sql instances create $cross_region_replica_name \ --master-instance-name=$primary_name \ --region=$cross_region_replica_region
(Opsional) Untuk memeriksa apakah database telah direplikasi, buka halaman Instance Cloud SQL di Konsol Google Cloud.
Konsol Google Cloud menunjukkan bahwa instance utama (
instance-1
) diaktifkan untuk HA dan replika baca lintas region (instance-3
) ada.Login ke replika baca lintas region dengan menggunakan sandi root yang sama untuk kata sandi utama:
gcloud sql connect $cross_region_replica_name --user=root
Pada perintah MySQL, pilih data untuk memastikan bahwa replikasi berfungsi:
USE guestbook; SELECT * FROM entries;
Keluar dari shell MySQL:
exit;
Untuk mengetahui detail tentang cara menyiapkan replika baca lintas region yang lengkap, lihat dokumentasi Cloud SQL
Untuk database besar dalam lingkungan produksi, sebaiknya cadangkan database utama dan buat replika baca lintas region dari cadangan. Langkah ini membantu mengurangi waktu yang diperlukan replika baca untuk disinkronkan dengan database utama. Proses ini dijelaskan di bagian berikutnya. Namun, Anda dapat memilih untuk melewati langkah ini dan melanjutkan ke Fase 2.
Menambahkan replika baca lintas region berdasarkan file dump
Salah satu cara untuk mengoptimalkan pembuatan replika baca lintas region adalah dengan menyinkronkan replika dari status database utama yang konsisten sebelumnya, bukan menyinkronkan pada saat mengakses status utama baru. Pengoptimalan ini memerlukan pembuatan file dump yang digunakan replika sebagai status awal.
Untuk mengetahui langkah-langkah membuat replika berdasarkan file dump, baca bagian Mereplikasi dari server eksternal ke Cloud SQL (v1.1). Pendekatan ini dapat bermanfaat untuk database produksi yang besar. Namun, tutorial ini melewati langkah ini karena set data pengujian cukup kecil untuk replikasi lengkap.
Tahap 2: Menyimulasikan bencana (pemadaman region)
Pada fase ini, Anda akan menyimulasikan pemadaman layanan region utama dalam setelan produksi dengan membuat database utama tidak tersedia.
Memeriksa keterlambatan replika baca lintas region
Pada langkah-langkah berikut, Anda akan menentukan jeda replikasi dari replika baca lintas-region:
Di konsol Google Cloud, buka halaman Instance Cloud SQL.
Klik replika baca (instance-3).
Di menu drop-down metrik, klik Jeda Replikasi:
Metrik ini berubah menjadi Jeda Replikasi. Grafik tidak menunjukkan penundaan:
Idealnya, jeda replikasi adalah nol saat pemadaman layanan region utama terjadi, karena penundaan nol memastikan bahwa semua transaksi direplikasi. Jika tidak nol, beberapa transaksi mungkin tidak direplikasi. Dalam hal ini, replika baca lintas region tidak akan berisi semua transaksi yang dilakukan pada replika baca utama.
Membuat instance utama tidak tersedia
Pada langkah-langkah berikut, Anda akan menyimulasikan bencana dengan menghentikan yang utama. Jika replika baca lintas region dilampirkan ke replika baca tersebut, Anda harus melepaskan replika terlebih dahulu. Jika tidak, Anda tidak dapat menghentikan instance Cloud SQL.
Di Cloud Shell, hapus replika baca lintas region dari replika baca utama:
gcloud sql instances patch $cross_region_replica_name \ --no-enable-database-replication
Jika diminta, terima opsi untuk melanjutkan.
Hentikan instance database utama:
gcloud sql instances patch $primary_name --activation-policy NEVER
Mengimplementasikan DR
Di Cloud Shell, promosikan replika baca lintas region ke instance mandiri:
gcloud sql instances promote-replica $cross_region_replica_name
Jika diminta, terima opsi untuk melanjutkan. Halaman Instance Cloud SQL menampilkan replika baca lintas region sebelumnya (
instance-3
) sebagai primer baru, dan primer sebelumnya (instance-1
) seperti yang dihentikan:Setelah mempromosikan replika baca lintas region sebagai replika baca utama baru, Anda akan mengaktifkannya untuk HA. Sebagai praktik terbaik, Anda harus memperbarui variabel ingkungan dengan penamaan yang tepat.
Update variabel lingkungan:
export former_primary_name=$primary_name export primary_name=$cross_region_replica_name export primary_tier=db-n1-standard-2 export primary_region=$cross_region_replica_region export primary_root_password=my-root-password export primary_backup_start_time=22:00 export cross_region_replica_name=instance-5 export cross_region_replica_region=us-west3
Mulai instance utama baru:
gcloud sql instances patch $primary_name --activation-policy ALWAYS
Aktifkan instance utama baru sebagai instance regional dengan ketersediaan tinggi (HA):
gcloud sql instances patch $primary_name \ --availability-type REGIONAL \ --enable-bin-log \ --backup-start-time=$backup_start_time
Buat replika baca lintas region di region ketiga:
gcloud sql instances create $cross_region_replica_name \ --master-instance-name=$primary_name \ --region=$cross_region_replica_region
Pada langkah sebelumnya, Anda akan menetapkan variabel lingkungan
cross_region_replica_region
keus-west3
.Setelah failover selesai, halaman Instance Cloud SQL di konsol Google Cloud akan menunjukkan bahwa instance utama yang baru (
instance-3
) diaktifkan sebagai HA dan memiliki replika baca lintas region (instance-5
):(Opsional) Jika Anda memiliki cadangan reguler, ikuti proses yang dijelaskan sebelumnya untuk menyinkronkan cadangan utama yang baru dengan versi cadangan terbaru.
(Opsional) Jika Anda menggunakan proxy Cloud SQL, konfigurasikan proxy tersebut untuk menggunakan proxy utama yang baru agar dapat melanjutkan pemrosesan aplikasi.
Menangani pemadaman layanan region singkat
Ada kemungkinan bahwa pemadaman layanan yang memicu failover akan diselesaikan sebelum failover selesai. Dalam hal ini, Anda dapat membatalkan proses failover dan terus menggunakan instance Cloud SQL utama asli di region tempat pemadaman layanan terjadi.
Bergantung pada status spesifik dari proses failover, replika baca lintas region mungkin telah dipromosikan. Jika demikian, Anda harus menghapusnya dan membuat ulang replika baca lintas region.
Hapus instance utama asli untuk menghindari situasi split-brain
Untuk menghindari situasi split-brain, Anda perlu menghapus versi instance utama yang asli (atau membuatnya tidak dapat diakses oleh klien database).
Setelah failover, situasi split-brain dapat terjadi saat klien menulis ke database instance utama asli dan database instance utama baru secara bersamaan. Dalam hal ini, konten kedua database tidak konsisten. Setelah failover, database instance utama asli sudah tidak berlaku lagi dan tidak boleh menerima traffic baca atau tulis.
Di Cloud Shell, hapus versi instance utama asli:
gcloud sql instances delete $former_primary_name
Jika diminta, terima opsi untuk melanjutkan.
Di Konsol Google Cloud, halaman Instance Cloud SQL tidak lagi menampilkan instance utama asli (
instance-1
) sebagai bagian dari deployment:
Fase 3: Menerapkan penggantian
Untuk menerapkan penggantian ke region asli (R1) setelah tersedia, ikuti proses yang sama seperti yang dijelaskan di Fase 2. Proses tersebut diringkas sebagai berikut:
Buat replika baca lintas region kedua di region asli (R1). Pada tahap ini, elemen utama memiliki dua replika baca lintas region, satu di region R3, dan satu di region R1.
Promosikan replika baca lintas region di R1 sebagai primer akhir.
Aktifkan HA untuk primer akhir.
Buat replika baca lintas region dari primer final di
us-west2
.Untuk menghindari situasi split-brain, hapus semua instance yang tidak lagi diperlukan (replika baca primer asli dan lintas region di R3).
Seperti yang telah dibahas sebelumnya, sebaiknya buat cadangan awal yang berisi status awal yang ditentukan untuk database utama yang baru.
Deployment akhir sekarang memiliki HA primer (dengan nama instance-6
) dan
replika baca lintas region (dengan nama instance-8
).
Membandingkan kelebihan dan kekurangan DR manual versus otomatis
Tabel berikut membahas kelebihan dan kekurangan menerapkan proses DR, baik secara manual maupun otomatis. Tujuannya bukan untuk menentukan pendekatan yang benar dibandingkan dengan yang salah, melainkan memberikan kriteria untuk membantu Anda menentukan pendekatan terbaik sesuai kebutuhan.
Eksekusi manual | Eksekusi otomatis |
---|---|
Kelebihan:
|
Kelebihan:
|
Kekurangan:
|
Kekurangan:
|
Sebagai praktik terbaik, sebaiknya Anda memulai dengan implementasi manual. Kemudian, jalankan implementasi tersebut secara sukarela dan rutin (sebaiknya dalam produksi) untuk memastikan bahwa proses manual berjalan dengan baik dan semua anggota tim mengetahui peran dan tanggung jawabnya. Sebaiknya Anda menjelaskan proses manual dalam dokumen proses langkah demi langkah. Setelah setiap implementasi, Anda harus mengonfirmasi atau meningkatkan kualitas dokumen proses.
Setelah Anda meningkatkan kualitas prosesnya dan yakin bahwa proses tersebut dapat diandalkan, Anda akan menentukan apakah akan mengotomatiskan prosesnya atau tidak. Jika memilih dan mengimplementasikan proses otomatis, Anda perlu menguji proses tersebut secara berkala dalam produksi untuk memastikan bahwa Anda dapat menerapkannya dengan andal.
Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, Anda dapat menghapus project Google Cloud yang Anda buat untuk tutorial ini.
Menghapus project
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah berikutnya
- Baca pemulihan dari bencana (disaster recovery) Cloud SQL.
- Baca pemulihan dari bencana (disaster recovery) untuk MySQL di Compute Engine.
- Pelajari arsitektur pemulihan dari bencana untuk pemadaman infrastruktur cloud.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.