MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Jak skonfigurować replikację MariaDB 10.3 za pomocą Ansible i Vagrant

Wdrożenia ręczne są powszechne, ale mogą być powolne i monotonne. Jeśli kiedykolwiek próbowałeś instalacji Oracle RAC z konfiguracją Data Guard na więcej niż trzech węzłach, wiesz, o co mi chodzi. W zależności od liczby węzłów etapy wdrażania mogą być czasochłonne i mogą powodować błędy. Oczywiście istnieje wiele dobrych porad dotyczących ręcznej konfiguracji klastra bazy danych, jednak przy ręcznym podejściu na dużą skalę należy odpowiedzieć na wiele dodatkowych pytań.

Czy pozostałe instancje w moim środowisku są skonfigurowane w ten sam sposób? Czy ten system kontroli jakości został skonfigurowany w taki sam sposób, jak produkcja? Czy to, co właśnie wdrożyliśmy, jest gotowe do produkcji? Aby odpowiedzieć na wszystkie te pytania, wdrożenia są coraz częściej zautomatyzowane za pomocą narzędzi do zarządzania konfiguracją.

Powiązane zasoby Automatyzacja bazy danych za pomocą Puppet:Wdrażanie replikacji MySQL i MariaDB Jak zautomatyzować wdrażanie klastra MySQL Galera za pomocą CLI s9s i szefa kuchni Jak zautomatyzować migrację z samodzielnego MySQL do klastra Galera za pomocą Ansible ClusterControl for MariaDB

Popularne narzędzia do zarządzania konfiguracją, takie jak Puppet, Chef i Ansible, to sprawdzone technologie we wdrażaniu różnych usług IT. Pomagają wyeliminować pracę ręczną, minimalizują ryzyko błędu ludzkiego i umożliwiają szybkie wdrożenie. Na dzisiejszym blogu przyjrzymy się jednemu z nich.

Ansible to narzędzie do zarządzania systemem typu open source do centralizacji i automatyzacji zarządzania konfiguracją. Dzięki Ansible możesz łatwo zautomatyzować różne wdrożenia baz danych i wykonać proste zadania administracyjne. Pokażemy, jak automatycznie instalować i konfigurować oprogramowanie, takie jak serwer MySQL w odtwarzalnych środowiskach. W tym blogu skupimy się na replikacji MariaDB, ale jeśli interesują Cię inne zadania, sprawdź nasze inne blogi, na których piszemy więcej o Ansible.

Vagrant, Virtualbox i Ansible

Ansible może pomóc we wdrożeniu klastra MySQL w chmurze lub lokalnie. Na potrzeby tego bloga użyjemy popularnej konfiguracji do uruchamiania różnych testów na komputerach stacjonarnych z Vagrantem i Virtualboxem.

Vagrant to system, który pozwala łatwo tworzyć i przenosić środowiska programistyczne z jednej maszyny na drugą. Po prostu określ, jaki typ maszyny wirtualnej chcesz w pliku o nazwie Vagrantfile, a następnie uruchom je za pomocą jednego polecenia. Dobrze integruje się z dostawcami maszyn wirtualnych, takimi jak VirtualBox, VMware i AWS, a co ważne dla naszego zadania, ma świetne wsparcie dla Ansible.

Nasz Vagrantfile wdraża 2 instancje na platformie VirtualBox, jedną dla węzła głównego, a drugą dla węzła podrzędnego. Następnie użyjemy Ansible do uruchomienia instalacji niezbędnych pakietów i wykonania konfiguracji master/slave. Poniżej znajduje się lista zadań, które zamierzamy wykonać.

  • Zainstaluj Vagrant i Virtualbox
  • Skonfiguruj plik włóczęgów i instrukcję obsługi ansibla
  • Uruchom instancje
  • Pobierz powiązane pudełka Vagrant i plik Vagrant (odbywa się to automatycznie)
  • Uruchom podręcznik Ansible (zostanie to zrobione automatycznie)
  • Dodaj klaster do ClusterControl, aby wykonać zadanie monitorowania i zarządzania (takie jak tworzenie kopii zapasowych, bezpieczeństwo, zarządzanie użytkownikami, zarządzanie wydajnością i wiele innych).

