RHCS: GFS2 no cluster A / A com armazenamento comum. Configurando o GFS com o rgmanager

5

Estou configurando um cluster A / A de dois nós com um armazenamento comum conectado via iSCSI, que usa o GFS2 em cima do LVM em cluster. Até agora eu preparei uma configuração simples, mas não tenho certeza qual é o caminho certo para configurar o recurso gfs.

Aqui está a seção rm do /etc/cluster/cluster.conf:

<rm>
    <failoverdomains>
        <failoverdomain name="node1" nofailback="0" ordered="0" restricted="1">
            <failoverdomainnode name="rhc-n1"/>
        </failoverdomain>
        <failoverdomain name="node2" nofailback="0" ordered="0" restricted="1">
            <failoverdomainnode name="rhc-n2"/>
        </failoverdomain>
    </failoverdomains>
    <resources>
        <script file="/etc/init.d/clvm" name="clvmd"/>
        <clusterfs name="gfs" fstype="gfs2" mountpoint="/mnt/gfs"  device="/dev/vg-cs/lv-gfs"/>
    </resources>
    <service name="shared-storage-inst1" autostart="0" domain="node1" exclusive="0" recovery="restart">
        <script ref="clvmd">
            <clusterfs ref="gfs"/>
        </script>
    </service>
    <service name="shared-storage-inst2" autostart="0" domain="node2" exclusive="0" recovery="restart">
        <script ref="clvmd">
            <clusterfs ref="gfs"/>
        </script>
    </service>
</rm>

Isso é o que quero dizer: ao usar o agente de recurso clusterfs para manipular a partição GFS, ele não é desmontado por padrão (a menos que a opção force_unmount seja fornecida). Desta forma, quando eu emitir

clusvcadm -s shared-storage-inst1

O comando clvm é interrompido, mas o GFS não é desmontado, portanto, um nó não pode mais alterar a estrutura do LVM no armazenamento compartilhado, mas ainda pode acessar os dados. E mesmo que um nó possa fazê-lo com segurança (o dlm ainda está em execução), isso parece ser bastante inapropriado para mim, pois clustat relata que o serviço em um determinado nó está parado. Além disso, se mais tarde eu tentar parar o cman nesse nó, ele encontrará um bloqueio dlm, produzido pelo GFS, e não conseguirá parar.

Eu poderia simplesmente ter adicionado force_unmount="1", mas gostaria de saber qual é a razão por trás do comportamento padrão. Por que não é desmontado? A maioria dos exemplos lá fora usa silenciosamente force_unmount="0", outros não, mas nenhum deles dá pistas sobre como a decisão foi tomada.

Além disso, encontrei configurações de amostra, onde as pessoas gerenciam as partições GFS com o script de inicialização gfs2 - link

ou até mesmo simplesmente como ativar serviços como clvm e gfs2 para iniciar automaticamente na inicialização ( link ), como:

chkconfig gfs2 on

Se eu entendi a abordagem mais recente corretamente, esse cluster controla apenas se os nós ainda estão vivos e pode contornar os errantes, mas esse cluster não tem controle sobre o status de seus recursos.

Tenho alguma experiência com o Pacemaker e estou acostumado a que todos os recursos são controlados por um cluster e uma ação pode ser tomada quando não há apenas problemas de conectividade, mas qualquer um dos recursos se comporta mal.

Então, qual é o caminho certo para eu ir:

  1. deixa a partição GFS montada (alguma razão para isso?)
  2. set force_unmount="1". Isso não vai quebrar nada? Por que isso não é o padrão?
  3. use o recurso de script <script file="/etc/init.d/gfs2" name="gfs"/> para gerenciar a partição GFS.
  4. inicie na inicialização e não inclua no cluster.conf (alguma razão para isso?)

Isso pode ser um tipo de pergunta que não pode ser respondida sem ambigüidade, então seria muito proveitoso para mim se você compartilhasse sua experiência ou expressasse sua opinião sobre o assunto. Como por exemplo o /etc/cluster/cluster.conf se parece ao configurar gfs com Conga ou ccs (eles não estão disponíveis para mim já que, por enquanto, eu tenho que usar o Ubuntu para o cluster)?

