sql >> Database teknologi >  >> RDS >> MariaDB

Multi-Cloud-implementering til MariaDB-replikering ved hjælp af WireGuard

I dette blogindlæg skal vi se på, hvordan man implementerer en MariaDB-replikeringsopsætning i et multi-cloud-miljø. Antag, at vores primære applikation er placeret på AWS, er det den bedste idé at konfigurere AWS som det primære datacenter, der hoster MariaDB-masteren. MariaDB-slaven vil blive hostet på GCP, og ClusterControl er placeret inde i virksomhedens private cloud-infrastruktur på kontoret. De er alle forbundet via WireGuard enkel og sikker VPN-tunnel i IP-området 192.168.50.0/24. ClusterControl vil bruge denne VPN-grænseflade til at udføre implementering, administration og overvågning på alle databasenoder eksternt.

Her er vores værter:

  • Amazon Web Service (AWS):
    • Vært:MariaDB-mester
    • 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 (Bionisk)
    • Spec.:t2.medium (2 vCPU, 4 GB hukommelse)
  • Google Cloud Platform (GCP): 
    • Vært:MariaDB-slave
    • 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 (Bionisk)
    • Spec.:n1-standard-1 (1 vCPU, 3,75 GB hukommelse)
  • VMware Private Cloud (Office):
    • Vært: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 (Bionisk)
    • Spec.:Privat cloud-VMWare (2 CPU, 2 GB RAM)

Vores endelige arkitektur vil se nogenlunde sådan her ud:

Værtstilknytningen under /etc/hosts på alle noder er:

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

Opsætning af værtsmapping vil forenkle vores navneløsningsstyring mellem værter, hvor vi bruger værtsnavnet i stedet for IP-adressen, når vi konfigurerer Wireguard-peers.

Installation af WireGuard til VPN

Da alle servere er tre forskellige steder, som kun er forbundet via offentligt netværk, vil vi opsætte VPN-tunneling mellem alle noder ved hjælp af Wireguard. Vi tilføjer en ny netværksgrænseflade på hver node til denne kommunikation med følgende interne IP-konfiguration:

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

Installer Wireguard som vist på denne side på alle tre noder:

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

For Ubuntu-værter skal du blot acceptere standardværdien, hvis du bliver bedt om det under wireguard-installationen. Bemærk, at det er meget vigtigt at opgradere operativsystemet til den nyeste version, for at wireguard kan fungere.

Genstart værten for at indlæse Wireguard-kernemodulet:

$ reboot

Når du er oppe, konfigurer vores værtsmapping inde i /etc/hosts på alle noder til noget som dette:

$ 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

Opsætning af Wireguard

** Alle trin under dette afsnit skal udføres på alle noder, medmindre andet er angivet.

1) På alle noder som root-bruger, generer en privat nøgle og tildel en sikker tilladelse

$ umask 077
$ wg genkey > /root/private

2) Tilføj derefter en ny grænseflade kaldet wg0:

$ ip link add wg0 type wireguard

3) Tilføj den tilsvarende IP-adresse til wg0-grænsefladen:

For vært "cc":

$ ip addr add 192.168.50.100/32 dev wg0

For vært "aws1":

$ ip addr add 192.168.50.101/32 dev wg0

For vært "gcp2":

$ ip addr add 192.168.50.102/32 dev wg0

4) Lav lytteporten til 55555 og tildel den genererede private nøgle til Wireguard-grænsefladen:

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

5) Hent netværksgrænsefladen:

$ ip link set wg0 up

6) Når grænsefladen er oppe, bekræft med "wg"-kommandoen:

(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 er vi klar til at forbinde dem alle sammen.

Tilslutning af værter via Wireguard-grænseflade

Nu skal vi tilføje alle noderne som peers og tillade dem at kommunikere med hinanden. Kommandoen kræver 4 vigtige parametre:

  • peer :Offentlig nøgle til målværten.
  • allowed-ips :IP-adressen på værten, som har tilladelse til at kommunikere med.
  • slutpunkt :Værten og Wireguard og lytteporten (her konfigurerer vi alle noder til at bruge port 55555).
  • persistent-keepalive :Fordi NAT og stateful firewalls holder styr på "forbindelser", hvis en peer bag NAT eller en firewall ønsker at modtage indgående pakker, skal den holde NAT/firewall-tilknytningen gyldig ved periodisk at sende keepalive-pakker. Standardværdien er 0 (deaktiver).

Derfor skal vi på vært cc tilføje "aws1" og "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ærten "aws1" skal vi tilføje cc og 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ærten "gcp2" skal vi tilføje cc og 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

Fra hver vært, prøv at pinge hinanden og sørg for at få nogle 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

Kontroller "wg"-outputtet for at bekræfte den aktuelle status. Her er output fra 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

Al status ser god ud. Vi kan se endepunkter, håndtrykstatus og båndbreddestatus mellem noder. Det er tid til at gøre denne konfiguration vedvarende til en konfigurationsfil, så den nemt kan indlæses af WireGuard. Vi vil gemme det i en fil placeret på /etc/wireguard/wg0.conf. Først skal du oprette filen:

$ touch /etc/wireguard/wg0.conf

Eksporter derefter runtime-konfigurationen for interface wg0 og gem den i wg0.conf ved hjælp af "wg-quick"-kommandoen:

$ wg-quick save wg0

Bekræft konfigurationsfilens indhold (eksempel på vært "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 giver nogle seje genveje til at administrere og konfigurere WireGuard-grænseflader. Brug dette værktøj til at bringe netværksgrænsefladen op eller ned:

(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

Til sidst instruerer vi systemd om at indlæse denne grænseflade lige under opstart:

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

På dette tidspunkt er vores VPN-konfiguration færdig, og vi kan nu starte implementeringen.

Implementering af MariaDB-replikering

Når hver node i arkitekturen kan tale med hinanden, er det tid til at gå videre med det sidste trin for at implementere vores MariaDB-replikering ved hjælp af ClusterControl.

Installer ClusterControl på cc:

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

Følg instruktionerne, indtil installationen er fuldført. Dernæst skal vi konfigurere en adgangskodefri SSH fra ClusterControl-vært til begge MariaDB-noder. Generer først en SSH-nøgle til brugerrod:

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

Kopier det offentlige nøgleindhold på /root/.ssh/id_rsa.pub til MariaDB-noderne under /root/.ssh/authorized_keys. Dette forudsætter, at root har tilladelse til at SSH til værten. Ellers skal du konfigurere SSH-dæmonen til at tillade dette i overensstemmelse hermed. Bekræft, at SSH uden adgangskode er konfigureret korrekt. På ClusterControl-knudepunktet, udfør fjern-SSH-kommando og sørg for, at du får et korrekt svar uden nogen adgangskodeprompt:

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

Vi kan nu implementere vores MariaDB-replikering. Åbn en webbrowser og gå til ClusterControl UI på http://public_ip_of_CC/clustercontrol, opret et superadmin-brugerlogin. Gå til Deploy -> MySQL Replication og angiv følgende:

Vælg derefter "MariaDB" som en leverandør med version 10.4. Angiv også MariaDB root-adgangskoden. Under afsnittet "Definer topologi" skal du angive Wireguard IP-adressen (wg0) for MariaDB-noderne, svarende til følgende skærmbillede:

Klik på Implementer og vent, indtil implementeringen er fuldført. Når du er færdig, bør du se følgende:

Vores MariaDB-replikeringsopsætning kører nu på tre forskellige lokationer (kontor, AWS og GCP), forbundet med en sikker VPN-tunneling mellem noder.


  1. mysql - laver en mekanisme, der ligner Oracles sekvenser

  2. Sådan får du poster mellem 2 datoer i MySQL

  3. Sådan får du tilfældige rækker fra SQL Server Table - SQL Server / TSQL Tutorial Del 117

  4. Kan ikke løse sorteringskonflikten mellem SQL_Latin1_General_CP1_CI_AS og Latin1_General_CI_AS i lig med operationen