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

Sådan konfigureres MariaDB 10.3-replikering ved hjælp af Ansible og Vagrant

Manuelle implementeringer er almindelige, men de kan være langsomme og monotone, hvis du nogensinde har prøvet Oracle RAC-installation med Data Guard-opsætning på mere end tre noder, ved du, hvad jeg mener. Afhængigt af antallet af noder kan implementeringstrinnene være tidskrævende og sandsynlige fejl. Selvfølgelig er der mange gode "how-to's" om, hvordan man laver en manuel databaseklyngeopsætning, men med den manuelle tilgang på en skala er der mange yderligere spørgsmål at tage fat på.

Er de andre forekomster i mit miljø opsætning på samme måde? Var det QA-system sat op på samme måde som produktion? Om det, vi lige har implementeret, er produktionsklar? For at løse alle disse spørgsmål bliver implementeringer i stigende grad automatiseret via værktøjer til konfigurationsstyring.

Relaterede ressourcer Databaseautomatisering med Puppet:Implementering af MySQL &MariaDB-replikering Sådan automatiseres implementering af MySQL Galera Cluster ved hjælp af s9s CLI og Chef Sådan automatiseres migrering fra Standalone MySQL til Galera Cluster ved hjælp af Ansible ClusterControl for MariaDB

Populære konfigurationsstyringsværktøjer som Puppet, Chef og Ansible er gennemprøvede teknologier til implementering af forskellige it-tjenester. De hjælper med at eliminere manuelt arbejde, minimere risikoen for menneskelige fejl og gør det muligt at implementere hurtigt. I dagens blog vil vi tage et kig på en af ​​dem.

Ansible er et open source-systemstyringsværktøj til centralisering og automatisering af konfigurationsstyring. Med Ansible kan du nemt automatisere forskellige databaseimplementeringer og udføre simple administrationsopgaver. Vi vil vise, hvordan man automatisk installerer og konfigurerer software såsom MySQL-server i reproducerbare miljøer. I denne blog vil vi fokusere på MariaDB-replikering, men hvis du er interesseret i andre opgaver, så tjek venligst vores andre blogs, hvor vi skriver mere om Ansible.

Vagrant, Virtualbox og Ansible

Ansible kan hjælpe med at implementere MySQL Cluster i skyen eller on-prem. Til formålet med denne blog vil vi bruge den populære opsætning til at køre forskellige tests på stationære maskiner med Vagrant og Virtualbox.

Vagrant er et system, der giver dig mulighed for nemt at skabe og flytte udviklingsmiljøer fra én maskine til en anden. Du skal blot definere, hvilken type VM du vil have i en fil kaldet Vagrantfile og derefter fyre dem op med en enkelt kommando. Den integrerer godt med udbydere af virtuelle maskiner som VirtualBox, VMware og AWS, og hvad der er vigtigt for vores opgave, har den en stor support af Ansible.

Vores Vagrantfile implementerer 2 forekomster på VirtualBox-platformen, en til masterknude og anden slaveknude. Så vil vi bruge Ansible til at køre den nødvendige pakkeinstallation og udføre konfiguration af en master/slave. Nedenfor er listen over opgaver, som vi skal udføre.

  • Installer Vagrant og Virtualbox
  • Konfigurer vagrant-fil og mulig spillebog
  • Start forekomsterne
  • Download de relaterede Vagrant-bokse og Vagrant-fil (dette gøres automatisk)
  • Kør Ansible playbook (dette vil ske automatisk)
  • Føj klyngen til ClusterControl til overvågnings- og administrationsopgaven (såsom sikkerhedskopiering, sikkerhed, brugeradministration, ydeevnestyring og mange andre).

Vagrant, Virtualbox og Ansible installation på Ubuntu

Installer pakker

sudo apt-get install ansible vagrant virtualbox

Opret konfigurationsfiler til Vagrant og 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

Ovenstående vagrant-fil vil oprette to maskiner med følgende konfiguration:

  • Master:2 CPU, 1 GB RAM, Privat IP:192.168.10.2 Port forward:3336
  • Slave:2CPU, 1GB RAM, Privat IP:192.168.10.3, Port forward:3337

Playbook-struktur

I dette trin vil vi definere Ansible playbook. Ansible bruger YAML som et let opmærkningssprog til at definere instruktioner. Vi opretter følgende "maria.yml" baseret på Ansible-filen leveret af 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 for hele din databaseinfrastrukturFind ud af, hvad der ellers er nyt i ClusterControlInstaller ClusterControl GRATIS

Nu er det tid til tilfældene. Vagrant up vil udløse playbook-installation.

$ 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...

Hvis du ikke allerede har downloadet et ubuntu-billede fra Virtualbox, vil vagrant downloade det automatisk ligesom med ovenstående eksempel.

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] **************************************************

Efter vellykket installation af playbook vil du se følgende output, og du bør være i stand til at logge ind på databasen med foruddefinerede legitimationsoplysninger (se playbook).

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

Det næste trin er at importere din master/slave-konfiguration til ClusterControl. Den nemmeste og mest bekvemme måde at installere ClusterControl på er at bruge installationsscriptet fra Severalnines. Du skal blot downloade scriptet og udføre som root-bruger eller bruger med sudo root-tilladelse.

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

Hvis du ønsker at tilføje en ClusterControl-installation til din playbook, kan du bruge følgende instruktioner.

Næste trin er at generere en SSH-nøgle, som vi vil bruge til at konfigurere den adgangskodeløse SSH senere. Hvis du har et nøglepar, som du gerne vil bruge, kan du springe oprettelsen af ​​et nyt over.

ClusterControl:Importer eksisterende klynge

Efter vellykket installation kan du endelig importere din nyoprettede testklynge til ClusterControl.

Vi håber, at dette blogindlæg gav dig indsigt i grundlæggende installation og opsætning af Ansible MariaDB master/slave replikering. Tjek venligst vores andre blogs, hvor vi præsenterer Chef, Puppet, Docker til MariaDB-databaser og andre databaseklynge-implementeringer.


  1. Sådan importerer og eksporterer man en database via phpMyAdmin ('Adgang nægtet oprette database db_name' fejl)

  2. SQL - trækker en udtømningsværdi fra rækker

  3. Top 10 metoder til at forbedre ETL-ydeevne ved hjælp af SSIS

  4. Sådan fungerer ROW_NUMBER() i SQL Server