Estou pensando em configurar um cache squid (ou possivelmente verniz) em um sistema com unidades SSD.
O benefício óbvio é que esses sistemas têm ótimas velocidades de LEITURA e espero que minhas taxas de acerto sejam razoavelmente altas.
Vamos supor que eu possa colocar 7 SSDs em uma configuração RAID. (existem alguns casos que me permitem incluir muito mais)
Perguntas de implementação:
Devo usar o RAID0? (Espero que uma unidade falhe eventualmente, então isso parece perigoso.)
Devo usar o RAID10? (Isso reduz pela metade a área ocupada por meu disco, o que é caro.)
Devo usar o RAID5? (Sabe-se que os SSDs têm desempenho de gravação "ruim" e limites de gravação, e todas as gravações de paridade extra podem tornar isso consideravelmente mais lento.
Devo apenas tratar cada disco como seu próprio armazenamento de dados squid? (quão bem o squid lida com vários repositórios de dados? e o que acontece se / quando um falha?)
Devo ignorar os datastores e apenas inserir os SSDs em grandes partições SWAP e deixar a VM Linux fazer isso? (parece desleixado)
Qualquer conselho de pessoas que usam SSDs em ambientes de produção seria muito apreciado. (especialmente se você os estiver usando para caches HTTP)
Respostas:
Temos usado verniz em drives ssd nos últimos 9 meses, ele funcionou muito bem para nós. Anteriormente, usamos um cache somente de memória squid com uma camada de carpa. Funcionou, mas a fragmentação da memória era um problema real que requer reinicializações frequentes. O Squid 2.x também usará apenas um núcleo, o que o torna ineficiente no hardware atual.
No nosso site, que é muito amigável ao cache, vemos cerca de 10% de uso da CPU em uma máquina de 8 núcleos que atende 100Mbit / s de tráfego. Em nossos testes, ficamos sem largura de banda antes de atingirmos os limites da CPU com 2 portas de 1 Gb.
Eu tenho alguns conselhos para executar verniz com um cache ssd.
O desempenho de gravação aleatória é realmente importante. Tentamos vários fornecedores de drives ssd antes de instalar o intel x-25m. Vimos algumas postagens tão pequenas quanto 0,1 MB / s para gravações aleatórias em 4k, obtemos gravações aleatórias em 24 MB / s em 4k com o x-25m.
Raid0. O cache no 2.0 não é persistente, portanto, não é necessário se preocupar com redundância. Isso faz com que as reinicializações sejam prejudicadas, mas essas são raras. Você pode fazer coisas como carregar uma nova configuração e limpar objetos sem reiniciar.
modo mmap. O cache do verniz pode ser mmap'd para um arquivo ou usar espaço de troca. O uso de swap não funcionou bem para nós, pois tende a usar mais largura de banda de E / S para atender à mesma quantidade de tráfego. Há um readahead de 4 setores no código de swapin do linux, escrevemos um patch para removê-lo, mas ainda não o testamos em produção.
Agendador de prazos. Com o 2.6.28+, ele reconhece o ssd e funciona bem. Tentamos noop, mas descobrimos que o prazo era mais justo à medida que a largura de banda de E / S fica limitada.
Desative a leitura antecipada. Como não há atraso de rotação, não faz sentido ler dados extras apenas porque você pode precisar deles. a largura de banda de E / S é preciosa nessas coisas.
Execute 2.6.28+. O mmap de muito espaço no linux dá ao gerenciador de memória um bom exercício, mas os patches lru divididos ajudam muito. O uso da CPU kswapd caiu muito quando atualizamos.
Publicamos nosso arquivo vcl, bem como várias ferramentas que usamos com verniz no texto do link . O vcl também inclui um hack puro, implementando um servidor geoiplookup muito rápido, baseado no banco de dados maxmind.
fonte
Não estou usando SSDs como caches HTTP, mas posso fazer estas observações:
Nem todos os SSDs são iguais, então você deve ter muito cuidado ao escolher os decentes. O FusionIO produz SSDs suportados por PCIe, que são realmente de alto desempenho (com capacidade relativamente baixa), mas dispendiosos. Os SSDs X25-E SLC da Intel têm um desempenho muito bom e são mais acessíveis, mas ainda com baixa capacidade. Faça sua pesquisa! Definitivamente, posso recomendar as variantes do X25-E SLC, pois as estou usando em sistemas de produção.
Existem outros SSDS por aí que podem oferecer uma excelente velocidade de leitura / gravação sequencial, mas o importante para algo como um cache é a E / S aleatória, e muitos SSDs fornecerão aproximadamente o mesmo desempenho aleatório dos discos giratórios. Devido aos efeitos de amplificação de gravação nos SSDs, os discos giratórios costumam ter um desempenho melhor. Muitos SSDs possuem controladores de baixa qualidade (por exemplo, controladores JMicron mais antigos), que podem sofrer desempenho significativamente degradado em algumas situações. A Anandtech e outros sites fazem boas comparações com ferramentas como o iometer, confira lá.
E, é claro, os SSDs são pequenos. O Intel X25-E, que eu diria que é o melhor SSD SATA que eu já vi, só vem nas variantes de 32 e 64 GB.
Para níveis de RAID, as notas de desempenho padrão de RAID ainda se aplicam. Uma gravação em um RAID 5 envolve basicamente a leitura do bloco de dados que você vai modificar, a leitura do bloco de paridade, a atualização da paridade, a gravação do bloco de dados e a paridade, para que ainda tenha um desempenho pior do que outro RAID mesmo com SSDs. No entanto, com unidades como o X25-E com um desempenho de E / S aleatório tão alto, isso provavelmente importa menos - pois ainda superará o desempenho da E / S aleatória em discos giratórios para uma matriz de tamanho semelhante.
Pelo que vi, a largura de banda do controlador RAID está saturada muito cedo para obter o máximo benefício de um conjunto RAID de 7 discos, pelo menos no que diz respeito ao desempenho seqüencial. Você não pode obter mais do que cerca de 800 MB / s dos modelos atuais de controladores SATA (3ware, areca etc.). Com matrizes mais pequenas, em vários controladores (por exemplo, vários RAID1s em vez de um único RAID10) melhorará isso, embora o desempenho individual de cada matriz sofra algum impacto.
Em relação a um cache HTTP, acho que você seria melhor atendido com uma variedade decente de discos giratórios e bastante memória RAM. Os objetos acessados com frequência ficam no cache da memória - no cache interno do squid ou no cache fs do seu sistema operacional. Simplesmente fornecer mais RAM à máquina pode reduzir significativamente o carregamento do disco devido a isso. Se você estiver executando um cache squid grande, provavelmente precisará de muito espaço em disco, e os SSDs de alto desempenho ainda terão uma capacidade relativamente baixa.
fonte
Não estou familiarizado com unidades SSD, mas posso falar sobre o tipo de arquitetura que usei que pode ajudar a resolver alguns dos seus problemas.
Irmãos
No meu caso, construí quatro servidores com 16 GB de RAM cada. Eu configurei 9 GB como o cache de memória para o Squid usar. Eu os configurei como um conjunto de irmãos para que uma consulta a um servidor consultasse os outros antes de procurar os dados. No total, eu tinha 36 GB de cache de memória. Eu não teria superado quatro irmãos, pois a comunicação entre eles começou a diminuir.
VIPs
Eu configurei um VIP para os quatro servidores para o cliente conversar. Isso resolveu o que acontece quando um servidor fica inoperante.
Crianças
Eu configurei meu aplicativo Web para consultar um servidor Squid local em execução no 127.0.0.1. Em seguida, configurou o pai desta instância do Squid para ser o VIP. Isso permite um failover muito rápido no caso de todo o VIP ser desativado. Se os pais não responderem, a criança consulta os serviços diretamente. Também é útil se você estiver usando um único servidor Squid e não tiver um VIP. Obviamente, se a instância local do Squid em seu servidor da web diminuir, tudo será interrompido.
Lula em si
Eu realmente não olhei para o 3.0, mas o 2.x ainda é único. Em algum momento, você ficará sem buffers de CPU ou TCP. Eu espalharia o cache por 2-3 caixas a menos, se possível. Além disso, convém particionar seus squid farms no futuro, se o sistema crescer.
Em qualquer caso, boa sorte com sua compilação SSD. Estou interessado em saber como é que eu provavelmente vou seguir esse caminho no futuro.
fonte
Por que você está pensando em invadir 10 ou 5. Você quer desempenho aqui. Você não se importa se as unidades ficam inoperantes, pois é apenas um cache.
Basta usar o ataque 0 ou mantê-los separados. Eu acho que separar seria melhor, já que uma falha na unidade não derrubaria todo o cache.
fonte
A documentação do Squid recomenda não usar RAID, mas configurar diretórios de cache extras em discos adicionais.
fonte