Sei sulla pagina 1di 31

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

- PG Conference Brasil 2007 Lucio Chiessi


12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Objetivo
Demonstrar um caso de uso do PostgreSQL como SGDB em bancos de dados de grande tamanho, alta disponibilidade e grande numero de transaes para aplicativos de provedores de contedos para telefones celulares.
12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

ACOTEL Group

12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

A Acotel uma empresa Italiana com aes na bolsa de Milo e a Acotel do Brasil, como sua subsidiaria, responsvel pelos negcios da Amrica Latina. No Brasil a Acotel tem um contrato de exclusividade com a segunda maior operadora de telefonia celular para a prestao de servios de VAS (Servios de Valor Agregado). Entre os servios prestados podemos destacar: Venda de contedos: Ringtones, Truetones, games, entre outros; Interatividade SMS; Canais SMS; Um portal de contedo gerado pelo usurio; No Brasil desde 2001, sempre procurou adotar o software livre como a fundamentao de seus sistemas, contribuindo sempre com a comunidade de software livre.
12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Estudo 1: Portal Meu Contedo


O portal de contedo gerado pelo usurio (Portal Meu Contedo) foi desenvolvido em no primeiro semestre de 2007 e liberado para o publico em Julho de 2007. O servio permite o envio de contedos gerados pelo usurio. O contedo enviado passa a ficar disponvel para todos os usurios da operadora. A cada download de seu contedo, o usurio recebe um valor fixo em forma de bnus para ser utilizado em servios de dados e voz. A expectativa inicial de adeso e uploads de contedos foi superada e com a escalabilidade do WEBFarm e do PostgreSQL foi possvel adaptar a estrutura facilmente, permitindo que o servio no ficasse indisponvel mesmo nos momentos de maior trafego. Desde o seu lanamento, o portal teve picos de utilizao devido a anncios em pesados veculos de comunicao. A Acotel foi pioneira no desenvolvimento deste tipo de servio no Brasil.
12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Funo
Venda de Contedo de Clientes
Vdeos Tones Wallpapers

Recursos Utilizados no Banco


Armazenamento de Vdeos, Fotos e RingTones diretamente no banco de dados utilizando colunas do tipo bytea; Regras de negcio concentradas no banco de dados com o uso intensivo de functions, rules e triggers; Todo cdigo no banco est em PL/pgSQL; Uso de funes dblink() para interao com outras bases de dados PostgreSQL;
12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Estudo 2: Portal de Servios VAS


O portal de agregao dos servios de VAS (Servios de Valor Agregado) foi desenvolvido em no primeiro semestre de 2007 e liberado para o publico em novembro de 2007. O servio permite a implementao de Servios VAS completamente customizveis atravs de intefaces web de administrao, estatstica e controle de contedos. Os servios VAS podem incluir desde o servios de assinaturas de canais de mensagens via SMS, downloads de contedos para celulares, games e portais de navegao WAP. Este portal WAP est agregando, em uma s interface e banco, vrios recursos que hoje so disponibilizados de uma forma menos integrada. Devido a uma grande gama de tipos de servios fornecidos, o banco de dados e sua estrutura devem ser bem flexveis, precisos e de alto desempenho dado o grande numero de requisies a serem atendidas ao longo do tempo.
12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Funo
Base para Servios WAP/SMS
Downloads; Noticias; Chats; Outros afins;

Recursos Utilizados no Banco


Regras de negcio concentradas no banco de dados com o uso intensivo de functions, rules e triggers; Armazenamento de Vdeos, Fotos e RingTones diretamente no banco de dados utilizando colunas do tipo bytea; Todo cdigo no banco est em PL/pgSQL;
12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Informaes Armazenadas:
Clientes
(18 milhes de linhas)

Aparelhos Templates Contedos


select pg_size_pretty( pg_total_relation_size('binari o')) = 55Gb

Noticias
(5 milhes de linhas / dia estimado)
12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Hardware/Software Utilizado:
Studio (1 servidor)
2 x Intel Xeon 1.6Ghz dualcore 4Mb L2; 4Gb RAM; CentOS release 5; PostgreSQL 8.2.4;

Portal VAS (3 servidores)


2 x Intel Xeon 1.6Ghz quadcore 4Mb L2; 6Gb RAM; CentOS release 5; PostgreSQL 8.2.4;
12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Escolhas:
Replicador:
Slony; PGCluster; PGReplicator;

