Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.4.3. Criando Volumes Espelhados

Nota

Criando um volume lógico espelhado LVM em um cluster requer os mesmos comandos e procedimentos quando criando um volume lógico espelhado LVM em um nó único. Entretanto, para criar um volume espelhado em um cluster, o cluster e o espelho de cluster devem estar em atividade, o cluster deve estar quórum e o tipo de bloqueio no arquivo lvm.conf deve estar configurado corretamente para permitir bloqueio de cluster. Para um exemplo de criação de um volume espelhado em um cluster, veja a Seção 5.5, “Criando um Volume Lógico LVM Espelhado em um Cluster”.
Tentar executar a criação de múltiplos espelhos LVM e executar comandos de conversão em uma rápida sucessão de múltiplos nodos em um cluster poderá causar uma lista de pendências destes comandos. Isto poderá causar em algumas das operações requisitadas expirar o tempo limite e subsequentemente falhar. Para evitar este problema, é recomendado que os comandos de criação do espelho de cluster sejam executados a partir de um nó do cluster.
Quando você cria um volume espelhado, você especifica o número de cópias de dados a serem feitas com o argumento -m do commando lvcreate. Especificando -m1 se cria um espelho, que produz duas cópias do sistema de arquivos: um volume lógico linear mais uma cópia. Similarmente, especificando -m2 se cria dois espelhos, produzindo três cópias do sistema de arquivos.
O seguinte comando cria um volume lógico espelhado com um único espelho. O volume é de 50 gigabytes em tamanho, é chamado mirrorlv e é feito do grupo de volume vg0:
lvcreate -L 50G -m1 -n mirrorlv vg0
Um espelho LVM divide o dispositivo sendo copiado em regiões que, por padrão, são 512KB em tamanho. Você pode usar o argumento -R do comando lvcreate para especificar o tamanho da região em MB. Você pode também alterar o tamanho padrão da região editando a configuração mirror_region_size no arquivo lvm.conf.

Nota

Devido às limitações na infra estrutura do cluster, espelhos de cluster maiores que 1.5TB não podem ser criados com a região padrão de tamanho 512KB. Usuários que requerem espelhos maiores devem aumentar o tamanho da região a partir da padrão para algo maior. Falha no aumento de tamanho da região causará travamento na criação do LVM e pode travar outros comando do LVM também.
Como um guia geral para especificar o tamanho da região de espelhos que são maiores que 1.5TB, you pode pegar o tamanho de seu espelho em terabytes e arredondar para cima esse número para a próxima potência de 2, usando esse número como o argumento -R do comando lvcreate. Por exemplo, se o tamanho de seu espelho é 1.5TB, você pode especificar -R 2. Se o tamanho de seu espelho é 3TB, você pode especificar -R 4. Para um espelho de tamanho 5TB, você pode especificar -R 8.
O seguinte comando cria um volume lógico espelhado com uma região de tamanho de 2MB:
lvcreate -m1 -L 2T -R 2 -n mirror vol_group
O LVM mantém um pequeno log que é usado para manter controle de quais regiões estão sincronizadas com o espelho ou espelhos. Por padrão, este log é mantido no disco, mantendo-o persistente entre as reinicializações e garante que o espelho não tenha de ser re-sincronizado toda vez que a máquina reinicializar ou travar. Você pode especificar no entanto que este log será mantido na memória com o argumento --mirrorlog core; isto elimina a necessidade de um dispositivo de log extra, mas requer que o espelho inteiro seja re-sicronizado em toda reinicialização.
O comando seguinte cria um volume lógico espelhado a partir do grupo de volume bigvg. O volume lógico é nomeado ondiskmirvol e tem um espelho único. O volume é 12MB em tamanho e mantém o log do espelho na memória.
# lvcreate -L 12MB -m1 --mirrorlog core -n ondiskmirvol bigvg
  Logical volume "ondiskmirvol" created
O log do espelho é criado em um dispositivo separado dos dispositivos nas quais qualquer perna do espelho é criada. É possível no entanto criar um log do espelho no mesmo dispositivo quanto em uma das pernas do espelho usando o argumento --alloc anywhere do comando vgcreate. Isto pode degradar a performance, mas permite que você crie um espelho mesmo se tiver somente dois dispositivos subjacentes.
O comando a seguir cria um volume lógico espelhado com um espelho único para qual o log do espelho está no mesmo dispositivo das pernas do espelho. Neste exemplo, o grupo de volume vg0 consiste em apenas dois dispositivos. Este comando cria um volume de 500 megabytes chamado mirrorlv no grupo de volume vg0.
lvcreate -L 500M -m1 -n mirrorlv -alloc anywhere vg0

Nota

Com espelhos clusterizados, o gerenciador do log de espelho é completamente responsável pelo nodo do cluster com o menor
Para criar um log de espelho que é auto espelhado, você pode especificar o argumento --mirrorlog mirrored. O seguinte comando cria um volume lógico espelhado a partir do grupo de volume bigvg. O volume lógico é chamado twologvol e tem um espelho único. O volume tem 12MB em tamanho e o log é espelhado, com cada log mantido num dispositivo separado.
# lvcreate -L 12MB -m1 --mirrorlog mirrored -n twologvol bigvg
  Logical volume "twologvol" created