Instalacja Vagrant, Virtualbox i Ansible na Ubuntu

Zainstaluj pakiety

sudo apt-get install ansible vagrant virtualbox

Utwórz pliki konfiguracyjne dla Vagrant i Ansible

$ mkdir mariadbtest
$ vi Vagrantfile
VAGRANTFILE_API_VERSION = "2"
 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "maria.yml"
    ansible.sudo = true
  end
  config.vm.define "master" do |master|
    master.vm.hostname = "master"
    master.vm.network "forwarded_port", guest: 3306, host: 3336
    master.vm.network "private_network", ip: "192.168.10.2"        
  end
  config.vm.define "slave" do |slave|
    slave.vm.hostname = "slave"
    slave.vm.network "forwarded_port", guest: 3306, host: 3337
    slave.vm.network "private_network", ip: "192.168.10.3"                
  end
  config.vm.provider "virtualbox" do |v|
    v.memory = 1024
    v.cpus = 2
  end
end

Powyższy plik włóczęgi utworzy dwie maszyny z następującą konfiguracją:

  • Master:2 procesory, 1 GB pamięci RAM, prywatny adres IP:192.168.10.2 Przekierowanie portów:3336
  • Slave:2 procesory, 1 GB pamięci RAM, prywatny adres IP:192.168.10.3, przekierowanie portów:3337

Struktura poradnika

W tym kroku zdefiniujemy podręcznik do gry Ansible. Ansible używa YAML jako łatwego języka znaczników do definiowania instrukcji. Tworzymy następujący plik „maria.yml” na podstawie pliku Ansible dostarczonego przez Mariadb.

$vi maria.yml
- hosts: master:slave
  user: vagrant
  tasks:
  - name: Install MariaDB repository
    apt_repository: repo='deb http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.3/ubuntu trusty main' state=present
  - name: Add repository key to the system
    apt_key: keyserver=keyserver.ubuntu.com id=0xcbcb082a1bb943db
  - name: Install MariaDB Server
    apt: name=mariadb-server state=latest update_cache=yes
  - name: Install python module
    apt: name=python-mysqldb state=installed
  - name: Create replication account
    mysql_user: name=repl host="%" password=s3cr3tPaSSwordR priv=*.*:"REPLICATION SLAVE" state=present
  - name: Create readwrite user
    mysql_user: name=rwuser host="%" password=s3cr3tPaSSwordR priv=*.*:SELECT,INSERT,UPDATE,DELETE,CREATE,DROP state=present
  - name: Modify configuration file to listen on all interfaces
    lineinfile: dest=/etc/mysql/my.cnf regexp="^bind-address" line="bind-address=0.0.0.0"
- hosts: master
  user: vagrant
  tasks:
  - name: Modify configuration file to setup server ID
    lineinfile: dest=/etc/mysql/my.cnf regexp="^#server-id" line="server-id=1"
  - name: Restart mysql service
    service: name=mysql state=restarted
  - name: Reset master binlog
    command: /usr/bin/mysql -u root -e "RESET MASTER"
- hosts: slave
  user: vagrant
  tasks:
  - name: Modify configuration file to setup server ID
    lineinfile: dest=/etc/mysql/my.cnf regexp="^#server-id" line="server-id=2"
  - name: Setup replication
    command: /usr/bin/mysql -uroot -e "CHANGE MASTER TO master_host='192.168.10.2', master_user='repl', master_password='s3cr3tPaSSwordR', master_use_gtid=current_pos"
  - name: Restart mysql service
    service: name=mysql state=restarted
ClusterControlSingle Console dla całej infrastruktury bazy danychDowiedz się, co jeszcze nowego w ClusterControlZainstaluj ClusterControl ZA DARMO