Balanceamento de Carga:
PGPool; PGPool-II;
12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL. #1 #2

PostreSQL Server e Slon process

PostreSQL Server e Slon process

Master Clientes

Slave #1 #3

Clientes
PostreSQL Server e Slon process PGPool-II

Slave #2

Clientes

12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Slony:
Vantagens
Pode ser instalado e configurado com o banco em produo; Pode ser modificado o Master para prover failover; Pode ser utilizado em replicao em cascata;

Desvantagens:
No possui load balancer prprio; Somente Master / Slave; No replica DDL;

12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Conceitos e Elementos de Replicao:


Cluster: Nodes; Paths; Listeners; Sets; Subscribers; Slon start nodes;

12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Check list inicial:


Listar tabelas da replica; Checar chaves primrias; Listar sequencias para replica; Tabelas sem PK (no recomendvel); Editar / Criar slony_tools.conf; tcpip_socket = true em postgresql.conf; Acessos ok em pg_hba.conf; Boa conectividade de rede entre os hosts;

12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Criao do Cluster de Replicao:


Slonik # slonik <<_EOF_ comandos _EOF_ # slonik < arquivo gerado com comandos. Atravs do utilitrio Slonik so feitos todos os procedimentos de configurao do Cluster...

12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Comandos e parametros para o slonik:


cluster name = <nome do cluster> (gera _schema nos bds) node # admin conninfo = <DSN> init cluster (node #, comments) store node (node #, comments) store path (server, client, conninfo) store listen (origin, receiver, provider) create set (id, origin, comments) set add table (set id, origin, id, full qualified name, comment) set add sequence (set id, origin, id, full qualified name, comment) subscribe set (id, provider, receiver, foward);
12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

# slonik < create_node_paths.slonik


Contedo do arquivo create_node_paths.slonik
cluster name = acotel_brazil_cluster; node 1 admin conninfo='host=10.2.100.34 dbname=acotel_brazil user=aco_0135 port=5432'; node 2 admin conninfo='host=10.2.100.36 dbname=acotel_brazil user=aco_0132 port=5432'; node 3 admin conninfo='host=10.2.100.21 dbname=acotel_brazil user=aco_0211 port=5432'; # INIT CLUSTER init cluster (id=1, comment = 'N master 100.34'); store node (id=2, comment = 'N slave 100.36'); store node (id=3, comment = 'N slave 100.21'); # STORE PATH echo 'Next: configure paths for each node/origin'; store path (server = 1, client = 2, conninfo = 'host=10.2.100.34 dbname=acotel_brazil user=aco_0135 port=5432'); store path (server = 2, client = 1, conninfo = 'host=10.2.100.36 dbname=acotel_brazil user=aco_0132 port=5432'); store path (server = 1, client = 3, conninfo = 'host=10.2.100.34 dbname=acotel_brazil user=aco_0135 port=5432'); store path (server = 3, client = 1, conninfo = 'host=10.2.100.21 dbname=acotel_brazil user=aco_0211 port=5432'); echo 'Replication nodes prepared'; echo 'Please start a slon replication daemon for each node';

12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

# slonik < create_listen.slonik

Contedo do arquivo create_listen.slonik


cluster name = acotel_brazil_cluster; node 1 admin conninfo='host=10.2.100.34 dbname=acotel_brazil user=aco_0135 port=5432'; node 2 admin conninfo='host=10.2.100.36 dbname=acotel_brazil user=aco_0132 port=5432'; node 3 admin conninfo='host=10.2.100.21 dbname=acotel_brazil user=aco_0211 port=5432'; # CREATE LISTENERS store listen (origin = 1, receiver = 2, provider = 1); store listen (origin = 1, receiver = 3, provider = 1); store listen (origin = 2, receiver = 1, provider = 2); store listen (origin = 3, receiver = 1, provider = 3);

12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

# slonik < create_sets.slonik


