Saiba mais sobre a DigitanOcean: Adeus Amazon (AWS)… Olá DigitalOcean!

Sem categoria

Uber migra do PostgreSQL para o MySQL

O Uber, como você deve saber, é uma empresa que trouxe para o mercado uma forma rápida, eficiente, e consideravelmente mais barata que os taxis conencionais para se locomover em várias cidades do planeta.

O que talvez não saiba é sobre a tecnologia por trás do serviço.

Aqui vou falar um pouquinho sobre a migração de bancos de dados realizada pelo Uber recentemente. O artigo original foi publicado em um blog do próprio Uber 20 dias antes de eu escrever esse post.

Minha intenção aqui não é traduzir nem fazer um comentário extenso sobre o texto, mas apenas pontuar as informações que achei mais interessantes. Vamos lá:

O Postgres tem um funcionamento que faz gerar várias linhas (fisicamente, no disco, chamada ctid) para uma mesma linha no banco de dados, ou seja, se você tem uma tabela que armazena os dados de uma pessoa, e você altera o telefone dela, uma nova linha física (ctid) é gerada.

Para a maioria dos sistemas, isso não chega a ser um problema. O Postgres tem um recurso chamado auto-vacuum que faz a limpeza das linhas antigas. A questão é que, de tempos em tempos, pode ser necessário parar o sistema por algumas horas e executar um vacuum full (limpeza geral), e para sistemas que não podem parar, isso pode ser um problema. Se muito tempo passa sem a execução de um vacuum full, o sistema começa a ficar lento.

Mas a grande questão para o Uber é que eles replicam os dados em diferentes data centers (costa leste e costa oeste dos Estados Unidos) para Recuperação de Desastres e, nesse caso, a replicação dessas linhas torna-se muito lenta e cara. Com frequência uma alteração estava sendo realizada e não sendo sincronizada corretamente.

O problema é agravado pelo fato de que no caso deles, muitas tabelas tinham muitos índices, e updates pequenos e frequentes eram executados.

Repare que é uma situação específica: replicação de dados em data centers diferentes, com updates frequentes e muitos índices.

Nem todo serviço funciona dessa forma, e obviamente, isso não quer dizer que o Postgres é um banco de dados ruim. Mas no caso específico do Uber, eles tiveram problemas.

Segundo o artigo, o MySQL (com engine InnoDB) cria uma camada a mais de abstração, o que normalmente é uma desvantagem pois deixa o sistema todo mais lento, mas é uma solução no caso da replicação, pois o MySQL replica o DML (update, insert, delete) propriamente dito, e não o registro físico da informação.

Outra questão é a atualização de versão. Usando a versão 9.2, eles tiveram problemas para atualizar para a 9.3, porque demorava tempo demais e o serviço não poderia ficar parado durante esse tempo. Para agravar a situação, todas as réplicas têm que usar a mesma versão, ou seja, eles não poderiam fazer a atualização primeiro em uma ráplica e depois no master, por exemplo. Acrescentam que isso foi resolvido na versão 9.4 em diante, usando o recurso pglogical, que adicona uma camada lógica para replicação.

No MySQL esse problema não existe. É possível, na maioria das situações operar com versões diferentes (já que o que é replicado é o DML em si).

Outro grande problema do Postgres é relativo ao número de conexões. Mesmo em sistemas com abundância de recursos, é bem difícil abrir mais que algumas centenas de conexões, porque o número de conexões é diretamente ligado ao número de processos (mais conexões, mais processos). No MySQL, o número de conexões é diretamente ligado ao número de threads.

Isso faz com que no MySQL seja possível abrir 10 mil conexões sem grandes problemas.

Veja o artigo original para obter mais informações:

Outro artigo comentando o artigo do Uber:


Como descobrir no número do processo de um programa (Ex.: java) no CentOS Linux

Eventualmente precisamos saber o número do processo de um programa.

Os números de todos os processos rodando no sistema podem ser obtidos a partir do comando:

ps aux

Se você quizer sabe o número – e apenas o número – de processo de um programa específico, como por exemplo, o Java? Você pode fazer essa forma:

/sbin/pidof java

Caso você queira outras informações, além do número do precesso, pode fazer dessa forma:

ps aux | grep java

Procedimento testado no CentOS Linux 6.3