Teraz czas na instancje. Vagrant up uruchomi instalację podręcznika.

$ vagrant up
DEPRECATION: The 'sudo' option for the Ansible provisioner is deprecated.
Please use the 'become' option instead.
The 'sudo' option will be removed in a future release of Vagrant.

==> vagrant: A new version of Vagrant is available: 2.2.4 (installed version: 2.2.3)!
==> vagrant: To upgrade visit: https://www.vagrantup.com/downloads.html

Bringing machine 'master' up with 'virtualbox' provider...
Bringing machine 'slave' up with 'virtualbox' provider...
==> master: Box 'ubuntu/trusty64' could not be found. Attempting to find and install...
    master: Box Provider: virtualbox
    master: Box Version: >= 0
==> master: Loading metadata for box 'ubuntu/trusty64'
    master: URL: https://vagrantcloud.com/ubuntu/trusty64
==> master: Adding box 'ubuntu/trusty64' (v20190429.0.1) for provider: virtualbox
    master: Downloading: https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20190429.0.1/providers/virtualbox.box
    master: Download redirected to host: cloud-images.ubuntu.com
    master: Progress: 7% (Rate: 551k/s, Estimated time remaining: 0:14:31)

Bringing machine 'master' up with 'virtualbox' provider...
Bringing machine 'slave' up with 'virtualbox' provider...

Jeśli nie masz już pobranego obrazu Ubuntu z Virtualbox, vagrant pobierze go automatycznie, tak jak w powyższym przykładzie.

PLAY [master:slave] ************************************************************

TASK [Gathering Facts] *********************************************************
ok: [slave]

TASK [Install MariaDB repository] **********************************************
changed: [slave]

TASK [Add repository key to the system] ****************************************
changed: [slave]

TASK [Install MariaDB Server] **************************************************

Po udanej instalacji playbook zobaczysz następujące dane wyjściowe i powinieneś być w stanie zalogować się do bazy danych za pomocą predefiniowanych danych uwierzytelniających (patrz playbook).

PLAY RECAP ********************************************************************
master                     : ok=12   changed=10   unreachable=0    failed=0 

Następnym krokiem jest zaimportowanie konfiguracji master/slave do ClusterControl. Najłatwiejszym i najwygodniejszym sposobem instalacji ClusterControl jest użycie skryptu instalacyjnego dostarczonego przez Manynines. Po prostu pobierz skrypt i wykonaj jako użytkownik root lub użytkownik z uprawnieniami sudo root.

$ wget http://www.severalnines.com/downloads/cmon/install-cc
$ chmod +x install-cc
$ ./install-cc # as root or sudo user

Jeśli chcesz dodać instalację ClusterControl do swojego podręcznika, możesz skorzystać z poniższych instrukcji.

Następnym krokiem jest wygenerowanie klucza SSH, którego użyjemy później do skonfigurowania bezhasłowego SSH. Jeśli masz parę kluczy, której chcesz użyć, możesz pominąć tworzenie nowej.

ClusterControl:zaimportuj istniejący klaster

Po udanej instalacji możesz wreszcie zaimportować nowo utworzony klaster testowy do ClusterControl.

Mamy nadzieję, że ten wpis na blogu dał Ci wgląd w podstawy instalacji i konfiguracji replikacji master/slave Ansible MariaDB. Sprawdź nasze inne blogi, na których przedstawiamy Chef, Puppet, Docker dla bazy danych MariaDB i innych wdrożeń klastrów baz danych.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Napraw „BŁĄD 1054 (42S22):Nieznana kolumna „colname” w „klauzula zamówienia” w MariaDB

  2. Jak skonfigurować AppArmor dla systemów opartych na MySQL (MySQL/MariaDB Replication + Galera)

  3. Jak OCT() działa w MariaDB

  4. 4 sposoby na oddzielenie godzin, minut i sekund od wartości czasu w MariaDB

  5. Porównanie odzyskiwania do punktu w czasie Amazon RDS z ClusterControl