Muito obrigado!

    
por Pavel A 11.12.2012 / 16:10

1 resposta

1

Eu trabalhei um pouco com clusters. Estas são as minhas opiniões sobre o assunto.

could have simply added force_unmount="1",  but I would like to know what is
the reason behind the default behavior. Why is it not unmounted? 

Se você optar por configurar gfs como um recurso clusterizado e adicionar o disco clvmd e gfs como recursos, quando o failover com rgmanager it for tentar desmontar o disco , então o que eu faria no seu caso primeiro é verificar logs (ou lsof / fuser etc) para uma indicação porque o umount pode ter falhado. Provavelmente existe um processo com um arquivo aberto ou algo parecido, evitando um umount "limpo".

Pode ser porque você não usa o rgmanager para iniciar seu aplicativo em cluster? Eu não vejo isso no seu cluster.conf. Isso seria verdade se explicasse o comportamento.

Se você escolher force_unmount , o que o rgmanager fará quando falhar / recuperar forçar a anulação de qualquer recurso usando o disco antes de desmontar o disco. O tempo que é uma boa ideia ou não depende.

clvm is stopped, but GFS is not unmounted, so a node cannot alter LVM structure 
on shared storage anymore, but can still access data. And even though a node can 
do it quite safely (dlm is still running), [...]  
Moreover if I later try to stop cman on that node, it will find a dlm locking,
produced by GFS, and fail to stop.

Se você quiser alterar a estrutura do LVM neste cenário, você pode iniciar o daemon clvmd novamente manualmente. se você desmontar o disco gfs antes de parar o cman, isso deve funcionar. Por outro lado, em um cenário de produção, raramente me encontro em uma situação em que gostaria de interromper o CMAN em um nó em cluster.

Minha preferência é seguir a opção 4.

If I understand the latest approach correctly, such cluster only controls 
whether nodes are still alive and can fence errant ones, but such cluster
has no control over the status of its resources.

É verdade que, se você não adicionar o recurso gfs2 e clvmd como um recurso de cluster, rgmanager não poderá controlá-lo. O que eu costumo fazer quando estiver configurando clusters A / A (dependendo do caso, é claro) é que eu adicionaria o script de início para o meu serviço como o recurso em cluster . (O rgmanager chamará o script com o argumento status regularmente para determinar o tempo necessário para a ação configurada). Como meu script tem uma dependência no sistema de arquivos gfs, ele falhará, a menos que esteja montado.

A abordagem 4 implica na atribuição manual de clvmd , cman e gfs2 (e possivelmente outros daemons também dependendo da situação).

Como o sistema de arquivos GFS fica na parte superior de um dispositivo iSCSI, adicionar a opção _netdev à montagem em /etc/fstab é um requisito para que funcione.

  • Dessa forma, não obtenho uma configuração de cluster muito complicada, adicionar mais serviços mais tarde será menos uma dor de cabeça (por exemplo, dois serviços usando o mesmo disco ou o que nunca)
  • quando algo acontece, minha experiência é que a intervenção manual é muito mais fácil com recursos não gerenciados por rgmanager
  • na minha experiência, não são os serviços gfs2 ou clvmd que mais correm mal em um cluster, mas os serviços no topo, portanto, reiniciando / montando-os frequentemente só levarão seu tempo extra.

Há algumas desvantagens em que posso pensar também:

  • Como você disse, o rgmanager não irá gerenciar esses recursos e não tomará nenhuma ação se, por exemplo, o sistema de arquivos gfs falhar de alguma forma / obter umount
  • ter um sistema de arquivos gfs muito montado pode gerar carga desnecessária no dispositivo, por exemplo updatedb e outros trabalhos que podem querer atravessar o sistema de arquivos, causando assim a latência do disco (bloqueando o tráfego)

Não importa o que você decida

Eu adicionaria o script de inicialização como um recurso em cluster, e se você escolhesse adicionar gfs e clvm ao cluster como recursos, eu consideraria adicionar o independent_subtree , portanto, se ele falhar, o rgmanager não será re-montado o sistema de arquivos gfs. Isso depende, naturalmente, da sua situação particular. Observe a configuração aninhada no link, marcando uma espécie de árvore de dependência.

    
por 09.06.2013 / 19:34