sql >> Databasteknik >  >> RDS >> MariaDB

Multi-cloud-distribution för MariaDB-replikering med WireGuard

I det här blogginlägget kommer vi att undersöka hur man distribuerar en MariaDB-replikeringsinställning i en miljö med flera moln. Anta att vår primära applikation finns på AWS, det är den bästa idén att ställa in AWS som det primära datacenter som är värd för MariaDB-mastern. MariaDB-slaven kommer att finnas på GCP och ClusterControl finns i företagets privata molninfrastruktur på kontoret. De är alla anslutna via WireGuard enkel och säker VPN-tunnel i IP-intervallet 192.168.50.0/24. ClusterControl kommer att använda detta VPN-gränssnitt för att utföra driftsättning, hantering och övervakning på alla databasnoder på distans.

Här är våra värdar:

  • Amazon Web Service (AWS):
    • Värd:MariaDB master
    • Offentlig IP:54.151.183.93
    • Privat IP:10.15.3.170/24 (VPC)
    • VPN IP:192.168.50.101
    • OS:Ubuntu 18.04.4 LTS (Bionic)
    • Spec:t2.medium (2 vCPU, 4 GB minne)
  • Google Cloud Platform (GCP): 
    • Värd:MariaDB-slav
    • Offentlig IP:35.247.147.95
    • Privat IP:10.148.0.9/32
    • VPN IP:192.168.50.102
    • OS:Ubuntu 18.04.4 LTS (Bionic)
    • Spec:n1-standard-1 (1 vCPU, 3,75 GB minne)
  • VMware Private Cloud (Office):
    • Värd:ClusterControl
    • Offentlig IP:3.25.96.229
    • Privat IP:192.168.55.138/24
    • VPN IP:192.168.50.100
    • OS:Ubuntu 18.04.4 LTS (Bionic)
    • Spec:Privat moln VMWare (2 CPU, 2 GB RAM)

Vår slutliga arkitektur kommer att se ut ungefär så här:

Värdmappningen under /etc/hosts på alla noder är:

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

Att ställa in värdmappning kommer att förenkla vår namnlösningshantering mellan värdar, där vi kommer att använda värdnamnet istället för IP-adressen när vi konfigurerar Wireguard-peers.

Installera WireGuard för VPN

Eftersom alla servrar finns på tre olika platser, som endast är anslutna via ett offentligt nätverk, kommer vi att ställa in VPN-tunnling mellan alla noder med hjälp av Wireguard. Vi kommer att lägga till ett nytt nätverksgränssnitt på varje nod för denna kommunikation med följande interna IP-konfiguration:

  • 192.168.50.100 - ClusterControl (Office private cloud)
  • 192.168.50.101 - MariaDB master (AWS)
  • 192.168.50.102 - MariaDB-slav (GCP)

Installera Wireguard som visas på den här sidan på alla tre noderna:

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

För Ubuntu-värdar accepterar du bara standardvärdet om du uppmanas till det under installationen av wireguard. Observera att det är mycket viktigt att uppgradera operativsystemet till den senaste versionen för att wireguard ska fungera.

Starta om värden för att ladda Wireguard-kärnmodulen:

$ reboot

Väl uppe, konfigurera vår värdmappning inuti /etc/hosts på alla noder till något så här:

$ 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

Konfigurera Wireguard

** Alla steg under detta avsnitt ska utföras på alla noder, om inte annat anges.

1) På alla noder som rotanvändare, generera en privat nyckel och tilldela en säker behörighet

$ umask 077
$ wg genkey > /root/private

2) Lägg sedan till ett nytt gränssnitt som heter wg0:

$ ip link add wg0 type wireguard

3) Lägg till motsvarande IP-adress till wg0-gränssnittet:

För värd "cc":

$ ip addr add 192.168.50.100/32 dev wg0

För värd "aws1":

$ ip addr add 192.168.50.101/32 dev wg0

För värd "gcp2":

$ ip addr add 192.168.50.102/32 dev wg0

4) Gör lyssningsporten till 55555 och tilldela den genererade privata nyckeln till Wireguard-gränssnittet:

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

5) Ta fram nätverksgränssnittet:

$ ip link set wg0 up