Assim como ocorre com um log de espelho padrão, é possível criar logs de espelhos redundantes no mesmo dispositivo quanto nas pernas do espelho usando o argumento --alloc anywheredo comando vgcreate. Isso pode degradar o desempenho, mas permite que você crie um log de espelho mesmo se você não tiver dispositivos subjacentes para cada log a serem mantidos em dispositivos separados do que pernas de espelhos.
Quando um espelho é criado, as regiões do espelho são sincronizadas. Para maiores dispositivos de espelho, o processo de sincronia pode levar um longo tempo. Quando você estiver criando um novo espelho que não precisa ser recuperado, você pode especificar o argumento nosync para inidicar que uma sincronização inicial a partir do primeiro dispositivo não é necessária.
Você pode especificar quais dispositivos usar para as pernas do espelho e log e quais extensões destes dispositivos usar. Para forçar o log num determinado disco, especifique exatamente uma extensão no disco no qual este será instalada. O LVM não respeita necessariamente a ordem no qual os dispositivos estão listados na linha de comando. Se quaisquer volumes físicos estão listados como o único espaço no qual a alocação será realizada. Qualquer extensão física incluída na lista que já está alocada, será ignorada.
O seguinte comando cria um volume lógico espelhado com espelho único e um log único não espelhado. O volume é 500 megabytes em tamanho, chamado mirrorlv e é feito do grupo de volume vg0. A primeira perna do espelho está no dispositivo /dev/sda1, a segunda perna do espelho está no dispositivo /dev/sdb1 e o log de espelho está no /dev/sdc1.
lvcreate -L 500M -m1 -n mirrorlv vg0 /dev/sda1 /dev/sdb1 /dev/sdc1
O seguinte comando cria um volume lógico espelhado com um espelho simples. O volume tem 500 megabytes em tamanho e é chamado mirrorlv e é feito do grupo de volume vg0. A primeira perna do volume tem extensão de 0 a 499 do dispositivo /dev/sda1, a segunda perna do espelho tem extensão 0 a 499 do dispositivo /dev/sdb1 e o log do espelho inicia na extensão 0 do dispositivo /dev/sdc1. Estes possuem extensão de 1MB. Se qualquer das extensões já foram alocadas, elas serão ignoradas.
lvcreate -L 500M -m1 -n mirrorlv vg0 /dev/sda1:0-499 /dev/sdb1:0-499 /dev/sdc1:0

Nota

A partir do lançamento do Red Hat Enterprise Linux 6.1, você pode combinar RAID0(distribuição) e RAID1 (espelhamento) em um volume lógico único. Criando um volume lógico enquanto simultaneamente especifica o número de espelhos (--mirrors X) e o número de distribuições (--stripes Y) resulta em um dispositivo de espelho dos quais dispositivos constituintes são distribuídos.

4.4.3.1. Política de Falha do Volume Lógico Espelhado

Você pode definir como um volume lógico espelhado se comporta em um evento de falha de dispositivo com os parâmetros mirror_image_fault_policy e mirror_log_fault_policy na seção activation do arquivo lvm.conf. Quando estes parâmetros estão configurados em remove, o sistema tenta remover o dispositivo com defeito e rodar sem ele. Quando este parâmetro está configurado como allocate, o sistema tenta remover o dispositivo com defeito e tenta alocar espaço em um dispositivo novo para ser um substituto do dispositivo defeituoso; esta política é como a política remove se não houver nenhum dispositivo ou espaćo adequados para a substituição.
Por padrão, o parâmetro mirror_log_fault_policy é configurado para allocate. Usar esta política para o log é rápida e mantém a habilidade de lembrar o estado sync durante travamentos e reinicializações. Se você configurar esta política para remove, quando um log de dispositivo falhar, o espelho converte para o uso de um log de memória e o espelho não lembrará seu estado de sincronia entre travamentos e reinicializações e o espelho inteiro será re-sincronizado.
Por padrão, o parâmetro mirror_image_fault_policy é configurado para remove. Com esta política, se uma imagem de espelho falha o espelho converterá para um dispositivo não espelhado se houver somente uma boa cópia remanescente. Configurando esta política para allocate para um dispositivo de espelho requer que o espelho resincronize os dispositivos; isto é um processo lento, mas preserva as características de espelho do dispositivo.

Nota

Quando um espelho LVM sofrer uma falha de dispositivo, uma recuperação de dois estágios toma lugar. O primeiro estágio envolve remover os dispositivos com falha. Isto pode resultar em um espelho sendo reduzido a um dispositivo linear. O segundo estágio, se o parâmetro mirror_log_fault_policy estiver configurado para allocate, é para tentar substituir quaisquer dos dispositivos com falha. Nota, entretanto, não há garantia que o segundo estágio escolherá dispositivos anteriormente em uso pelo espelho que não foi parte da falha se outros estiverem disponíveis.
Para informações sobre recuperar manualmente de uma falha de espelho LVM, consulte a Seção 6.3, “Recuperação de Falha do Espelho LVM.”.