PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Desafios de dimensionar o banco de dados Moodle PostgreSQL

O Moodle é o Sistema de Gerenciamento de Aprendizagem (LMS) mais popular, permitindo que educadores criem seu próprio site com cursos ou conteúdo que ampliam o aprendizado. Esses tipos de plataformas estão se tornando cada vez mais importantes para permitir que você continue aprendendo remotamente quando o sistema de ensino tradicional não estiver disponível ou apenas como complemento dele, portanto, o aumento de tráfego ou usuários exige dimensionar seu ambiente para garantir uma resposta baixa Tempo.

A escalabilidade é a propriedade de um sistema/banco de dados para lidar com uma quantidade crescente de demandas adicionando recursos. Existem diferentes abordagens disponíveis para dimensionar seu banco de dados, dependendo da maneira como você precisa dimensioná-lo e, em um ambiente de produção, provavelmente um longo tempo de inatividade não é desejado, portanto, você também deve levar isso em consideração.

Neste blog, veremos quais opções de dimensionamento estão disponíveis e como dimensionar seu banco de dados Moodle PostgreSQL de maneira fácil, sem afetar seu sistema em execução.

Escala horizontal e escala vertical

Existem duas maneiras principais de dimensionar seu banco de dados:

  • Escalonamento horizontal (escalonamento horizontal):é realizado adicionando mais nós de banco de dados criando ou aumentando um cluster de banco de dados.
  • Escalonamento vertical (scale-up):é realizado adicionando mais recursos de hardware (CPU, memória, disco) a um nó de banco de dados existente.

Para dimensionamento horizontal , você pode adicionar mais nós de banco de dados como nós de espera. Ele pode ajudá-lo a melhorar o desempenho de leitura equilibrando o tráfego entre os nós. Nesse caso, você precisará adicionar um balanceador de carga para distribuir o tráfego para o nó correto, dependendo da política e do estado do nó. Você também deve considerar adicionar dois ou mais nós do balanceador de carga para evitar um único ponto de falha e usar uma ferramenta como “Keepalived”, para garantir a disponibilidade. Keepalived é um serviço que permite configurar um endereço IP virtual dentro de um grupo ativo/passivo de servidores. Este endereço IP virtual é atribuído a um servidor ativo (balanceador de carga ativo). Caso este servidor falhe, o Endereço IP é migrado automaticamente para o servidor passivo “Secundário”, permitindo que ele continue trabalhando com o mesmo Endereço IP de forma transparente para os sistemas.

Para dimensionamento vertical , pode ser necessário alterar alguns parâmetros de configuração para permitir que o PostgreSQL use um recurso de hardware novo ou melhor. Vamos ver alguns desses parâmetros da documentação do PostgreSQL.

  • work_mem:especifica a quantidade de memória a ser usada por operações de classificação interna e tabelas de hash antes de gravar em arquivos de disco temporários. Várias sessões em execução podem estar realizando essas operações simultaneamente, portanto, a memória total usada pode ser muitas vezes o valor de work_mem.
  • maintenance_work_mem:especifica a quantidade máxima de memória a ser usada pelas operações de manutenção, como VACUUM, CREATE INDEX e ALTER TABLE ADD FOREIGN KEY. Configurações maiores podem melhorar o desempenho de limpeza e restauração de despejos de banco de dados.
  • autovacuum_work_mem:especifica a quantidade máxima de memória a ser usada por cada processo de trabalho de autovacuum.
  • autovacuum_max_workers:especifica o número máximo de processos de autovacuum que podem estar em execução ao mesmo tempo.
  • max_worker_processes:define o número máximo de processos em segundo plano que o sistema pode suportar. Especifique o limite do processo, como limpeza, pontos de verificação e mais trabalhos de manutenção.
  • max_parallel_workers:define o número máximo de trabalhadores que o sistema pode suportar para operações paralelas. Trabalhadores paralelos são retirados do conjunto de processos de trabalho estabelecido pelo parâmetro anterior.
  • max_parallel_maintenance_workers:define o número máximo de trabalhadores paralelos que podem ser iniciados por um único comando de utilitário. Atualmente, o único comando de utilitário paralelo que suporta o uso de trabalhadores paralelos é CREATE INDEX e somente ao construir um índice de árvore B.
  • effective_cache_size:define a suposição do planejador sobre o tamanho efetivo do cache de disco que está disponível para uma única consulta. Isso é levado em consideração nas estimativas do custo de usar um índice; um valor mais alto torna mais provável que varreduras de índice sejam usadas, um valor mais baixo torna mais provável que varreduras sequenciais sejam usadas.
  • shared_buffers:define a quantidade de memória que o servidor de banco de dados usa para buffers de memória compartilhada. Geralmente, são necessárias configurações significativamente mais altas que o mínimo para um bom desempenho.
  • temp_buffers:define o número máximo de buffers temporários usados ​​por cada sessão do banco de dados. Esses são buffers de sessão local usados ​​apenas para acesso a tabelas temporárias.
  • effective_io_concurrency:Define o número de operações de E/S de disco simultâneas que o PostgreSQL espera que possam ser executadas simultaneamente. Aumentar esse valor aumentará o número de operações de E/S que qualquer sessão individual do PostgreSQL tenta iniciar em paralelo. Atualmente, essa configuração afeta apenas verificações de heap de bitmap.
  • max_connections:determina o número máximo de conexões simultâneas com o servidor de banco de dados. Aumentar esse parâmetro permite que o PostgreSQL execute mais processos de back-end simultaneamente.

O desafio aqui pode ser saber se você precisa dimensionar seu banco de dados Moodle e de que maneira, e a resposta é Monitoramento.

Monitorando PostgreSQL para Moodle

O dimensionamento de um banco de dados é um processo complexo, portanto, você deve verificar algumas métricas para poder determinar a melhor estratégia para dimensioná-lo.

Você pode monitorar o uso de CPU, memória e disco para determinar se há algum problema de configuração ou se realmente precisa dimensionar seu banco de dados. Por exemplo, se você estiver vendo uma alta carga do servidor, mas a atividade do banco de dados estiver baixa, provavelmente não há necessidade de escaloná-lo, você só precisa verificar os parâmetros de configuração para combiná-lo com seus recursos de hardware.

Verificar o espaço em disco usado pelo nó PostgreSQL por banco de dados pode ajudá-lo a confirmar se você precisa de mais disco ou até mesmo de uma partição de tabela. Para verificar o espaço em disco usado por um banco de dados/tabela você pode usar alguma função do PostgreSQL como pg_database_size ou pg_table_size.

Do lado do banco de dados, você deve verificar:

  • Quantidade de conexão
  • Executando consultas
  • Uso do índice
  • Inchar
  • Atraso de replicação

Essas podem ser métricas claras para confirmar se o dimensionamento do seu banco de dados é necessário.

ClusterControl como um sistema de dimensionamento e monitoramento

ClusterControl pode ajudá-lo a lidar com as duas formas de dimensionamento mencionadas anteriormente e monitorar todas as métricas necessárias para confirmar o requisito de dimensionamento.

Se você ainda não está usando o ClusterControl, você pode instalá-lo e implantar ou importar seu banco de dados PostgreSQL atual selecionando a opção “Importar” e seguir os passos, para aproveitar todos os recursos do ClusterControl como backups, failover automático, alertas, monitoramento e muito mais.

Escala horizontal

Para dimensionamento horizontal, se você for para ações de cluster e selecionar “Adicionar escravo de replicação”, poderá criar uma nova réplica do zero ou adicionar um banco de dados PostgreSQL existente como uma réplica.

Vamos ver como adicionar um novo slave de replicação pode ser uma tarefa muito fácil.

Como você pode ver na imagem, você só precisa escolher seu Master servidor, digite o endereço IP do seu novo servidor escravo e a porta do banco de dados. Em seguida, você pode escolher se deseja que o ClusterControl instale o software para você e se o escravo de replicação deve ser síncrono ou assíncrono.

Dessa forma, você pode adicionar quantas réplicas quiser e distribuir o tráfego de leitura entre elas usando um balanceador de carga, que também pode ser implementado com o ClusterControl.

Agora, se você for para ações de cluster e selecionar “Adicionar balanceador de carga”, poderá implantar um novo balanceador de carga HAProxy ou adicionar um existente.

E então, na mesma seção do balanceador de carga, você pode adicionar um Keepalived serviço que será executado nos nós do balanceador de carga para melhorar seu ambiente de alta disponibilidade.

Depois de adicionar um balanceador de carga ou usar um IP virtual com o serviço Keepalived em place, você deve atualizar sua configuração do Moodle para usar o novo endpoint do banco de dados. Para isso, vá ao diretório raiz do seu Moodle e modifique o arquivo config.php com o novo endereço IP:

$CFG->dbhost    = 'IP_ADDRESS';

$CFG->dbname    = 'moodle';

$CFG->dbuser    = 'mdluser';

$CFG->dbpass    = '********';

$CFG->prefix    = 'mdl_';

$CFG->dboptions = array (

  'dbpersist' => 0,

  'dbport' => PORT,

  'dbsocket' => '',

);

Certifique-se de poder acessar seu banco de dados por meio do Load Balancer ou endereço IP virtual, ou se precisar atualizar seu arquivo pg_hba.conf PostgreSQL para permitir isso.

Escala Vertical

Para dimensionamento vertical, com o ClusterControl você pode monitorar os nós do banco de dados tanto do lado do sistema operacional quanto do banco de dados. Você pode verificar algumas métricas como uso de CPU, memória, conexões, principais consultas, consultas em execução e muito mais. Você também pode habilitar a seção Dashboard, que permite ver as métricas de forma mais detalhada e amigável.

No ClusterControl, você também pode executar diferentes tarefas de gerenciamento, como Reboot Host, Rebuild Replication Slave, ou Promover Slave, com um clique.

Conclusão

Escalar seu banco de dados Moodle PostgreSQL pode ser uma tarefa difícil, pois você precisará saber como dimensionar e como fazê-lo sem afetar os sistemas. Ter um bom sistema de monitoramento é o primeiro passo para saber quando e como você precisa dimensionar seu banco de dados Moodle. Adicionar um Load Balancer ajudará você a evitar tempo de inatividade desnecessário e também melhorará a alta disponibilidade em seu ambiente LMS.

Todas essas coisas que mencionamos podem ser feitas usando o ClusterControl, o que facilitará o trabalho. O ClusterControl fornece uma ampla gama de recursos, como monitoramento, alerta, failover automático, backup, recuperação pontual, verificação de backup, dimensionamento e muito mais.