6) När gränssnittet är uppe, verifiera med kommandot "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

Nu är vi redo att koppla ihop dem alla.

Ansluta värdar via Wireguard-gränssnitt

Nu ska vi lägga till alla noder som peers och låta dem kommunicera med varandra. Kommandot kräver fyra viktiga parametrar:

  • peer :Offentlig nyckel för målvärden.
  • allowed-ips :IP-adressen till värden som får kommunicera med.
  • slutpunkt :Värden och Wireguard och lyssningsporten (här konfigurerar vi alla noder att använda port 55555).
  • persistent-keepalive :Eftersom NAT och stateful brandväggar håller reda på "anslutningar", om en peer bakom NAT eller en brandvägg vill ta emot inkommande paket, måste den hålla NAT/brandväggsmappningen giltig genom att regelbundet skicka keepalive-paket. Standardvärdet är 0 (avaktivera).

Därför, på host cc, måste vi lägga till "aws1" och "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

På värd "aws1" måste vi lägga till cc och 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

På värd "gcp2" måste vi lägga till cc och 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

Från varje värd, försök att pinga varandra och se till att du får några svar:

(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

Kontrollera "wg"-utgången för att verifiera den aktuella statusen. Här är utdata från host cc point-of-view:

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

All status ser bra ut. Vi kan se slutpunkter, handskakningsstatus och bandbreddsstatus mellan noder. Det är dags att göra denna konfiguration beständig till en konfigurationsfil, så att den enkelt kan laddas upp av WireGuard. Vi kommer att lagra det i en fil som finns på /etc/wireguard/wg0.conf. Skapa först filen:

$ touch /etc/wireguard/wg0.conf

Exportera sedan körtidskonfigurationen för gränssnittet wg0 och spara den i wg0.conf med kommandot "wg-quick":

$ wg-quick save wg0

Verifiera konfigurationsfilens innehåll (exempel för värd "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 tillhandahåller några coola genvägar för att hantera och konfigurera WireGuard-gränssnitten. Använd det här verktyget för att få upp eller ner nätverksgränssnittet:

(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

Slutligen instruerar vi systemd att ladda detta gränssnitt direkt under uppstart:

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

Vid det här laget är vår VPN-konfiguration klar och vi kan nu starta implementeringen.

Distribuera MariaDB-replikering

När varje nod i arkitekturen kan prata med varandra är det dags att gå vidare med det sista steget för att distribuera vår MariaDB-replikering med ClusterControl.

Installera ClusterControl på cc:

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

Följ instruktionerna tills installationen är klar. Därefter måste vi ställa in en lösenordslös SSH från ClusterControl-värd till båda MariaDB-noderna. Generera först en SSH-nyckel för användarrot:

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

Kopiera det offentliga nyckelinnehållet på /root/.ssh/id_rsa.pub till MariaDB-noderna under /root/.ssh/authorized_keys. Detta förutsätter att root tillåts att SSH till värden. Annars konfigurerar du SSH-demonen så att den tillåter detta. Kontrollera att lösenordslös SSH är korrekt inställd. På ClusterControl-noden, kör fjärrstyrt SSH-kommando och se till att du får ett korrekt svar utan någon lösenordsuppmaning:

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

Vi kan nu distribuera vår MariaDB-replikering. Öppna en webbläsare och gå till ClusterControl UI på http://public_ip_of_CC/clustercontrol, skapa en superadminanvändarinloggning. Gå till Deploy -> MySQL-replikering och ange följande:

Välj sedan "MariaDB" som leverantör med version 10.4. Ange också MariaDB root-lösenordet. Under avsnittet "Definiera topologi" anger du Wireguard IP-adressen (wg0) för MariaDB-noderna, liknande följande skärmdump:

Klicka på Distribuera och vänta tills distributionen är klar. När du är klar bör du se följande:

Vår MariaDB-replikeringsinställning körs nu på tre olika platser (kontor, AWS och GCP), kopplade till en säker VPN-tunnling mellan noder.


  1. Använda Passport med Sequelize och MySQL

  2. Hur man visar dolda objekt i VBA Object Browser

  3. MySQL root-åtkomst från alla värdar

  4. Hur UPPER() fungerar i MariaDB