Cluster multi-master com MariaDB 10.1 + Galera
Publicado por Bruno Ricardo Rodrigues (última atualização em 20/09/2016)
[ Hits: 3.335 ]
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%'"
SlackelsPKG 1.0 - uma réplica de gerenciador de pacotes para o Slackware Current
Backup do Firebird por data - via rede ou local
Script de alteração do sources.list
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Como ordenar datas corretamente usando o Calc? (3)
Mint/Ubuntu desligam ao fechar a tampa (2)