MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Внедряване в множество облаци за репликация на MariaDB с помощта на WireGuard

В тази публикация в блога ще разгледаме как да разположим настройка за репликация на MariaDB в многооблачна среда. Да предположим, че основното ни приложение се намира в AWS, най-добрата идея е да настроите AWS като основен център за данни, хостващ главната програма на MariaDB. Подчинението на MariaDB ще се хоства на GCP, а ClusterControl се намира в частната облачна инфраструктура на компанията в офиса. Всички те са свързани чрез прост и сигурен VPN тунел WireGuard в IP обхвата 192.168.50.0/24. ClusterControl ще използва този VPN интерфейс за извършване на внедряване, управление и наблюдение на всички възли на базата данни от разстояние.

Ето нашите хостове:

  • Уеб услуга на Amazon (AWS):
    • Хост:MariaDB master
    • Обществен IP:54.151.183.93
    • Частен IP адрес:10.15.3.170/24 (VPC)
    • VPN IP:192.168.50.101
    • ОС:Ubuntu 18.04.4 LTS (Bionic)
    • Спецификация:t2.medium (2 vCPU, 4 GB памет)
  • Google Cloud Platform (GCP): 
    • Хост:MariaDB slave
    • Обществен IP:35.247.147.95
    • Частен IP адрес:10.148.0.9/32
    • VPN IP:192.168.50.102
    • ОС:Ubuntu 18.04.4 LTS (Bionic)
    • Спецификация:n1-standard-1 (1 vCPU, 3,75 GB памет)
  • VMware Private Cloud (Office):
    • Хост:ClusterControl
    • Обществен IP:3.25.96.229
    • Частен IP:192.168.55.138/24
    • VPN IP:192.168.50.100
    • ОС:Ubuntu 18.04.4 LTS (Bionic)
    • Спецификация:Частен облак VMWare (2 CPU, 2 GB RAM)

Нашата окончателна архитектура ще изглежда така:

Преобразуването на хоста под /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

Настройването на съпоставяне на хост ще опрости управлението ни за разрешаване на имена между хостове, където ще използваме името на хоста вместо IP адреса, когато конфигурираме партньори на Wireguard.

Инсталиране на WireGuard за VPN

Тъй като всички сървъри са на три различни места, които са свързани само чрез публична мрежа, ще настроим VPN тунелиране между всички възли, използвайки Wireguard. Ще добавим нов мрежов интерфейс на всеки възел за тази комуникация със следната вътрешна IP конфигурация:

  • 192.168.50.100 - ClusterControl (частен облак на Office)
  • 192.168.50.101 - MariaDB master (AWS)
  • 192.168.50.102 - MariaDB slave (GCP)

Инсталирайте Wireguard, както е показано на тази страница и на трите възела:

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

За Ubuntu хостове просто приемете стойността по подразбиране, ако бъдете подканени по време на инсталацията на wireguard. Имайте предвид, че е много важно да надстроите операционната система до най-новата версия, за да работи wireguard.

Рестартирайте хоста, за да заредите модула на ядрото Wireguard:

$ reboot

След като се появи, конфигурирайте нашето съпоставяне на хост в /etc/hosts на всички възли към нещо подобно:

$ 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

Настройване на Wireguard

** Всички стъпки в този раздел трябва да се изпълняват на всички възли, освен ако не е посочено друго.

1) На всички възли като root потребител генерирайте частен ключ и задайте защитено разрешение

$ umask 077
$ wg genkey > /root/private

2) След това добавете нов интерфейс, наречен wg0:

$ ip link add wg0 type wireguard

3) Добавете съответния IP адрес към интерфейса wg0:

За хост "cc":

$ ip addr add 192.168.50.100/32 dev wg0

За хост "aws1":

$ ip addr add 192.168.50.101/32 dev wg0

За хост "gcp2":

$ ip addr add 192.168.50.102/32 dev wg0

4) Направете порта за слушане на 55555 и задайте генерирания частен ключ към интерфейса на Wireguard:

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

5) Изведете мрежовия интерфейс:

$ ip link set wg0 up

6) След като интерфейсът е готов, проверете с командата "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

Сега сме готови да ги свържем всички.

Свързване на хостове чрез Wireguard интерфейс

Сега ще добавим всички възли като партньори и ще им позволим да комуникират помежду си. Командата изисква 4 важни параметъра:

  • връстник :Публичен ключ за целевия хост.
  • разрешени-ips :IP адрес на хоста, с който е разрешено да комуникира.
  • крайна точка :Хостът и Wireguard и портът за слушане (тук конфигурираме всички възли да използват порт 55555).
  • persistent-keepalive :Тъй като NAT и защитните стени с поддържане на състоянието следят "връзките", ако партньор зад NAT или защитна стена желае да получава входящи пакети, той трябва да поддържа валидно NAT/защитната стена, като периодично изпраща пакети за поддържане на активност. Стойността по подразбиране е 0 (забранено).

Следователно на хост cc трябва да добавим „aws1“ и „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

На хост "aws1" трябва да добавим cc и 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

На хост "gcp2" трябва да добавим cc и 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

От всеки хост, опитайте се да пингувате един друг и се уверете, че получавате някои отговори:

(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

Проверете изхода "wg", за да проверите текущото състояние. Ето изхода от точката на изглед на хост 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

Цялото състояние изглежда добре. Можем да видим крайните точки, състоянието на ръкостискане и състоянието на честотната лента между възлите. Време е да направите тази конфигурация постоянна в конфигурационен файл, така че да може лесно да бъде заредена от WireGuard. Ще го съхраним във файл, намиращ се в /etc/wireguard/wg0.conf. Първо, създайте файла:

$ touch /etc/wireguard/wg0.conf

След това експортирайте конфигурацията по време на изпълнение за интерфейс wg0 и я запазете в wg0.conf с помощта на командата "wg-quick":

$ wg-quick save wg0

Проверете съдържанието на конфигурационния файл (пример за хост "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

Командата wg-quick предоставя някои страхотни преки пътища за управление и конфигуриране на интерфейсите на WireGuard. Използвайте този инструмент, за да преместите мрежовия интерфейс нагоре или надолу:

(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

Накрая инструктираме systemd да зареди този интерфейс точно по време на стартиране:

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

В този момент нашата VPN конфигурация е завършена и вече можем да започнем внедряването.

Разгръщане на MariaDB репликация

След като всеки възел в архитектурата може да общува помежду си, е време да продължим с последната стъпка за внедряване на нашата MariaDB репликация с помощта на ClusterControl.

Инсталирайте ClusterControl на cc:

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

Следвайте инструкциите, докато инсталацията завърши. След това трябва да настроим SSH без парола от хоста на ClusterControl към двата възела на MariaDB. Първо, генерирайте SSH ключ за потребителски root:

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

Копирайте съдържанието на публичния ключ в /root/.ssh/id_rsa.pub в възлите на MariaDB под /root/.ssh/authorized_keys. Това предполага, че root е разрешен към SSH към хоста. В противен случай конфигурирайте SSH демона, за да разрешите това съответно. Проверете дали SSH без парола е настроен правилно. На възел ClusterControl изпълнете отдалечена SSH команда и се уверете, че ще получите правилен отговор без подкана за парола:

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

Вече можем да внедрим нашата репликация на MariaDB. Отворете уеб браузър и отидете на потребителския интерфейс на ClusterControl на http://public_ip_of_CC/clustercontrol, създайте потребителски вход за супер администратор. Отидете на Разгръщане -> MySQL репликация и посочете следното:

След това изберете "MariaDB" като доставчик с версия 10.4. Посочете и паролата за root на MariaDB. Под секцията „Дефиниране на топология“ посочете IP адреса на Wireguard (wg0) на възлите MariaDB, подобно на следната екранна снимка:

Щракнете върху Разгръщане и изчакайте, докато разполагането завърши. След като сте готови, трябва да видите следното:

Нашата настройка за репликация на MariaDB вече работи на три различни места (офис, AWS и GCP), свързани със защитен VPN тунел между възли.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разбиране на ефектите от високата латентност в решенията MySQL и MariaDB с висока достъпност

  2. Ръководство за поточно репликация на клъстер на MySQL Galera:част втора

  3. Как работи CURTIME() в MariaDB

  4. Коригирайте „ГРЕШКА 1054 (42S22):Неизвестна колона „…“ в „on clause“ в MariaDB

  5. Какво е новото в MariaDB 10.6