Um número considerável de aplicativos corporativos e sistemas de virtualização possui seus próprios mecanismos para criar soluções tolerantes a falhas. Em particular, o Oracle RAC (Oracle Real Application Cluster) é um cluster de dois ou mais servidores de banco de dados Oracle trabalhando juntos para equilibrar a carga e fornecer tolerância a falhas no nível do servidor / aplicativo. Para trabalhar neste modo, é necessário um armazenamento comum, cuja função é geralmente armazenamento.
Como já discutimos em um de nossos artigos , o sistema de armazenamento, apesar da presença de componentes duplicados (incluindo controladores), ainda possui pontos de falha - principalmente na forma de um único conjunto de dados. Portanto, para criar uma solução Oracle com maiores requisitos de confiabilidade, o esquema "N servidores - um armazenamento" deve ser complicado.
Primeiro, é claro, você precisa decidir contra quais riscos estamos tentando garantir. Neste artigo, não consideraremos a proteção contra ameaças como a chegada de um meteorito. Portanto, a criação de uma solução de recuperação de desastre geograficamente dispersa continuará sendo um tópico para um dos seguintes artigos. Aqui, examinamos a chamada solução de recuperação de desastre entre rack, quando a proteção é criada no nível dos gabinetes de servidor. Os próprios armários podem estar localizados na mesma sala ou em diferentes, mas geralmente dentro do mesmo prédio.
Esses gabinetes devem conter todo o conjunto de equipamentos e software necessários para garantir a operação dos bancos de dados Oracle, independentemente do estado do “vizinho”. Em outras palavras, usando a solução de recuperação de desastre Cross-Rack, eliminamos os riscos de falha:
- Servidores de Aplicativos Oracle
- Sistemas de armazenamento
- Sistemas de comutação
- Falha completa de todos os equipamentos no gabinete:
- Falha de energia
- Falha no sistema de refrigeração
- Fatores externos (homem, natureza, etc.)
A duplicação de servidores Oracle implica o próprio princípio do Oracle RAC e é implementada através do aplicativo. A duplicação de ferramentas de comutação também não é um problema. Mas a duplicação do sistema de armazenamento não é tão simples.
A opção mais fácil é replicar dados do armazenamento primário para o backup. Síncrono ou assíncrono, dependendo dos recursos de armazenamento. A replicação assíncrona levanta imediatamente a questão de garantir a consistência dos dados com o Oracle. Porém, mesmo se houver integração de software com o aplicativo, em qualquer caso, em caso de acidente no sistema de armazenamento principal, será necessária uma intervenção manual dos administradores para alternar o cluster para o armazenamento de backup.
Uma opção mais complexa são os “virtualizadores” de software e / ou hardware de sistemas de armazenamento, que eliminam problemas com consistência e intervenção manual. Mas a complexidade da implantação e administração subsequente, bem como o custo muito indecente de tais soluções, assusta muitos.
Apenas para cenários como recuperação de desastre entre bastidores, o array All Flash AccelStor NeoSapphire ™ H710 usando a arquitetura Shared-Nothing é perfeito . Este modelo é um sistema de armazenamento duplo usando sua própria tecnologia FlexiRemap® para trabalhar com pen drives. Graças ao FlexiRemap® NeoSapphire ™ H710, ele pode fornecer até 600K de gravação aleatória IOPS @ 4K e 1M + IOPS @ 4K de leitura aleatória, o que é inatingível com o armazenamento clássico baseado em RAID.
Mas a principal característica do NeoSapphire ™ H710 é a execução de dois nós como gabinetes separados, cada um com sua própria cópia dos dados. A sincronização do nó é realizada através da interface externa do InfiniBand. Graças a essa arquitetura, os nós podem se espalhar por diferentes locais, por distâncias de até 100m, fornecendo a solução de recuperação de desastre Cross-Rack. Ambos os nós funcionam completamente no modo síncrono. Do lado do host, o H710 parece um armazenamento comum de controlador duplo. Portanto, nenhuma opção adicional de software e hardware e configurações particularmente complexas precisam ser executadas.
Se você comparar todas as soluções de recuperação de desastre Cross-Rack descritas acima, a versão AccelStor se destacará das demais:
| Arquitetura compartilhada do AccelStor NeoSapphire ™ Nothing | Virtualizador de armazenamento de software ou hardware | Solução de replicação |
---|
Disponibilidade |
Falha no servidor | Sem tempo de inatividade | Sem tempo de inatividade | Sem tempo de inatividade |
Falha no interruptor | Sem tempo de inatividade | Sem tempo de inatividade | Sem tempo de inatividade |
Falha no armazenamento | Sem tempo de inatividade | Sem tempo de inatividade | Tempo de inatividade |
Falha de todo o gabinete | Sem tempo de inatividade | Sem tempo de inatividade | Tempo de inatividade |
Custo e complexidade |
Custo da solução | Baixo * | Alta | Alta |
Dificuldade de implantação | Baixo | Alta | Alta |
* O AccelStor NeoSapphire ™ ainda é um array All Flash, que por definição não custa “3 copeques”, especialmente porque possui uma reserva de capacidade dupla. No entanto, comparando o custo total da solução com base em soluções similares de outros fornecedores, o custo pode ser considerado baixo.
A topologia para conectar servidores de aplicativos e todos os nós da matriz Flash terá a seguinte aparência:
Ao planejar a topologia, também é altamente recomendável que você duplique os comutadores de gerenciamento e as interconexões do servidor.
A seguir, falaremos sobre a conexão via Fibre Channel. No caso de usar o iSCSI, tudo será o mesmo, ajustado para os tipos de comutadores usados e configurações de matriz ligeiramente diferentes.
Trabalho preparatório na matriz
Hardware e software usadosEspecificações de servidor e switch
Componentes | Descrição do produto |
---|
Servidores Oracle Database 11g | Dois |
Sistema operacional do servidor | Oracle Linux |
Versão do banco de dados Oracle | 11g (RAC) |
Processadores por servidor | Dois CPU Intel® Xeon® de 16 núcleos E5-2667 v2 a 3.30GHz |
Memória física por servidor | 128GB |
Rede FC | FC de 16 Gb / s com caminhos múltiplos |
FC HBA | Emulex Lpe-16002B |
Portas públicas de 1 GbE dedicadas para gerenciamento de cluster | Adaptador ethernet Intel rj45 |
Chave FC de 16 Gb / s | Brocade 6505 |
Portas privadas de 10GbE dedicadas para sincronização de dados | Intel X520 |
Especificação do AccelStor NeoSapphhire ™ All Flash Array
Componentes | Descrição do produto |
---|
Sistema de armazenamento | Modelo de alta disponibilidade NeoSapphire ™: H710 |
Versão da imagem | 4.0.1 |
Número total de unidades | 48. |
Tamanho da unidade | 1,92TB |
Tipo de unidade | SSD |
Portas de destino FC | Portas 16x 16Gb (8 por nó) |
Portas de gerenciamento | O cabo Ethernet de 1 GbE se conecta aos hosts através de um comutador Ethernet |
Porta de pulsação | O cabo Ethernet 1GbE que conecta entre dois nós de armazenamento |
Porta de sincronização de dados | Cabo InfiniBand de 56Gb / s |
Antes de começar a usar uma matriz, você deve inicializá-la. Por padrão, o endereço de controle dos dois nós é o mesmo (192.168.1.1). Você precisa se conectar a eles um de cada vez, definir novos endereços de gerenciamento (já diferentes) e configurar a sincronização de horário, após o qual as portas de gerenciamento podem ser conectadas a uma única rede. Depois disso, os nós são combinados em um par de HA atribuindo sub-redes às conexões de Interlink.
Após a conclusão da inicialização, você pode controlar a matriz a partir de qualquer nó.
Em seguida, crie os volumes necessários e publique-os para servidores de aplicativos.
É altamente recomendável que você crie vários volumes para o Oracle ASM, pois isso aumentará o número de destinos para os servidores, o que acabará por melhorar o desempenho geral (mais sobre filas em outro artigo ).
Configuração de testeNome do volume de armazenamento | Tamanho do volume |
---|
Data01 | 200GB |
Data02 | 200GB |
Data03 | 200GB |
Data04 | 200GB |
Data05 | 200GB |
Data06 | 200GB |
Data07 | 200GB |
Data08 | 200GB |
Data09 | 200GB |
Dados10 | 200GB |
Grid01 | 1GB |
Grid02 | 1GB |
Grade03 | 1GB |
Grade04 | 1GB |
Grade05 | 1GB |
Grid06 | 1GB |
Redo01 | 100GB |
Redo02 | 100GB |
Redo03 | 100GB |
Redo04 | 100GB |
Redo05 | 100GB |
Redo06 | 100GB |
Redo07 | 100GB |
Redo08 | 100GB |
Redo09 | 100GB |
Redo10 | 100GB |
Algumas explicações sobre os modos de operação do array e os processos que ocorrem em situações de emergência
Cada conjunto de dados do nó possui um parâmetro "número da versão". Após a inicialização, é igual e igual a 1. Se, por algum motivo, o número da versão for diferente, sempre haverá sincronização dos dados da versão mais antiga para a mais recente, após o qual o número será alinhado para a versão mais nova, ou seja, isso significa que as cópias são idênticas. Razões pelas quais as versões podem variar:
- Reinicialização agendada de um dos nós
- Um acidente em um dos nós devido a um desligamento repentino (energia, superaquecimento, etc.).
- Conexão quebrada do InfiniBand com incapacidade de sincronizar
- Falha em um dos nós devido à corrupção de dados. Isso já exigirá a criação de um novo grupo de alta disponibilidade e a sincronização completa do conjunto de dados.
De qualquer forma, o nó que permanece on-line aumenta seu número de versão em um, para que, após reconectar-se ao par, sincronize seu conjunto de dados.
Se a conexão for perdida através do link Ethernet, o Heartbeat alternará temporariamente para o InfiniBand e retornará dentro de 10 segundos quando for restaurado.
Configuração do host
Para garantir a tolerância a falhas e aumentar o desempenho, você deve habilitar o suporte MPIO para a matriz. Para fazer isso, adicione linhas ao arquivo /etc/multipath.conf e recarregue o serviço de caminhos múltiplos
Texto ocultodispositivos {
dispositivo {
fornecedor "AStor"
path_grouping_policy "group_by_prio"
path_selector "comprimento da fila 0"
path_checker "tur"
apresenta "0"
hardware_handler "0"
prio "const"
failback imediato
fast_io_fail_tmo 5
dev_loss_tmo 60
user_friendly_names yes
detect_prio sim
rr_min_io_rq 1
no_path_retry 0
}
}
Além disso, para que o ASM funcione com o MPIO através do ASMLib, você precisa modificar o arquivo / etc / sysconfig / oracleasm e, em seguida, executar os escândiscos /etc/init.d/oracleasm
Texto oculto# ORACLEASM_SCANORDER: Correspondência de padrões para solicitar a verificação de disco
ORACLEASM_SCANORDER = "dm"
# ORACLEASM_SCANEXCLUDE: padrões correspondentes para excluir discos da verificação
ORACLEASM_SCANEXCLUDE = "sd"
Nota
Se você não quiser usar o ASMLib, poderá usar as regras UDEV, que são a base para o ASMLib.
A partir da versão 12.1.0.2 Oracle Database, a opção está disponível para instalação como parte do software ASMFD.
Certifique-se de que os discos criados para o Oracle ASM estejam alinhados com o tamanho do bloco com o qual a matriz está trabalhando fisicamente (4K). Caso contrário, poderão ocorrer problemas de desempenho. Portanto, você deve criar volumes com os parâmetros apropriados:
parted / dev / mapper / nome do dispositivo mklabel gpt mkpart primário 2048s verificação 100% alinhada ideal 1
Distribuição de bancos de dados em volumes criados para nossa configuração de teste
Nome do volume de armazenamento | Tamanho do volume | Mapeamento de LUNs de volume | Detalhe do dispositivo de volume ASM | Tamanho da unidade de alocação |
---|
Data01 | 200GB | Mapeie todos os volumes de armazenamento para o sistema de armazenamento todas as portas de dados | Redundância: normal Nome: DGDATA Objetivo: arquivos de dados
| 4MB |
Data02 | 200GB |
Data03 | 200GB |
Data04 | 200GB |
Data05 | 200GB |
Data06 | 200GB |
Data07 | 200GB |
Data08 | 200GB |
Data09 | 200GB |
Dados10 | 200GB |
Grid01 | 1GB | Redundância: normal Nome: DGGRID1 Objetivo: Grade: CRS e votação
| 4MB |
Grid02 | 1GB |
Grade03 | 1GB |
Grade04 | 1GB | Redundância: normal Nome: DGGRID2 Objetivo: Grade: CRS e votação
| 4MB |
Grade05 | 1GB |
Grid06 | 1GB |
Redo01 | 100GB | Redundância: normal Nome: DGREDO1 Objetivo: Refazer o log do encadeamento 1
| 4MB |
Redo02 | 100GB |
Redo03 | 100GB |
Redo04 | 100GB |
Redo05 | 100GB |
Redo06 | 100GB | Redundância: normal Nome: DGREDO2 Objetivo: Refazer o log do encadeamento 2
| 4MB |
Redo07 | 100GB |
Redo08 | 100GB |
Redo09 | 100GB |
Redo10 | 100GB |
Configurações do banco de dados- Tamanho do bloco = 8K
- Espaço de troca = 16 GB
- Desativar AMM (Gerenciamento automático de memória)
- Desativar páginas enormes transparentes
Outras configurações# vi /etc/sysctl.conf
✓ fs.aio-max-nr = 1048576
✓ fs.file-max = 6815744
✓ kernel.shmmax 103079215104
✓ kernel.shmall 31457280
✓ kernel.shmmn 4096
✓ kernel.sem = 250 32000 100 128
✓ net.ipv4.ip_local_port_range = 9000 65500
✓ net.core.rmem_default = 262144
✓ net.core.rmem_max = 4194304
✓ net.core.wmem_default = 262144
✓ net.core.wmem_max = 1048586
✓ vm.swappiness = 10
✓ vm.min_free_kbytes = 524288 # não defina isso se você estiver usando o Linux x86
✓ vm.vfs_cache_pressure = 200
✓ vm.nr_hugepages = 57000
# vi /etc/security/limits.conf
✓ grade nproc macio 2047
✓ grade rígida nproc 16384
✓ nofile macio da grade 1024
✓ nofile rígido da grade 65536
✓ pilha macia de grade 10240
✓ pilha de disco rígido 32768
✓ oracle soft nproc 2047
✓ oracle hard nproc 16384
✓ Oracle nofile macio 1024
✓ oracle hard nofile 65536
✓ pilha macia oracle 10240
✓ oracle hard stack 32768
✓ memlock suave 120795954
✓ bloqueio de memória 120795954
sqlplus “/ as sysdba”
alterar processos do conjunto do sistema = 2000 scope = spfile;
alterar o conjunto do sistema open_cursors = 2000 scope = spfile;
alterar o conjunto do sistema session_cached_cursors = 300 scope = spfile;
alterar conjunto de sistemas db_files = 8192 scope = spfile;
Teste de tolerância a falhas
Para fins de demonstração, o HammerDB foi usado para emular a carga OLTP. Configuração do HammerDB:
Número de armazéns | 256 |
Total de transações por usuário | 1000000000000 |
Usuários virtuais | 256 |
Como resultado, foi obtido o indicador de 2,1M TPM, que está longe do limite de desempenho do array H710 , mas é o "teto" para a atual configuração de hardware dos servidores (principalmente devido aos processadores) e seu número. O objetivo deste teste ainda é demonstrar a tolerância a falhas da solução como um todo e não atingir o desempenho máximo. Portanto, simplesmente construiremos esse valor.
Teste de falha de um dos nós
Os hosts perderam alguns dos caminhos para a loja, continuando a trabalhar pelos demais com o segundo nó. O desempenho caiu por alguns segundos devido à reestruturação dos caminhos e depois voltou ao normal. Nenhuma interrupção de serviço ocorreu.
Teste de falha do gabinete com todos os equipamentos
Nesse caso, o desempenho também caiu por alguns segundos devido à reestruturação dos caminhos e retornou à metade do valor do indicador original. O resultado foi dividido pela metade do original devido à exclusão da operação de um servidor de aplicativos. A interrupção do serviço também não aconteceu.
Se você precisar implementar uma solução de recuperação de desastre entre rack e tolerante a falhas para Oracle a um custo razoável e com pouco esforço de implantação / administração, trabalhar em conjunto com a arquitetura Oracle RAC e AccelStor Shared-Nothing seria uma das melhores opções. Em vez do Oracle RAC, pode haver qualquer outro software que forneça cluster, o mesmo DBMS ou sistemas de virtualização, por exemplo. O princípio de construir a solução permanecerá o mesmo. E a pontuação final é zero para RTO e RPO.