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

Penerapan Multi-Cloud untuk Replikasi MariaDB Menggunakan WireGuard

Dalam posting blog ini, kita akan melihat cara menerapkan pengaturan replikasi MariaDB di lingkungan multi-cloud. Misalkan aplikasi utama kita terletak di AWS, sebaiknya siapkan AWS sebagai pusat data utama yang menghosting master MariaDB. Slave MariaDB akan dihosting di GCP dan ClusterControl terletak di dalam infrastruktur cloud pribadi perusahaan di kantor. Semuanya terhubung melalui terowongan VPN WireGuard yang sederhana dan aman dalam kisaran IP 192.168.50.0/24. ClusterControl akan menggunakan antarmuka VPN ini untuk melakukan penerapan, pengelolaan, dan pemantauan pada semua node basis data dari jarak jauh.

Berikut adalah host kami:

  • Layanan Web Amazon (AWS):
    • Host:MariaDB master
    • IP Publik:54.151.183.93
    • IP Pribadi:10.15.3.170/24 (VPC)
    • IP VPN:192.168.50.101
    • OS:Ubuntu 18.04.4 LTS (Bionic)
    • Spesifikasi:t2.medium (2 vCPU, memori 4 GB)
  • Google Cloud Platform (GCP): 
    • Host:budak MariaDB
    • IP Publik:35.247.147.95
    • IP Pribadi:10.148.0.9/32
    • IP VPN:192.168.50.102
    • OS:Ubuntu 18.04.4 LTS (Bionic)
    • Spesifikasi:n1-standard-1 (1 vCPU, memori 3,75 GB)
  • VMware Private Cloud (Kantor):
    • Host:ClusterControl
    • IP Publik:3.25.96.229
    • IP Pribadi:192.168.55.138/24
    • IP VPN:192.168.50.100
    • OS:Ubuntu 18.04.4 LTS (Bionic)
    • Spesifikasi:Private cloud VMWare (2 CPU, 2 GB RAM)

Arsitektur akhir kita akan terlihat seperti ini:

Pemetaan host di bawah /etc/hosts pada semua node adalah:

3.25.96.229     cc clustercontrol office.mydomain.com
54.151.183.93   aws1 db1 mariadb1 db1.mydomain.com
35.247.147.95   gcp2 db2 mariadb2 db2.mydomain.com

Menyiapkan pemetaan host akan menyederhanakan manajemen penyelesaian nama antar host, di mana kami akan menggunakan nama host alih-alih alamat IP saat mengonfigurasi rekan Wireguard.

Menginstal WireGuard untuk VPN

Karena semua server berada di tiga tempat berbeda, yang hanya terhubung melalui jaringan publik, kami akan menyiapkan tunneling VPN di antara semua node menggunakan Wireguard. Kami akan menambahkan antarmuka jaringan baru pada setiap node untuk komunikasi ini dengan konfigurasi IP internal berikut:

  • 192.168.50.100 - ClusterControl (Awan pribadi Office)
  • 192.168.50.101 - master MariaDB (AWS)
  • 192.168.50.102 - budak MariaDB (GCP)

Instal Wireguard seperti yang ditunjukkan pada halaman ini pada ketiga node:

$ sudo add-apt-repository ppa:wireguard/wireguard
$ sudo apt-get upgrade
$ sudo apt-get install wireguard

Untuk host Ubuntu, terima saja nilai default jika diminta selama instalasi wireguard. Perhatikan bahwa sangat penting untuk meningkatkan OS ke versi terbaru agar wireguard berfungsi.

Reboot host untuk memuat modul kernel Wireguard:

$ reboot

Setelah selesai, konfigurasikan pemetaan host kami di dalam /etc/hosts di semua node menjadi seperti ini:

$ cat /etc/hosts
3.25.96.229     cc clustercontrol office.mydomain.com
54.151.183.93   aws1 db1 mariadb1 db1.mydomain.com
35.247.147.95   gcp2 db2 mariadb2 db2.mydomain.com
127.0.0.1       localhost

Menyiapkan Wireguard

** Semua langkah di bawah bagian ini harus dilakukan pada semua node, kecuali ditentukan lain.

1) Pada semua node sebagai pengguna root, buat kunci pribadi dan tetapkan izin aman

$ umask 077
$ wg genkey > /root/private

2) Kemudian, tambahkan antarmuka baru bernama wg0:

$ ip link add wg0 type wireguard

3) Tambahkan alamat IP yang sesuai ke antarmuka wg0:

Untuk host "cc":

$ ip addr add 192.168.50.100/32 dev wg0

Untuk host "aws1":

$ ip addr add 192.168.50.101/32 dev wg0

Untuk host "gcp2":

$ ip addr add 192.168.50.102/32 dev wg0

4) Jadikan port pendengar ke 55555 dan tetapkan kunci pribadi yang dihasilkan ke antarmuka Wireguard:

$ wg set wg0 listen-port 55555 private-key /root/private

5) Memunculkan antarmuka jaringan:

$ ip link set wg0 up

6) Setelah antarmuka aktif, verifikasi dengan perintah "wg":

(cc1)$ wg
interface: wg0
  public key: sC91qhb5QI4FjBZPlwsTLNIlvuQqsALYt5LZomUFEh4=
  private key: (hidden)
  listening port: 55555
(aws1) $ wg
interface: wg0
  public key: ZLdvYjJlaS56jhEBxWGFFGprvZhtgJKwsLVj3zGonXw=
  private key: (hidden)
  listening port: 55555
(gcp2) $wg
interface: wg0
  public key: M6A18XobRFn7y7u6cg8XlEKy5Nf0ZWqNMOw/vVONhUY=
  private key: (hidden)
  listening port: 55555

Sekarang kita siap untuk menghubungkan semuanya.

Menghubungkan Host melalui Antarmuka Wireguard

Sekarang kita akan menambahkan semua node sebagai peer dan memungkinkan mereka untuk berkomunikasi satu sama lain. Perintah tersebut membutuhkan 4 parameter penting:

  • rekan :Kunci publik untuk host target.
  • allowed-ips :Alamat IP dari host yang diizinkan untuk berkomunikasi.
  • titik akhir :Host dan Wireguard dan port mendengarkan (di sini kami mengonfigurasi semua node untuk menggunakan port 55555).
  • persistent-keepalive :Karena NAT dan firewall stateful melacak "koneksi", jika peer di belakang NAT atau firewall ingin menerima paket yang masuk, ia harus menjaga pemetaan NAT/firewall tetap valid, dengan mengirimkan paket keepalive secara berkala. Nilai defaultnya adalah 0 (nonaktifkan).

Oleh karena itu, pada cc host, kita perlu menambahkan "aws1" dan "gcp2":

$ wg set wg0 peer ZLdvYjJlaS56jhEBxWGFFGprvZhtgJKwsLVj3zGonXw= allowed-ips 192.168.50.101/32 endpoint aws1:55555 persistent-keepalive 25
$ wg set wg0 peer M6A18XobRFn7y7u6cg8XlEKy5Nf0ZWqNMOw/vVONhUY= allowed-ips 192.168.50.102/32 endpoint gcp2:55555 persistent-keepalive 25

Pada host "aws1", kita perlu menambahkan cc dan gcp2:

$ wg set wg0 peer sC91qhb5QI4FjBZPlwsTLNIlvuQqsALYt5LZomUFEh4= allowed-ips 192.168.50.100/32 endpoint cc:55555 persistent-keepalive 25
$ wg set wg0 peer M6A18XobRFn7y7u6cg8XlEKy5Nf0ZWqNMOw/vVONhUY= allowed-ips 192.168.50.102/32 endpoint gcp2:55555 persistent-keepalive 25

Pada host "gcp2", kita perlu menambahkan cc dan aws1:

$ wg set wg0 peer sC91qhb5QI4FjBZPlwsTLNIlvuQqsALYt5LZomUFEh4= allowed-ips 192.168.50.100/32 endpoint gcp2:55555 persistent-keepalive 25
$ wg set wg0 peer ZLdvYjJlaS56jhEBxWGFFGprvZhtgJKwsLVj3zGonXw= allowed-ips 192.168.50.101/32 endpoint aws1:55555 persistent-keepalive 25

Dari setiap host, coba ping satu sama lain dan pastikan Anda mendapat balasan:

(cc)$ ping 192.168.50.101 # aws1
(cc)$ ping 192.168.50.102 # gcp2
(aws1)$ ping 192.168.50.101 # cc
(aws1)$ ping 192.168.50.102 # gcp2
(gcp2)$ ping 192.168.50.100 # cc
(gcp2)$ ping 192.168.50.101 # aws1

Periksa output "wg" untuk memverifikasi status saat ini. Berikut adalah output dari sudut pandang host cc:

interface: wg0
  public key: sC91qhb5QI4FjBZPlwsTLNIlvuQqsALYt5LZomUFEh4=
  private key: (hidden)
  listening port: 55555

peer: M6A18XobRFn7y7u6cg8XlEKy5Nf0ZWqNMOw/vVONhUY=
  endpoint: 35.247.147.95:55555
  allowed ips: 192.168.50.102/32
  latest handshake: 34 seconds ago
  transfer: 4.70 KiB received, 6.62 KiB sent
  persistent keepalive: every 25 seconds

peer: ZLdvYjJlaS56jhEBxWGFFGprvZhtgJKwsLVj3zGonXw=
  endpoint: 54.151.183.93:55555
  allowed ips: 192.168.50.101/32
  latest handshake: 34 seconds ago
  transfer: 3.12 KiB received, 9.05 KiB sent
  persistent keepalive: every 25 seconds