Contedo do arquivo create_sets.slonik
cluster name = acotel_brazil_cluster; node 1 admin conninfo='host=10.2.100.34 dbname=acotel_brazil user=aco_0135 port=5432'; node 2 admin conninfo='host=10.2.100.36 dbname=acotel_brazil user=aco_0132 port=5432'; node 3 admin conninfo='host=10.2.100.21 dbname=acotel_brazil user=aco_0211 port=5432'; # TABLE ADD KEY # CREATE SET try { create set (id = 13, origin = 1, comment = 'Set 13 for acotel_brazil_cluster'); } on error { echo 'Could not create subscription set 13 for acotel_brazil_cluster!'; exit -1; } # SET ADD TABLE echo 'Subscription set 13 created'; echo 'Adding tables to the subscription set'; set add table (set id = 13, origin = 1, id = 77, full qualified name = '_teste_cluster.teste_insert', comment = 'Table _teste_cluster.teste_insert with primary key'); echo 'Add primary keyed table _teste_cluster.teste_insert';
12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Continuao do arquivo create_sets.slonik


# SET ADD SEQUENCE echo 'Adding sequences to the subscription set'; set add sequence (set id = 13, origin = 1, id = 77, full qualified name = '_teste_cluster.teste_insert_id_teste_seq', comment = 'Sequence _teste_cluster.teste_insert_id_teste_seq'); echo 'Add sequence _teste_cluster.teste_insert_id_teste_seq'; echo 'All tables added';

# CONFIG SUBSCRIBERS subscribe set (id=76, provider = 1, receiver = 2, foward = no); subscribe set (id=77, provider = 1, receiver = 2, foward = no);

12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Utilizando os altperl scripts:


Scripts que podem ser utilizados para as configuraes do cluster de replicao. Utilizar a chave --with-perltools

slonik_build_env slonik_create_set slonik_drop_node, slonik_drop_set, slonik_drop_table slonik_init_cluster slon_start slon_kill

12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Conceitos e Elementos de Replicao:


Cluster: Nodes; Paths; Listeners; Sets; Subscribers; Slon start nodes;

12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL. #1 #2

PostreSQL Server e Slon process

PostreSQL Server e Slon process

Master Clientes

Slave #1 #3

Clientes
PGPool-II PostreSQL Server e Slon process

Slave #2 Clientes

12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL. Pgpool - II um middleware que funciona entre servidores PostgreSQL e um cliente de dados PostgreSQL. Ela fornece as seguintes caractersticas: Controla o numero de conexes aos servidores PostgreSQL atravs de um pool
de conexes abertas entre o PGPool e os servidores configurados. Conexes que chegam dos clientes so direcionadas para conexes j existentes com os bancos; Fica totalmente transparente para clientes com conexes compatveis com o PostgreSQL, no necessitando serem feitas nos clientes modificaes na programao para acessar as informaes nos Bancos de dados configurados no pool; Pode prover algum tipo de replicao enviando as queries para todos os bancos configurados, porm no garante que as informaes sejam sincronizadas para um banco de dados em caso de falha; Realiza um grande trabalho de load balancing, onde pode ser configurado a razao de distribuiao das queries para cada banco de dados configurado no pool; Pode ser configurado no modo Master / Slave (para uso com o Slony) ou no modo paralelo para prover replicao; Possui uma inteface Web que pode ser integrada ao Apache para facil administrao e configurao de conexes e funcionamento do PGPool; Adies ou excluses de Servidores PostgreSQL podem ser feitas facilmente atravs da interface de configurao em a necessidade de reboot no deamon do PGPool;
12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Recursos Bsicos a Serem configurados no PGPool-II:


O arquivo de configuraes do pgpool chamado pgpool.conf armazena todos os parametros de configurao necessrios a operao. Veremos aqui os mais importantes a titulo de exemplo:

listen_address: port: backend_host_name: backend_port: max_pool: connection_life_time: replication_mode: replication_strict: load_balance_mode:


12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

weight_ (queries): master_slave_mode: connection_cache: health_check_timeout: health_check_period:

12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Testes de Carga e Replicas:


Utilizao do Apache JMeter;
Carga de registros com valores aleatrios gerados por random() * 1.000.000 em colunas indexadas e tambm com colunas preenchidas por sequencias; selects simultneos aos inserts com valores tambm aleatrios sendo buscados via pgpool e tb com conexo direta aos bancos de dados; Carga de tabelas com objetos em colunas do tipo bytea; Alto desempenho constado e com preciso na replicao.
(tempo de teste: 2,5 dias 18 milhoes linhas)

12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Muito Obrigado!

12/12/07 20:52

Uso de Bancos de Dados Grandes, Replicao e Balanceamento de Carga com PostgreSQL.

Contato:
E-mail: lucio@vorio.eti.br Skype: lucio_chiessi

12/12/07 20:52

Potrebbero piacerti anche