sql >> Database >  >> RDS >> MariaDB

MariaDB 10.3-replicatie instellen met Ansible en Vagrant

Handmatige implementaties zijn gebruikelijk, maar ze kunnen traag en eentonig zijn. Als u ooit Oracle RAC-installatie met Data Guard-configuratie op meer dan drie knooppunten hebt geprobeerd, weet u wat ik bedoel. Afhankelijk van het aantal knoop punten, kunnen de implementatiestappen tijdrovend zijn en kunnen fouten optreden. Natuurlijk zijn er veel goede "how-to's" over het handmatig instellen van een databasecluster, maar met de handmatige aanpak op een schaal zijn er veel aanvullende vragen die moeten worden beantwoord.

Zijn de andere instanties in mijn omgeving op dezelfde manier ingesteld? Was dat QA-systeem op dezelfde manier opgezet als productie? Of wat we zojuist hebben geïmplementeerd, klaar is voor productie? Om al die vragen aan te pakken, worden implementaties steeds vaker geautomatiseerd via configuratiebeheertools.

Gerelateerde bronnen Database-automatisering met Puppet:MySQL- en MariaDB-replicatie implementeren De implementatie van MySQL Galera-cluster automatiseren met s9s CLI en Chef Migratie automatiseren van standalone MySQL naar Galera-cluster met Ansible ClusterControl voor MariaDB

Populaire configuratiebeheertools zoals Puppet, Chef en Ansible zijn bewezen technologieën bij het inzetten van verschillende IT-services. Ze helpen handmatig werk te elimineren, het risico op menselijke fouten te minimaliseren en een snelle implementatie mogelijk te maken. In de blog van vandaag zullen we er een bekijken.

Ansible is een open source systeembeheertool voor het centraliseren en automatiseren van configuratiebeheer. Met Ansible kunt u eenvoudig verschillende database-implementaties automatiseren en eenvoudige beheertaken uitvoeren. We laten zien hoe u automatisch software zoals MySQL-server installeert en configureert in reproduceerbare omgevingen. In deze blog gaan we ons concentreren op MariaDB-replicatie, maar als je geïnteresseerd bent in andere taken, bekijk dan onze andere blogs waar we meer schrijven over Ansible.

Dwaalgast, Virtualbox en Ansible

Ansible kan helpen om MySQL Cluster in de cloud of op locatie te implementeren. Voor deze blog gaan we de populaire setup gebruiken voor het uitvoeren van verschillende tests op desktopmachines met Vagrant en Virtualbox.

Vagrant is een systeem waarmee u eenvoudig ontwikkelomgevingen kunt maken en verplaatsen van de ene machine naar de andere. Definieer eenvoudig welk type VM u wilt in een bestand met de naam Vagrantfile en start ze vervolgens met een enkele opdracht. Het integreert goed met aanbieders van virtuele machines zoals VirtualBox, VMware en AWS en wat belangrijk is voor onze taak, het heeft een geweldige ondersteuning van Ansible.

Onze Vagrantfile implementeert 2 instances op het VirtualBox-platform, één voor master-node en tweede slave-node. Vervolgens zullen we de Ansible gebruiken om de benodigde pakketten te installeren en de configuratie van een master/slave uit te voeren. Hieronder staat de lijst met taken die we gaan uitvoeren.

  • Installeer Vagrant en Virtualbox
  • Configureer zwervend bestand en ansible playbook
  • Lanceer de instanties
  • Download de gerelateerde Vagrant-boxen en Vagrantfile (dit gebeurt automatisch)
  • Voer Ansible playbook uit (dit wordt automatisch gedaan)
  • Voeg het cluster toe aan ClusterControl voor de bewakings- en beheertaak (zoals back-ups, beveiliging, gebruikersbeheer, prestatiebeheer en vele andere).

Vagrant-, Virtualbox- en Ansible-installatie op Ubuntu

Pakketten installeren

sudo apt-get install ansible vagrant virtualbox

Configuratiebestanden maken voor Vagrant en 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

Bovenstaand zwervend bestand zal twee machines maken met de volgende configuratie:

  • Master:2 CPU's, 1GB RAM, privé-IP:192.168.10.2 Port forward:3336
  • Slave:2CPU, 1GB RAM, Privé IP:192.168.10.3, Port forward:3337

Playbook-structuur

In deze stap zullen we het Ansible-playbook definiëren. Ansible gebruikt YAML als een gemakkelijke opmaaktaal om instructies te definiëren. We maken de volgende "maria.yml" aan op basis van het Ansible-bestand geleverd door 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 voor uw gehele database-infrastructuurOntdek wat er nog meer nieuw is in ClusterControlInstalleer ClusterControl GRATIS

Nu is het tijd voor de instanties. Vagrant up activeert de installatie van het playbook.

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

Als u nog geen ubuntu-afbeelding van Virtualbox heeft gedownload, zal zwerver deze automatisch downloaden, zoals in het bovenstaande voorbeeld.

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

Na een succesvolle installatie van het playbook ziet u de volgende uitvoer en moet u zich kunnen aanmelden bij de database met vooraf gedefinieerde inloggegevens (zie playbook).

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

De volgende stap is het importeren van uw master/slave-configuratie in ClusterControl. De gemakkelijkste en handigste manier om ClusterControl te installeren, is door het installatiescript te gebruiken dat wordt geleverd door Verschillend. Download eenvoudig het script en voer het uit als de root-gebruiker of gebruiker met sudo root-toestemming.

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

Als je een ClusterControl-installatie aan je playbook wilt toevoegen, kun je de volgende instructies gebruiken.

De volgende stap is het genereren van een SSH-sleutel die we later zullen gebruiken om de wachtwoordloze SSH in te stellen. Als u een sleutelpaar heeft dat u wilt gebruiken, kunt u het aanmaken van een nieuw sleutelpaar overslaan.

ClusterControl:bestaande cluster importeren

Na een succesvolle installatie kunt u eindelijk uw nieuw gemaakte testcluster importeren in ClusterControl.

We hopen dat deze blogpost je inzicht heeft gegeven in de basis van Ansible MariaDB master/slave replicatie-installatie en setup. Bekijk onze andere blogs waar we Chef, Puppet, Docker voor MariaDB-database en andere implementaties van databaseclusters presenteren.


  1. Java van Oracle op Mac begrijpen

  2. Standaard tekencodering van SQL Server

  3. Inleiding tot synoniemen in SQL Server

  4. Oracle 11g:standaard ingesteld op statische waarde wanneer query niets retourneert