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 MariaDBPopularne 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 klasterPo 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.