sql >> Databáze >  >> RDS >> MariaDB

Multi-cloudové nasazení pro replikaci MariaDB pomocí WireGuard

V tomto příspěvku na blogu se podíváme na to, jak nasadit nastavení replikace MariaDB v prostředí s více cloudy. Předpokládejme, že naše primární aplikace je umístěna v AWS, je nejlepším nápadem nastavit AWS jako primární datové centrum hostující master MariaDB. MariaDB slave bude hostován na GCP a ClusterControl se nachází v privátní cloudové infrastruktuře společnosti v kanceláři. Všechny jsou připojeny přes WireGuard jednoduchý a bezpečný VPN tunel v rozsahu IP 192.168.50.0/24. ClusterControl použije toto rozhraní VPN k provádění nasazení, správy a monitorování na všech databázových uzlech na dálku.

Zde jsou naši hostitelé:

  • Amazon Web Service (AWS):
    • Hostitel:MariaDB master
    • Veřejné IP:54.151.183.93
    • Soukromá IP:10.15.3.170/24 (VPC)
    • IP VPN:192.168.50.101
    • OS:Ubuntu 18.04.4 LTS (Bionic)
    • Specifikace:t2.medium (2 vCPU, 4 GB paměti)
  • Google Cloud Platform (GCP): 
    • Hostitel:MariaDB slave
    • Veřejné IP:35.247.147.95
    • Soukromá IP:10.148.0.9/32
    • IP VPN:192.168.50.102
    • OS:Ubuntu 18.04.4 LTS (Bionic)
    • Specifikace:n1-standard-1 (1 vCPU, 3,75 GB paměti)
  • VMware Private Cloud (Office):
    • Hostitel:ClusterControl
    • Veřejné IP:3.25.96.229
    • Soukromá IP:192.168.55.138/24
    • IP VPN:192.168.50.100
    • OS:Ubuntu 18.04.4 LTS (Bionic)
    • Specifikace:Privátní cloud VMWare (2 CPU, 2 GB RAM)

Naše finální architektura bude vypadat nějak takto:

Mapování hostitele pod /etc/hosts na všech uzlech je:

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

Nastavení mapování hostitelů zjednoduší naši správu překladu názvů mezi hostiteli, kde při konfiguraci protějšků Wireguard použijeme název hostitele místo IP adresy.

Instalace WireGuard pro VPN

Vzhledem k tomu, že všechny servery jsou na třech různých místech, která jsou připojena pouze prostřednictvím veřejné sítě, nastavíme VPN tunelování mezi všemi uzly pomocí Wireguard. Pro tuto komunikaci přidáme na každý uzel nové síťové rozhraní s následující interní konfigurací IP:

  • 192.168.50.100 – ClusterControl (soukromý cloud Office)
  • 192.168.50.101 – MariaDB master (AWS)
  • 192.168.50.102 – MariaDB slave (GCP)

Nainstalujte Wireguard, jak je znázorněno na této stránce, na všechny tři uzly:

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

U hostitelů Ubuntu přijměte výchozí hodnotu, pokud budete vyzváni během instalace wireguard. Pamatujte, že je velmi důležité upgradovat operační systém na nejnovější verzi, aby drátěná ochrana fungovala.

Restartujte hostitele, aby se načetl modul jádra Wireguard:

$ reboot

Jakmile budete nahoře, nakonfigurujte naše mapování hostitelů v /etc/hosts na všech uzlech na něco takového:

$ 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

Nastavení Wireguard

** Všechny kroky v této části by měly být provedeny na všech uzlech, pokud není uvedeno jinak.

1) Na všech uzlech jako uživatel root vygenerujte soukromý klíč a přidělte zabezpečené oprávnění

$ umask 077
$ wg genkey > /root/private

2) Poté přidejte nové rozhraní nazvané wg0:

$ ip link add wg0 type wireguard

3) Přidejte odpovídající IP adresu do rozhraní wg0:

Pro hostitele "cc":

$ ip addr add 192.168.50.100/32 dev wg0

Pro hostitele "aws1":

$ ip addr add 192.168.50.101/32 dev wg0

Pro hostitele "gcp2":

$ ip addr add 192.168.50.102/32 dev wg0

4) Nastavte naslouchací port na 55555 a přiřaďte vygenerovaný soukromý klíč rozhraní Wireguard:

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

5) Otevřete síťové rozhraní:

$ ip link set wg0 up

6) Jakmile je rozhraní aktivní, ověřte pomocí příkazu "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

Nyní jsme připraveni je všechny propojit.

