Existe uma maneira de obter nomes de caminho dependentes de contexto (CDPN) no NFS?

1

Nos meus clusters GFS eu uso o CDPN recurso para ter diretórios /dev/log de chroot separados em nós de cluster separados:

/home/ftpuser/foo:
lrwxrwxrwx   1 root root   18 Sep 26  2010 dev -> .sys/@hostname/dev

/home/ftpuser/foo/.sys:
drwx--x--x 3 root root 3864 Sep 26  2010 server1.example.com
drwx--x--x 3 root root 3864 Sep 26  2010 server2.example.com
drwx--x--x 3 root root 3864 Sep 26  2010 server3.example.com

/home/ftpuser/foo/.sys/server2.example.com:
drwx--x--x 2 root root 3864 Sep 25 09:34 dev

/home/ftpuser/foo/.sys/server2.example.com/dev:
srw-rw-rw- 1 root root    0 Sep 25 09:23 log

/home/ftpuser/foo/dev: (transparently picking 1 subdir depending on node name)
srw-rw-rw- 1 root root    0 Sep 25 09:23 log

Eu uso isso para que o daemon rsyslog em cada nó não interfira um no outro. Ele funciona porque @hostname em um caminho é substituído pelo nome do host que o interpreta, portanto diferentes hosts obtêm um diretório diferente. Os clusters estão ativos em todos os nós simultaneamente.

Minhas perguntas:

  • Existe uma maneira de obter funcionalidade correspondente em um compartilhamento NFS?
  • Poderia, em teoria, ser implementado no kernel do linux em todos os sistemas de arquivos (por meio de uma opção de montagem, para não quebrar as coisas por padrão)?

Esta questão é semelhante, mas não é idêntica a esta: Arquivo NFS com o mesmo nome, mas conteúdo diferente dependendo do host

    
por MattBianco 10.11.2014 / 11:54

1 resposta

1

Eu não acho que o CDPN exista para o NFS, mas você pode conseguir algo aproximadamente equivalente às ferramentas básicas. A limitação é que você tem que colocar todos os arquivos específicos do nó no mesmo local (ou pelo menos você precisa manter uma lista de locais), você não pode usar o recurso @hostname em qualquer lugar que desejar.

Monte um sistema de arquivos local em todos os nós no mesmo local, por exemplo %código%. Nesse sistema de arquivos, crie um link simbólico cujo destino varie entre nós e aponte para a área específica do nó do sistema de arquivos remoto. Você não precisa de armazenamento local para isso, pode ser um sistema de arquivos na memória; já que só precisa armazenar um link simbólico, a sobrecarga é pequena.

mount -t tmpfs -o noexec,nodev,nosuid,mode=755,nr_inodes=2,nr_blocks=2 local-redirect /local
ln -s "/nfs/.sys/$HOSTNAME" /local/storage

Use /local onde você usaria /local/storage em seu exemplo.

Uma abordagem diferente, específica do Linux, é montar um bind em cada nó. Ter um diretório vazio no sistema de arquivos compartilhado e ligar-montar .sys/@hostname a ele depois de montar o sistema de arquivos NFS.

mount --bind "/.nfs/sys/$HOSTNAME" /nfs/.sys/@hostname
    
por 11.11.2014 / 02:22