UPDATE: Acho que arrumei a formatação. Deve estar legível agora.
!!!ATENÇÃO – A visualização de algumas sessões pode estar truncando conteúdo! Pelo jeito a tag <pre> tá quebrada. Preciso olhar isso, mas preguiça, né? Dá pra ler direitinho usando o RSS !!!!
Mesmo com a a infra-estrutura toda virtualizada e clusterizada nos ESXi fazer um cluster de MySQL ainda é uma boa idéia.
Não só você pode colocar as duas máquinas em storages diferentes e eliminar mais um ponto de falha mas também você pode dedicar uma (ou mais) VM(s) para read-only.
Isso quer dizer que seus usuários rodando reports e chamando estatísticas/gráficos no meio do dia não vão afetar o desempenho de quem está entrando operações em produção.
Isso dito entra em cena o MySQL Multi Master Replication Manager (MMM): Um conjunto de scripts Perl que facilita a replicação e gerenciamento do seu cluster MySQL.
Abaixo os passos que utilizei para criar um cluster de 2 máquinas CentOS 5.5. Vou assumir que você já tem as máquinas em pé com MySQL devidamente instalado.
Além das máquinas rodando o MySQL você vai precisar de uma terceira, que é o monitor. É esse cara que vai manter os olhos no cluster, decidir quando uma máquina morreu e gerenciar os papéis de cada uma.
Nem idéia ainda dos requisitos mínimos desse servidor, visto que apenas fiz um teste pequeno aqui. Mas tá rodando sem reclamar em 1 processador e 512 de RAM.
Cenário:
IP Leitura/Gravação MySQL -> 10.0.0.1
IP Somente Leitura MySQL -> 10.0.0.100
IP Servidor MySQL 1 (hostname master) -> 10.0.0.2
IP Servidor MySQL 2 (hostname master2) -> 10.0.0.3
IP Monitor (hostname mon) -> 10.0.0.10
Editando a configuração do MySQL:
Em cada um dos servidores adicione as seguintes linhas embaixo da sessão [mysqld] do /etc/my.cnf:
#MMM read-only replicate-ignore-db = mysql binlog-ignore-db = mysql log-bin=master-binary relay-log=master-relay server-id=2
#MMMread-onlyreplicate-ignore-db = mysqlbinlog-ignore-db = mysqllog-bin=master2-binaryrelay-log=master2-relayserver-id=2
Instalando o MMM:
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
yum -y install perl-Algorithm-Diff perl-Class-Singleton perl-DBD-MySQL perl-Log-Log4perl perl-Log-Dispatch perl-Proc-Daemon perl-MailTools
yum install mysql-mmm.noarch mysql-mmm-agent.noarch mysql-mmm-tools.noarch
Configurando os Usuários:
Dentro de cada servidor precisamos criar 3 usuários: replication, agent e monitor. Abra seu console do MySQL e mande:
GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'10.0.0.%' IDENTIFIED BY 'monitor_password'; GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'10.0.0.%' IDENTIFIED BY 'agent_password'; GRANT REPLICATION SLAVE ON *.* TO 'replication'@'10.0.0.%' IDENTIFIED BY 'replication_password'; FLUSH PRIVILEGES; FLUSH TABLES WITH READ LOCK;Abra duas sessões (uma em cada MySQL) e não as feche depois de rodar os comandos acima. Com eles executados faça a seguir:
SHOW MASTER STATUS;E o resultado vai ser algo como:
mysql> SHOW MASTER STATUS;+-----------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+-----------------------+----------+--------------+------------------+| master2-binary.000003 | 98 | | mysql |+-----------------------+----------+--------------+------------------+1 row in set (0.00 sec)mysql>Você vai usar essa informação nos comandos abaixo. Note que você deve utilizar o output da execução em uma máquina no input da outra, de forma que crie uma cross-reference entre elas:
change master to master_host = '10.0.0.3', master_user='replication', master_password='replication_password', master_log_file='master2-binary.000001', master_log_pos=98;A seguir vamos editar o /etc/mysql-mmm/mmm_common.conf:
active_master_role writer <host default> cluster_interface eth1 pid_path /var/run/mysql-mmm/mmm_agentd.pid bin_path /usr/libexec/mysql-mmm/ replication_user replication replication_password replication_password agent_user mmm_agent agent_password agent_password </host> <host master> ip 10.0.0.2 mode master peer master2 </host> <host master2> ip 10.0.0.3 mode master peer master </host> <role writer> hosts master,master2 ips 10.0.0.1 mode exclusive </role> <role reader> hosts master,master2 ips 10.0.0.100 mode balanced </role>Este arquivo deve ser exatamente o mesmo nos dois lados do cluster!
E só fica faltando agora editar o /etc/mysql-mmm/mmm_agent.conf:
include mmm_common.conf this masterA variável “this” indica o hostname. Portanto no meu caso o outro servidor vai ter um “this master2”Com tudo isso pronto vamos no servidor de monitoramento e fazemos:
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm yum install mysql-mmm-monitor.noarchCopiamos nele também o /etc/mysql-mmm/mmm_common.conf.
E depois editamos o /etc/mysql-mmm/mmm_mon.conf:
<monitor> ip 127.0.0.1 pid_path /var/run/mysql-mmm/mmm_mond.pid bin_path /usr/libexec/mysql-mmm status_path /var/lib/mysql-mmm/mmm_mond.status ping_ips 10.0.0.1,10.0.0.2,10.0.0.3,10.0.0.100 auto_set_online 60 # The kill_host_bin does not exist by default, though the monitor will # throw a warning about it missing. See the section 5.10 "Kill Host # Functionality" in the PDF documentation. # # kill_host_bin /usr/libexec/mysql-mmm/monitor/kill_host # </monitor> <host default> monitor_user mmm_monitor monitor_password monitor_password </host> debug 0Iniciando os serviços:
Nos servidores MySQL:
service mysql-mmm-agent start chkconfig mysql-mmm-agent onNo servidor de monitoração:
service mysql-mmm-monitor start chkconfig mysql-mmm-monitor onSe tudo correu bem em alguns segundos você vai ter os serviços rodando e pode ver o status deles à partir do servidor de monitoração com o seguinte comando:
[root@mon ~]# mmm_control show master(10.0.0.2) master/ONLINE. Roles: writer(10.0.0.1) master2(10.0.0.3) master/ONLINE. Roles: reader(10.0.0.100)Agora é só aprender mais sobre as opções do mmm_control e correr pro abraço.Referências:
http://www.packtpub.com/article/install-manage-use-mmm-for-mysql-high-availability
http://fedoraproject.org/wiki/EPEL/FAQ#What_is_EPEL.3F
http://mysql-mmm.org/mmm2:guide
Related posts