Připojení hostitelů přes rozhraní Wireguard

Nyní přidáme všechny uzly jako rovnocenné a umožníme jim vzájemně komunikovat. Příkaz vyžaduje 4 důležité parametry:

  • peer :Veřejný klíč pro cílového hostitele.
  • povolené-ips :IP adresa hostitele, se kterým je povoleno komunikovat.
  • koncový bod :Hostitel a Wireguard a naslouchací port (zde konfigurujeme všechny uzly tak, aby používaly port 55555).
  • persistent-keepalive :Protože NAT a stavové firewally sledují „spojení“, pokud si peer za NAT nebo firewallem přeje přijímat příchozí pakety, musí udržovat mapování NAT/firewallu v platnosti tím, že pravidelně odesílá pakety udržující aktivitu. Výchozí hodnota je 0 (zakázat).

Proto na hostiteli cc musíme přidat „aws1“ a „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

Na hostiteli "aws1" musíme přidat cc a 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

Na hostiteli "gcp2" musíme přidat cc a 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

Zkuste si od každého hostitele navzájem pingnout a ujistěte se, že dostanete nějaké odpovědi:

(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

Zkontrolujte výstup "wg" a ověřte aktuální stav. Zde je výstup z pohledu hostitele 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

Všechny stavy vypadají dobře. Můžeme vidět koncové body, stav handshake a stav šířky pásma mezi uzly. Je na čase, aby tato konfigurace trvala do konfiguračního souboru, aby ji mohl WireGuard snadno načíst. Uložíme jej do souboru umístěného v /etc/wireguard/wg0.conf. Nejprve vytvořte soubor:

$ touch /etc/wireguard/wg0.conf

Potom exportujte konfiguraci runtime pro rozhraní wg0 a uložte ji do wg0.conf pomocí příkazu "wg-quick":

$ wg-quick save wg0

Ověřte obsah konfiguračního souboru (příklad pro hostitele "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 poskytuje skvělé zkratky pro správu a konfiguraci rozhraní WireGuard. Tento nástroj použijte ke zvýšení nebo snížení síťového rozhraní:

(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

Nakonec dáváme systemd pokyn, aby načetl toto rozhraní přímo během spouštění:

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

V tomto okamžiku je naše konfigurace VPN dokončena a nyní můžeme zahájit nasazení.

Nasazení replikace MariaDB

Jakmile spolu každý uzel v architektuře bude moci mluvit, je čas přejít k poslednímu kroku nasazení naší replikace MariaDB pomocí ClusterControl.

Nainstalujte ClusterControl na cc:

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

Postupujte podle pokynů, dokud nebude instalace dokončena. Dále musíme nastavit SSH bez hesla z hostitele ClusterControl do obou uzlů MariaDB. Nejprve vygenerujte klíč SSH pro uživatele root:

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

Zkopírujte obsah veřejného klíče v /root/.ssh/id_rsa.pub do uzlů MariaDB pod /root/.ssh/authorized_keys. To předpokládá, že root má povoleno SSH k hostiteli. V opačném případě nakonfigurujte démona SSH tak, aby to umožňoval. Ověřte, zda je správně nastaveno SSH bez hesla. V uzlu ClusterControl spusťte vzdálený příkaz SSH a ujistěte se, že dostanete správnou odpověď bez výzvy k zadání hesla:

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

Nyní můžeme nasadit naši replikaci MariaDB. Otevřete webový prohlížeč a přejděte do uživatelského rozhraní ClusterControl na adrese http://public_ip_of_CC/clustercontrol, vytvořte přihlašovací uživatelské jméno superadmin. Přejděte na Deploy -> MySQL Replication a zadejte následující:

Poté vyberte "MariaDB" jako dodavatele s verzí 10.4. Zadejte také root heslo MariaDB. V části "Define Topology" zadejte adresu IP Wireguard (wg0) uzlů MariaDB, podobně jako na následujícím snímku obrazovky:

Klikněte na Deploy a počkejte, až bude nasazení dokončeno. Po dokončení byste měli vidět následující:

Naše nastavení replikace MariaDB nyní běží na třech různých místech (kancelář, AWS a GCP), která jsou propojena se zabezpečeným tunelováním VPN mezi uzly.


  1. Jak přidat omezení primárního klíče do sloupců identity do všech tabulek v databázi SQL Server - SQL Server / Výukový program TSQL, část 63

  2. Připojte se k databázi MSSQL pomocí Flask-SQLAlchemy

  3. Jak funguje ASCII() v MariaDB

  4. Proveďte while smyčku v SQL Server 2008