Instalando o Nagios no Linux CentOS 5 ou CentOS 6

O Nagios, como talvez você já saiba, é um software para monitoramento de servidores. Não é o objetivo desse artigo explicar o que o Nagios faz, mas sim, como instalar rapidamente no CentOS. Inicialmente o procedimento foi executado no CentOS 5, mas foi atualizado para ser instalado tanto no Centos 5, quanto no CentOS 6.

Recomendo que utilize uma nova instalação (e de preferência que teste primeiro uma máquina virtual), e com acesso à internet.

Todos os comandos abaixo devem ser executados como root. Antes de começar, adquira permissões de root e atualize o sistema:

su -l
yum update

1. Pré-requisitos

Instale os seguintes pacotes:

yum install httpd php
yum install gcc glibc glibc-common
yum install gd gd-devel

Se você estiver instalando no CentOS 6 Minimal, instale também os seguintes pacotes:

yum install perl make

2. Dados para acesso

Crie o usuário nagios e defina a senha:

/usr/sbin/useradd -m nagios
passwd nagios

Crie o grupo nagcmd para permitir comandos externos, enviados pela interface web. Os usuários nagios e apache devem fazer parte desse grupo:

/usr/sbin/groupadd nagcmd
/usr/sbin/usermod -a -G nagcmd nagios
/usr/sbin/usermod -a -G nagcmd apache

3. Baixe o Nagios e os Plugins

Crie um diretório para armezenar os arquivos temporariamente:

mkdir ~/downloads
cd ~/downloads