Semua status terlihat bagus. Kita dapat melihat titik akhir, status jabat tangan, dan status bandwidth antar node. Saatnya membuat konfigurasi ini tetap menjadi file konfigurasi, sehingga dapat dimuat oleh WireGuard dengan mudah. Kita akan menyimpannya ke dalam file yang terletak di /etc/wireguard/wg0.conf. Pertama, buat file:

$ touch /etc/wireguard/wg0.conf

Kemudian, ekspor konfigurasi runtime untuk antarmuka wg0 dan simpan ke wg0.conf menggunakan perintah "wg-quick":

$ wg-quick save wg0

Verifikasi konten file konfigurasi (contoh untuk host "cc"):

(cc)$ cat /etc/wireguard/wg0.conf
[Interface]
Address = 192.168.50.100/24
ListenPort = 55555
PrivateKey = UHIkdA0ExCEpCOL/iD0AFaACE/9NdHYig6CyKb3i1Xo=

[Peer]
PublicKey = ZLdvYjJlaS56jhEBxWGFFGprvZhtgJKwsLVj3zGonXw=
AllowedIPs = 192.168.50.101/32
Endpoint = 54.151.183.93:55555
PersistentKeepalive = 25

[Peer]
PublicKey = M6A18XobRFn7y7u6cg8XlEKy5Nf0ZWqNMOw/vVONhUY=
AllowedIPs = 192.168.50.102/32
Endpoint = 35.247.147.95:55555
PersistentKeepalive = 25

Command wg-quick menyediakan beberapa pintasan keren untuk mengelola dan mengonfigurasi antarmuka WireGuard. Gunakan alat ini untuk menaikkan atau menurunkan antarmuka jaringan:

(cc)$ wg-quick down wg0
[#] ip link delete dev wg0

(cc)$ wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 192.168.50.100/24 dev wg0
[#] ip link set mtu 8921 up dev wg0

Akhirnya, kami menginstruksikan systemd untuk memuat antarmuka ini tepat saat startup:

$ systemctl enable [email protected]
Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /lib/systemd/system/[email protected]

Pada titik ini, konfigurasi VPN kami selesai dan kami sekarang dapat memulai penerapan.

Menerapkan Replikasi MariaDB

Setelah setiap node dalam arsitektur dapat berbicara satu sama lain, saatnya untuk melanjutkan dengan langkah terakhir untuk menerapkan Replikasi MariaDB kami menggunakan ClusterControl.

Instal ClusterControl di cc:

(cc)$ wget https://severalnines.com/downloads/cmon/install-cc
(cc)$ chmod 755 install-cc
(cc)$ ./install-cc

Ikuti petunjuknya hingga penginstalan selesai. Selanjutnya, kita perlu menyiapkan SSH tanpa kata sandi dari host ClusterControl ke kedua node MariaDB. Pertama, buat kunci SSH untuk root pengguna:

(cc)$ whoami
root
(cc)$ ssh-keygen -t rsa # press Enter for all prompts

Salin konten kunci publik di /root/.ssh/id_rsa.pub ke node MariaDB di bawah /root/.ssh/authorized_keys. Ini menganggap bahwa root diizinkan untuk SSH ke Host. Jika tidak, konfigurasikan daemon SSH untuk mengizinkannya. Verifikasi bahwa SSH tanpa kata sandi diatur dengan benar. Pada node ClusterControl, jalankan perintah SSH jarak jauh dan pastikan Anda akan mendapatkan balasan yang benar tanpa prompt kata sandi:

(cc)$ ssh 192.168.50.101 "hostname"
aws1
(cc)$ ssh 192.168.50.102 "hostname"
gcp2

Sekarang kita dapat menerapkan replikasi MariaDB kita. Buka web browser dan masuk ke ClusterControl UI di http://public_ip_of_CC/clustercontrol, buat login pengguna super admin. Buka Deploy -> Replikasi MySQL dan tentukan yang berikut:

Kemudian, pilih "MariaDB" sebagai vendor dengan versi 10.4. Tentukan juga kata sandi root MariaDB. Di bawah bagian "Define Topology", tentukan alamat IP Wireguard (wg0) dari node MariaDB, mirip dengan tangkapan layar berikut:

Klik Deploy dan tunggu hingga deployment selesai. Setelah selesai, Anda akan melihat yang berikut:

Penyiapan replikasi MariaDB kami sekarang berjalan di tiga lokasi berbeda (kantor, AWS, dan GCP), yang terhubung dengan tunneling VPN yang aman antar node.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Anda Tahu Anda Ingin:Bermigrasi dari Oracle ke MariaDB

  2. Koneksi HAProxy vs Koneksi MySQL - Yang Harus Anda Ketahui

  3. Memulai dengan ProxySQL - Tutorial Load Balancing MySQL &MariaDB

  4. Menjelajahi Berbagai Cara untuk Mengenkripsi Data MariaDB Anda

  5. Bagaimana ELT() Bekerja di MariaDB