MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Como configurar a replicação MariaDB 10.3 usando Ansible e Vagrant


As implantações manuais são comuns, mas podem ser lentas e monótonas, se você já experimentou a instalação do Oracle RAC com configuração do Data Guard em mais de três nós, sabe o que quero dizer. Dependendo do número de nós, as etapas de implantação podem ser demoradas e prováveis ​​de erros. Claro, existem muitos bons “como fazer” sobre como fazer uma configuração manual de cluster de banco de dados, no entanto, com a abordagem manual em escala, há muitas questões adicionais a serem abordadas.

As outras instâncias do meu ambiente estão configuradas da mesma maneira? Esse sistema de controle de qualidade foi configurado da mesma maneira que a produção? Se o que acabamos de implantar está pronto para produção? Para resolver todas essas questões, as implantações estão sendo cada vez mais automatizadas por meio de ferramentas de gerenciamento de configuração.
Recursos relacionados Automação de banco de dados com Puppet:implantando MySQL e replicação MariaDB Como automatizar a implantação do MySQL Galera Cluster usando s9s CLI e Chef Como automatizar a migração do MySQL autônomo para o Galera Cluster usando o Ansible ClusterControl for MariaDB
Ferramentas populares de gerenciamento de configuração, como Puppet, Chef e Ansible, são tecnologias comprovadas na implantação de vários serviços de TI. Eles ajudam a eliminar o trabalho manual, minimizam o risco de erro humano e possibilitam uma implantação rápida. No blog de hoje, vamos dar uma olhada em um deles.

Ansible é uma ferramenta de gerenciamento de sistema de código aberto para centralizar e automatizar o gerenciamento de configuração. Com o Ansible, você pode automatizar facilmente várias implantações de banco de dados e executar tarefas simples de administração. Mostraremos como instalar e configurar automaticamente softwares como o servidor MySQL em ambientes reproduzíveis. Neste blog, vamos nos concentrar na replicação do MariaDB, mas se você estiver interessado em outras tarefas, consulte nossos outros blogs onde escrevemos mais sobre o Ansible.

Vagrant, Virtualbox e Ansible


O Ansible pode ajudar a implantar o MySQL Cluster na nuvem ou no local. Para os propósitos deste blog, vamos usar a configuração popular para executar vários testes em máquinas desktop com Vagrant e Virtualbox.

Vagrant é um sistema que permite criar e mover facilmente ambientes de desenvolvimento de uma máquina para outra. Basta definir que tipo de VM você deseja em um arquivo chamado Vagrantfile e ativá-los com um único comando. Ele se integra bem com provedores de máquinas virtuais como VirtualBox, VMware e AWS e o que é importante para nossa tarefa é um ótimo suporte do Ansible.

Nosso Vagrantfile implanta 2 instâncias na plataforma VirtualBox, uma para o nó mestre e o segundo nó escravo. Em seguida, usaremos o Ansible para executar a instalação dos pacotes necessários e executar a configuração de um mestre/escravo. Abaixo está a lista de tarefas que vamos realizar.
  • Instale o Vagrant e o Virtualbox
  • Configurar arquivo vagrant e playbook ansible
  • Iniciar as instâncias
  • Baixe as caixas Vagrant relacionadas e o Vagrantfile (isso é feito automaticamente)
  • Execute o manual do Ansible (isso será feito automaticamente)
  • Adicione o cluster ao ClusterControl para a tarefa de monitoramento e gerenciamento (como backups, segurança, gerenciamento de usuários, gerenciamento de desempenho e muitos outros).

Instalação do Vagrant, Virtualbox e Ansible no Ubuntu


Instalar pacotes
sudo apt-get install ansible vagrant virtualbox

Criar arquivos de configuração para Vagrant e 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

O arquivo vagrant acima criará duas máquinas com a seguinte configuração:
  • Mestre:2 CPUs, 1 GB de RAM, IP privado:192.168.10.2 Encaminhamento de porta:3336
  • Escravo:2 CPU, 1 GB de RAM, IP privado:192.168.10.3, Encaminhamento de porta:3337

Estrutura do manual


Nesta etapa, definiremos o playbook do Ansible. O Ansible usa YAML como uma linguagem de marcação fácil para definir instruções. Criamos o seguinte “maria.yml” com base no arquivo Ansible entregue pelo 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 para toda a sua infraestrutura de banco de dados Descubra o que mais há de novo no ClusterControlInstale o ClusterControl GRATUITAMENTE
Agora é a vez das instâncias. O Vagrant up acionará a instalação do 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...

Se você não tiver uma imagem do ubuntu do Virtualbox já baixada, o vagrant fará o download automaticamente, como no exemplo acima.
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] **************************************************

Após a instalação bem-sucedida do playbook, você verá a seguinte saída e poderá fazer login no banco de dados com credenciais predefinidas (consulte o playbook).
PLAY RECAP ********************************************************************
master                     : ok=12   changed=10   unreachable=0    failed=0 

A próxima etapa é importar sua configuração mestre/escravo para o ClusterControl. A maneira mais fácil e conveniente de instalar o ClusterControl é usar o script de instalação fornecido pela Variousnines. Basta baixar o script e executar como usuário root ou usuário com permissão sudo root.
$ wget http://www.severalnines.com/downloads/cmon/install-cc
$ chmod +x install-cc
$ ./install-cc # as root or sudo user

Se você deseja adicionar uma instalação do ClusterControl ao seu manual, você pode usar as seguintes instruções.

O próximo passo é gerar uma chave SSH que usaremos para configurar o SSH sem senha posteriormente. Se você tem um par de chaves que gostaria de usar, pode pular a criação de um novo.
ClusterControl:Importar cluster existente
Após a instalação bem-sucedida, você pode finalmente importar seu cluster de teste recém-criado para o ClusterControl.

Esperamos que esta postagem do blog tenha fornecido informações básicas sobre a instalação e configuração da replicação mestre/escravo do Ansible MariaDB. Por favor, verifique nossos outros blogs onde apresentamos Chef, Puppet, Docker para banco de dados MariaDB e outras implementações de cluster de banco de dados.