Baixe os arquivos para instalação do Nagios e dos Plugins (visite http://www.nagios.org/download/ para a última versão). Esse passo-a-passo foi testado com o Nagios 3.1.1 e Nagios Plugins 1.4.11.

wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.3.tar.gz
wget http://nagios-plugins.org/download/nagios-plugins-1.4.11.tar.gz

4. Compile e instale o Nagios

cd ~/downloads
tar xzf nagios-3.2.3.tar.gz
cd nagios-3.2.3

Execute os comandos abaixo para compilar e instalar o Nagios:

./configure --with-command-group=nagcmd
make all
make install
make install-init
make install-config
make install-commandmode

5. Configure o Nagios

Um arquivo de configuração de exemplo está no diretório /usr/local/nagios/etc

Edite o arquivo /usr/local/nagios/etc/objects/contacts.cfg e altere o e-mail associado para que você possa receber alertas:

vi /usr/local/nagios/etc/objects/contacts.cfg

6. Configure a interface web

make install-webconf

Crie o usuário nagiosadmin e digite a senha duas vezes. Não esqueça essa senha, pois ela será necessária para o acesso pela interface web:

htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Reinicie o Apache:

service httpd restart

7. Compile e instale os Plugins

cd ~/downloads
tar xzf nagios-plugins-1.4.11.tar.gz
cd nagios-plugins-1.4.11
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install

8. Inicie o Nagios

Configurar para que o Nagios inicie automaticamente quando o sistema iniciar:

chkconfig --add nagios
chkconfig nagios on

Verificar o arquivo de configuração:

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Se não tiver erros (Errors ou Warnings):

service nagios start

9. Modifique as configurações SELinux

O CentOS vem com o SELinux (Security Enhanced Linux) instalado e configurado no modo "Enforcing" por padrão. Isso pode resultar em um "Internal Server Error" (Erro Interno do Servidor). Para alterar isso, digite:

setenforce 0

Para tornar a alteração permanente, altere o arquivo /etc/selinux/config e deixe a linha SELINUX=disabled

vi /etc/selinux/config

Caso prefira, ao invés de desabilitar o SELinux ou modificar para o modo permissivo, você pode utilizar os comandos abaixo para rodar CGIs no modo "Enforcing" do SELinux:

chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin/
chcon -R -t httpd_sys_content_t /usr/local/nagios/share/

10. Configure o Firewall

Libere a porta 80 no Firewall:

/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/etc/init.d/iptables save
/etc/init.d/iptables restart 

11. Acesse pela Interface Web

Acesse o Nagios pela interface web, pelo seu navegador:

http://localhost/nagios/

Se você estiver instalando em uma máquina remota, troque "localhost" pelo IP do servidor.

Fonte: http://nagios.sourceforge.net/docs/3_0/quickstart-fedora.html

 


Teste

Teste


Phasellus sodales mi in eros tincidunt eleifend.

In ac mauris lorem, vel ornare dolor. Curabitur non ligula elit, nec dapibus dolor. Vestibulum ut neque id nulla lobortis mattis. Ut consectetur convallis nibh, ut placerat tortor imperdiet a. Ut euismod tellus ac neque faucibus tristique at ac sem. Duis ullamcorper rhoncus nisl, ac pharetra ligula sollicitudin ac. Suspendisse imperdiet, est at faucibus dapibus, sapien massa lobortis libero, vitae commodo eros elit sit amet enim. Donec eu justo justo, consectetur porttitor lacus. Phasellus pulvinar vehicula justo vitae pellentesque. Maecenas mollis, elit sed scelerisque hendrerit, augue tortor malesuada tellus, blandit ultrices orci lorem quis purus. Cras tincidunt risus a lacus semper consectetur. Fusce sit amet ligula leo. Sed a tortor turpis, a hendrerit risus. Sed eget urna eros, vel lobortis metus. Duis mauris turpis, ultrices semper ullamcorper in, aliquet ac purus. Vestibulum sed iaculis nibh. Aliquam ullamcorper luctus lacus, ut gravida nulla imperdiet a. Integer hendrerit mollis cursus. Maecenas consequat scelerisque ligula eu aliquam.

Phasellus sodales mi in eros tincidunt eleifend. Vestibulum sed orci erat. Nam eget velit diam, sit amet consequat ligula. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec eleifend dignissim aliquet. Etiam sed metus leo. Nunc lobortis, mi at congue laoreet, nulla magna placerat nibh, vitae malesuada tortor mauris quis orci. Proin non risus non nibh dictum condimentum. Vivamus vitae justo nisi, facilisis blandit eros. In hac habitasse platea dictumst. Ut tincidunt ultrices sapien. Sed sagittis, elit eu ullamcorper luctus, mauris sem egestas lacus, mattis venenatis eros sapien ut lorem. Praesent id tellus eget neque placerat gravida ut eget quam. Proin sagittis ornare dictum. Maecenas cursus, est at rutrum venenatis, eros libero placerat turpis, quis sodales sapien libero et nisi. Fusce quis ante et lorem faucibus venenatis. Praesent vel enim mauris, in facilisis neque. Duis laoreet suscipit purus, eget vehicula sem sagittis nec. Aliquam erat volutpat.

Praesent interdum odio velit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse nec massa purus, id fermentum lectus. Aenean posuere magna vitae lorem dignissim scelerisque. Maecenas pharetra viverra blandit. Nam urna sapien, gravida sed porta non, dignissim et est. Suspendisse potenti. Suspendisse congue lacus non ligula laoreet at fringilla nisl interdum. Nullam vel vulputate quam. Nulla placerat sollicitudin neque nec vulputate. Sed pellentesque, dolor lacinia aliquet condimentum, enim sapien hendrerit sapien, quis vulputate elit urna sit amet sem. Maecenas tempor felis auctor dui tristique vel aliquam justo bibendum. Nunc orci metus, ultrices ac varius sit amet, blandit facilisis leo. Ut dictum, ipsum sit amet iaculis semper, erat elit dictum erat, vel rhoncus arcu justo quis urna. Maecenas a eleifend eros. Pellentesque dolor metus, fringilla pretium dictum sit amet, laoreet id arcu. Proin vitae velit imperdiet sapien tempor feugiat id sit amet dui. Integer eget ipsum at tellus convallis pretium.




  • Redes Sociais

    Facebook  Twitter
  • Projetos Paralelos

  • Estatísticas

    Page Views (desde março de 2010):

    Estatísticas detalhadas
  • Novidades por e-mail!

    Digite seu e-mail:


    Fique tranquilo. Seu e-mail não será usado para outros fins, e você poderá se descadastrar quando quizer.

    Eu!

    Tiago Passos
    Todo o conteúdo desse site esta licenciado sob a licença Creative Commons 3.0 (CC BY 3.0). Você pode copiar e modificar o conteúdo desde que cite o autor.
    iDream theme by Templates Next | Powered by WordPress