bcache em md ou md em bcache

11

O bcache permite que uma ou mais unidades de disco rápidas, como unidades de estado sólido (SSDs) baseadas em flash, atuem como um cache para uma ou mais unidades de disco rígido mais lentas .

Se eu entendi corretamente,

  • um SSD * pode ser atribuído para armazenar em cache vários HDDs de backup e, em seguida, os dispositivos em cache resultantes podem ser RAID com mdadm
    ou
  • vários HDDs podem ser RAIDed em um único dispositivo de backup md e o SSD atribuído ao cache que

Eu estou querendo saber qual é a abordagem mais saudável. Ocorre-me que o cultivo de um RAID5 / 6 pode ser mais simples com uma ou outra técnica, mas não sei qual!

Existem boas razões (por exemplo, aumentar o armazenamento de backup ou qualquer outra coisa) para escolher uma abordagem em relação à outra (para um grande sistema de arquivos não raiz que contém arquivos de backup da VM)?


* por "um SSD", quero dizer algum tipo de dispositivo SSD redundante, por exemplo, um RAID1 de dois SSDs físicos


fonte
Em qualquer um dos casos, todos os discos que bcachesuportam terão que ser formatados bcache- portanto, você precisará criar uma mdmatriz, formatar o único disco resultante inteiramente como uma bcachepartição de backup, vinculá-lo à sua unidade de cache e partir daí, ou formatar vários com bcache, vincule-os à unidade de cache e formate os vários discos como uma matriz. Em ambos os casos, existem vários pontos de possível falha, todos os quais dependem da interoperabilidade entre dois sistemas de arquivos - sem mencionar o fs final. veja aqui : role para baixo .
mikeserv
Graças ao github.com/g2p/blocks , você pode convertê-lo no local, embora haja algumas limitações.
Adam Ryczkowski 26/06
@ MikeServ Eu entendo tudo isso, isso é para um servidor criado para fins, por isso é tudo de bom. O que você quer dizer com "dois sistemas de arquivos"? O bcache não é um sistema de arquivos - o único sistema de arquivos que eu terei será o XFS no dispositivo bcache ou mdadm final (dependendo da opção que eu escolher).
Obrigado @Adam, a conversão no local não é problema para mim.
@mikeserv não, não é. Os sistemas de arquivos (por exemplo, btrfs, xfs, extN etc.) ficam em cima de dispositivos de bloco. mdadm e bcache funcionam no nível do dispositivo de bloco e não no sistema de arquivos (o btrfs confunde o problema com a violação de camadas, mas é uma conversa completamente separada).

Respostas:

4

Acho que o cache de todo o dispositivo md faz mais sentido.

Colocar o bcache em cache de todo o dispositivo md sacrifica toda a idéia de invasão, porque introduz outro ponto único de falha.

  • As falhas de OTH dos discos SSD são relativamente raras e o bcache pode ser colocado no modo writethrough/ writearound(em contraste com o writebackmodo), onde não há dados armazenados apenas no dispositivo de cache, e a falha do cache não mata as informações em o ataque faz com que seja uma opção relativamente segura.

  • Outro fato é que há uma sobrecarga computacional significativa do soft RAID-5; ao armazenar em cache cada membro da raid giratória separadamente, o computador ainda precisa recalcular todas as paridades, mesmo em ocorrências de cache

  • Obviamente, você sacrificaria algum espaço ssd caro, se armazenasse em cache cada unidade giratória separadamente. - A menos que você planeje usar o cache ssd invadido.

  • Ambas as opções não afetam o tempo do processo de crescimento - embora a opção com unidades rotativas sendo armazenadas em cache separadamente tenha potencial para ser mais lenta devido ao maior tráfego de ônibus.

É um processo rápido e relativamente simples de configurar o bcache para remover a unidade ssd, quando você precisar substituí-la. Graças aos blocos , deve ser possível migrar a configuração do raid nos dois sentidos no local.

Você também deve lembrar, que no momento a maioria (todos?) Distribuições Live CD não suportambcache , então você não pode simplesmente acessar seus dados com tais ferramentas, independentemente da bcache- mdraidopção de layout que você escolheu.

Adam Ryczkowski
fonte
1
Atualizei a pergunta para deixar claro que não estou planejando ter um cache SSD não redundante. Seu segundo ponto é um ponto excelente, obrigado por isso. Você é o terceiro marcador sobre o espaço: você quer dizer porque estaria armazenando a paridade no SSD? re seu último parágrafo, estou usando o F20, mas eventualmente utilizarei o RHEL / CentOS7 ou o Debian Jessie (se o bcache-tools fizer o corte).
@JackDouglas Ad 3rd bullet: Sim, exatamente isso. Mas como você planeja usar unidades ssd invadidas, isso não se aplica a você.
Adam Ryczkowski 26/06
1
Isso acontece porque eles não apenas serão espelhados, mas também precisarão armazenar a paridade RAID para as unidades de backup. Este não é o caso se o RAID é feito sob Bcache que eu pensei que era o seu ponto
Eu acredito que você quer dizer o contrário: a matriz ssd não precisa armazenar a paridade dos discos giratórios, se for alimentada por toda a unidade mdraid.
Adam Ryczkowski 26/06
1
sim, é exatamente isso que eu quero dizer!
1

Eu acho que a abordagem sensata é armazenar em cache o dispositivo MD resultante.

O bcache foi projetado para passar por leituras e gravações sequenciais.

Se você agrupar cada dispositivo separadamente, logicamente, vários dispositivos inseridos em um MD invadido ou eliminado, da perspectiva do bcache, estarão constantemente escrevendo blocos aleatórios.

Enquanto um volume MD armazenado em cache parecerá normal, gravando arquivos no volume, e não em blocos aleatórios em vários dispositivos.

O ponto principal da invasão de hardware e software é fazer a distribuição de dados no back-end para que o sistema de arquivos resultante pareça um volume normal.

Isso pode não estar correto (como os desenvolvedores do bcache podem ser inteligentes e levar em conta esse tipo de situação), mas a melhor coisa lógica a fazer é armazenar em cache volumes, em vez de bloquear dispositivos.

esclarecer
fonte
Também é um ponto muito bom
Uma gravação sequencial grande em um RAID5 / 6 produz gravações sequenciais em todos os dispositivos componentes. Cada dispositivo componente obtém todos os blocos de dados N-1 (ou paridade), mas os dados obtidos são seqüenciais. Mas você está certo de que isso distorcerá as coisas. Se houver alguns pedaços que veem gravações freqüentes de faixas parciais, resultando em uma leitura-modificação-gravação da (parte da) faixa de paridade, isso pode ser armazenado em cache pelo bcache. Armazenar em cache mais alto, antes que a gravação em faixas parciais atinja o dispositivo MD, seria ainda melhor.
Peter Cordes