Cluster multi-master com MariaDB 10.1 + Galera
Publicado por Bruno Ricardo Rodrigues (última atualização em 20/09/2016)
[ Hits: 3.318 ]
Homepage: Não Possuo
Download MariaDB 10.1 + Galera Cluster.sh
O Galera Cluster possui replicação síncrona, ou seja, todos os nós do cluster vão estar sempre sincronizados permitindo que a aplicação leia e grave em qualquer nó do cluster, e sem se preocupar com a integridade dos dados.
Para facilitar esta tarefa de criação do cluster, criei este script tem por objetivo instalar e configurar um cluster de MariaDB 10.1 utilizando o Galera Cluster no CentOS 7.
Vale ressaltar que a documentação do Galera Cluster recomenda no mínimo 3 nós, por este motivo o script irá solicitar os dados de 3 hosts.
Utilizando o Script:
1 - Baixe o Script no primeiro nó do cluster;
2 - No primeiro host gere a chave SSH com o usuário root com o comando ssh-keygen (Não crie senha);
3 - Compartilhe a chave SSH com os demais hosts, para isso basta utilizar o comando ssh-copy-id root@<IP_HOST>;
4 - Antes de iniciar o Script, tenha em mãos o hostname desejado dos nós do cluster e o IP. O Script se encarregará de alterar o hostname das máquinas e criar as entradas no /etc/hosts;
5 - Inicie o script e responda as informações solicitadas.
Após o término, seu cluster estará pronto para ser utilizado. Para mais informações basta ler a documentação do MariaDB e o Galera Cluster.
Observações: caso o cluster seja desativado (Todos os nós pararem), o primeiro nó do cluster deve ser iniciado com o comando galera_new_cluster, os demais podem ser iniciados normalmente com systemctl start mariadb.
#!/bin/bash #### DEPENDÊNCIAS #### type dialog &>> /tmp/script.log if [ "$?" = 0 ]; then echo -e " \033[0;32m Dependencias Instaladas... \033[0m" else echo -e " \033[0;32m Dependencias não encontradas. Instalando Dependencias... \033[0m" yum install -y dialog > /dev/null echo -e " \033[0;32m Dependencias Instaladas... \033[0m" fi #### INSTALAÇÃO #### instacao_func() { cat > /tmp/$HOST_VAR.sh << COD #!/bin/bash sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config iptables -F iptables -X iptables -t nat -F iptables -t nat -X cat > /etc/init.d/firewall.sh << EOM #!/bin/bash iptables -F iptables -X iptables -t nat -F iptables -t nat -X EOM chmod +x /etc/init.d/firewall.sh chmod +x /etc/rc.d/rc.local echo "/etc/init.d/firewall.sh" >> /etc/rc.d/rc.local echo $THIS_HOST > /etc/hostname /bin/hostname $THIS_HOST cat > /etc/yum.repos.d/MariaDB.repo << EOM # MariaDB 10.1 CentOS repository list - created 2016-07-22 17:17 UTC # http://downloads.mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.1/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1 EOM cat >> /etc/hosts << EOM $IP1 $HOST_IP1 $IP2 $HOST_IP2 $IP3 $HOST_IP3 EOM echo -e " \033[0;32m Instalando o MariaDB 10.1 + Galera Cluster no $THIS_HOST... \033[0m" yum install -y socket MariaDB-server MariaDB-client rsync galera &>> /tmp/script.log echo -e " \033[0;32m Iniciando o MariaDB no $THIS_HOST... \033[0m" systemctl start mariadb echo -e " \033[0;32m Configurando senhas e usuários no MariaDB no $THIS_HOST... \033[0m" echo -e "\ny\n$ROOT_PASS\n$ROOT_PASS\ny\ny\ny\ny\n" | mysql_secure_installation &>> /tmp/script.log mysql -u root -p$ROOT_PASS -e "GRANT USAGE ON *.* TO '$USU_REPL'@'%' IDENTIFIED BY '$USU_PASS'; GRANT ALL PRIVILEGES ON *.* TO '$USU_REPL'@'%'; FLUSH PRIVILEGES;" echo -e " \033[0;32m Configurando o Galera Cluster no $THIS_HOST... \033[0m" systemctl stop mariadb cat > /etc/my.cnf.d/server.cnf << EOM [galera] wsrep_on=ON wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://$IP1,$IP2,$IP3" wsrep_cluster_name="My_Galera_Cluster" wsrep_node_address="$THIS_IP" wsrep_node_name="$THIS_HOST" wsrep_sst_method=rsync wsrep_sst_auth=$USU_REPL:$USU_PASS binlog_format=row default-storage-engine=innodb innodb_autoinc_lock_mode=2 innodb_locks_unsafe_for_binlog=1 query_cache_size=0 query_cache_type=0 bind-address=0.0.0.0 datadir=/var/lib/mysql innodb_log_file_size=100M innodb_file_per_table innodb_flush_log_at_trx_commit=2 EOM COD chmod +x /tmp/$HOST_VAR.sh } exit_func() { dialog --title 'Aviso' --msgbox 'Operação cancelada!' 5 35 clear exit } #### INICIO DO PROGRAMA #### dialog --title 'Obrigado!' --msgbox 'Designed and Developed by Bruno Ricardo Rodrigues.' 5 55 dialog --title 'Requisitos!!' --yesno '1 - Este script DEVE ser executado em um dos nós do cluster\n2 - Este host deve conseguir se conectar com os demais nós sem senha(utilizando chave SSH)\n\nOs requisitos foram atendidos?' 0 0 [ $? -eq 1 ] && exit_func HOST_IP1=$( dialog --stdout --inputbox 'Informe o hostname do PRIMEIRO host (ATUAL):' 0 55 'mariadb-01') [ $? -eq 1 ] && exit_func IP1=`ifconfig $INTERFACE | sed -n '2 p' | awk '{print $2}'` IP1=$( dialog --stdout --inputbox 'Informe o IP do PRIMEIRO host (ATUAL):' 0 55 $IP1) [ $? -eq 1 ] && exit_func HOST_IP2=$( dialog --stdout --inputbox 'Informe o hostname do SEGUNDO host:' 0 55 'mariadb-02') [ $? -eq 1 ] && exit_func IP2=$( dialog --stdout --inputbox 'Informe o IP do SEGUNDO host:' 0 55 ) [ $? -eq 1 ] && exit_func HOST_IP3=$( dialog --stdout --inputbox 'Informe o hostname do TERCEIRO host:' 0 55 'mariadb-03') [ $? -eq 1 ] && exit_func IP3=$( dialog --stdout --inputbox 'Informe o IP do TERCEIRO host:' 0 55 ) [ $? -eq 1 ] && exit_func USU_REPL=$( dialog --stdout --inputbox 'Informe o usuário utilizado para a replicação:' 0 55 'galera') [ $? -eq 1 ] && exit_func USU_PASS=$( dialog --stdout --inputbox 'Informe a senha utilizada para a replicação:' 0 55 ) [ $? -eq 1 ] && exit_func ROOT_PASS=$( dialog --stdout --inputbox 'Informe a senha do usuário root no MariaDB:' 0 55 ) [ $? -eq 1 ] && exit_func dialog --title 'Informações do Cluster' --yesno 'Nome HOST 1 ='$HOST_IP1'\nIP HOST 1 ='$IP1'\nNome HOST 2 ='$HOST_IP2'\nIP HOST 2 ='$IP2'\nNome HOST 3 ='$HOST_IP3'\nIP HOST 4 ='$IP3'\n\nUsuário de replicação ='$USU_REPL'\nSenha de replicação ='$USU_PASS'\nSenha do root no DB ='$ROOT_PASS'\n\nAs informações acima estão corretas?' 0 0 [ $? -eq 1 ] && exit_func THIS_IP=$IP1 THIS_HOST=$HOST_IP1 HOST_VAR=host1 instacao_func THIS_IP=$IP2 THIS_HOST=$HOST_IP2 HOST_VAR=host2 instacao_func THIS_IP=$IP3 THIS_HOST=$HOST_IP3 HOST_VAR=host3 instacao_func clear sh /tmp/host1.sh ssh $IP2 'bash -s' < /tmp/host2.sh ssh $IP3 'bash -s' < /tmp/host3.sh echo -e " \033[0;32m Iniciando o Cluster \033[0m" galera_new_cluster echo -e " \033[0;32m Cluster iniciado \033[0m" echo -e " \033[0;32m $HOST_IP1 ingressou no cluster! \033[0m" ssh $IP2 'systemctl start mariadb' echo -e " \033[0;32m $HOST_IP2 ingressou no cluster! \033[0m" ssh $IP3 'systemctl start mariadb' echo -e " \033[0;32m $HOST_IP3 ingressou no cluster! \033[0m" sleep 5 rm -rf /tmp/host*sh dialog --title 'Sucesso' --msgbox 'Parabéns! O cluster já está funcionando.\n\nLogs podem ser encontrados em /tmp/script.log' 8 55 mysql -u root -p$ROOT_PASS -e "SHOW STATUS LIKE 'WSREP%'"
facilitando e organizando a configuracao do mrtg com ipfm
Criar usuários com ponto (nome.usuario) no Slackware
rc.mailMyIp - Informa seu IP externo para o Gmail
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta