O NFS Ganesha concede acesso de NFS ao Object Gateway ou CephFS. No SUSE Enterprise Storage 5, as versões 3 e 4 do NFS são suportadas. O NFS Ganesha é executado no espaço do usuário, em vez do kernel, e interage diretamente com o Object Gateway ou o CephFS.
Para implantar o NFS Ganesha com êxito, você precisa adicionar uma função role-ganesha
ao /srv/pillar/ceph/proposals/policy.cfg
. Para obter os detalhes, consulte a Seção 4.5.1, “Arquivo policy.cfg
”. O NFS Ganesha também precisa da role-rgw
ou da role-mds
no policy.cfg
.
Embora seja possível instalar e executar o servidor NFS Ganesha em um nó do Ceph existente, é recomendável executá-lo em um host dedicado com acesso ao cluster do Ceph. Normalmente, os hosts de clientes não fazem parte do cluster, mas eles precisam ter acesso via rede ao servidor NFS Ganesha.
Para habilitar o servidor NFS Ganesha a qualquer momento após a instalação inicial, adicione a role-ganesha
ao policy.cfg
e reexecute pelo menos as fases 2 e 4 do DeepSea. Para obter os detalhes, consulte a Seção 4.3, “Implantação do cluster”.
O NFS Ganesha é configurado por meio do arquivo /etc/ganesha/ganesha.conf
que existe no nó do NFS Ganesha. No entanto, esse arquivo é sobregravado toda vez que a fase 4 do DeepSea é executada. Portanto, recomendamos editar o gabarito usado pelo Salt, que é o arquivo /srv/salt/ceph/ganesha/files/ganesha.conf.j2
no master Salt. Para obter detalhes sobre o arquivo de configuração, consulte o Seção 14.2, “Configuração”.
Os seguintes requisitos devem ser atendidos antes da execução das fases 2 e 4 do DeepSea para instalar o NFS Ganesha:
No mínimo, um nó precisa receber a função role-ganesha
.
Você pode definir apenas uma role-ganesha
por minion.
O NFS Ganesha precisa de um Object Gateway ou CephFS para funcionar.
Se o NFS Ganesha tiver que usar o Object Gateway para estabelecer interface com o cluster, o /srv/pillar/ceph/rgw.sls
no master Salt deverá ser preenchido.
Este procedimento fornece um exemplo de instalação que usa as FSAL (File System Abstraction Layers – Camadas de Abstração do Sistema de Arquivos) do Object Gateway e do CephFS do NFS Ganesha.
Se você não fez isto, execute as fases 0 e 1 do DeepSea antes de continuar esse procedimento.
root #
salt-run
state.orch ceph.stage.0root #
salt-run
state.orch ceph.stage.1
Após executar a fase 1 do DeepSea, edite o /srv/pillar/ceph/proposals/policy.cfg
e adicione a linha
role-ganesha/cluster/NODENAME
Substitua NODENAME pelo nome de um nó no cluster.
Verifique também se uma role-mds
e uma role-rgw
foram atribuídas.
Crie o arquivo /srv/pillar/ceph/rgw.sls
e insira o seguinte conteúdo:
rgw_configurations: rgw: users: - { uid: "demo", name: "Demo", email: "demo@demo.nil" } - { uid: "demo1", name: "Demo1", email: "demo1@demo.nil" }
Posteriormente, esses usuários serão criados como usuários do Object Gateway, e as chaves de API serão geradas. No nó do Object Gateway, você pode depois executar radosgw-admin user list
para listar todos os usuários criados, e radosgw-admin user info --uid=demo
para obter detalhes sobre usuários únicos.
O DeepSea garante que tanto o Object Gateway quanto o NFS Ganesha recebam as credenciais de todos os usuários listados na seção rgw
do rgw.sls
.
O NFS exportado usa esses nomes de usuário no primeiro nível do sistema de arquivos. Neste exemplo, os caminhos /demo
e /demo1
serão exportados.
Execute pelo menos as fases 2 e 4 do DeepSea. É recomendável executar a fase 3 entre elas.
root #
salt-run
state.orch ceph.stage.2root #
salt-run
state.orch ceph.stage.3 # optional but recommendedroot #
salt-run
state.orch ceph.stage.4
Monte o compartilhamento NFS de um nó de cliente para verificar se o NFS Ganesha está funcionando:
root #
mount
-o sync -t nfs GANESHA_NODE:/ /mntroot #
ls
/mnt cephfs demo demo1
O /mnt
deve conter todos os caminhos exportados. Os diretórios para o CephFS e ambos os usuários do Object Gateway devem existir. Para cada compartimento de memória que um usuário possui, um caminho /mnt/USERNAME/BUCKETNAME
é exportado.
Esta seção apresenta um exemplo de como definir uma configuração ativa-passiva de dois nós dos servidores NFS Ganesha. A configuração requer a SUSE Linux Enterprise High Availability Extension. Os dois nós são denominados earth
e mars
.
Para obter detalhes sobre a SUSE Linux Enterprise High Availability Extension, consulte https://www.suse.com/documentation/sle-ha-12/.
Nessa configuração, earth
tem o endereço IP 192.168.1.1
, e mars
tem o endereço 192.168.1.2
.
Além disso, dois endereços IP virtuais flutuantes são usados, permitindo aos clientes se conectarem ao serviço independentemente do nó físico no qual está sendo executado. 192.168.1.10
é usado para administração do cluster com Hawk2, e 192.168.2.1
é usado exclusivamente para exportações NFS. Isso facilita aplicar as restrições de segurança mais tarde.
O procedimento a seguir descreve a instalação de exemplo. Mais detalhes podem ser encontrados em https://www.suse.com/documentation/sle-ha-12/install-quick/data/install-quick.html.
Prepare os nós do NFS Ganesha no master Salt:
Execute as fases 0 e 1 do DeepSea no master Salt.
root@master #
salt-run
state.orch ceph.stage.0root@master #
salt-run
state.orch ceph.stage.1
Atribua aos nós earth
e mars
a função role-ganesha
em /srv/pillar/ceph/proposals/policy.cfg
:
role-ganesha/cluster/earth*.sls role-ganesha/cluster/mars*.sls
Execute as fases 3 e 4 do DeepSea no master Salt.
root@master #
salt-run
state.orch ceph.stage.3root@master #
salt-run
state.orch ceph.stage.4
Registre a SUSE Linux Enterprise High Availability Extension no earth
e no mars
.
root #
SUSEConnect
-r ACTIVATION_CODE -e E_MAIL
Instale o ha-cluster-bootstrap em ambos os nós:
root #
zypper
in ha-cluster-bootstrap
Inicialize o cluster no earth
:
root@earth #
ha-cluster-init
Permita que o mars
ingresse no cluster:
root@mars #
ha-cluster-join
-c earth
Verifique o status do cluster. Você deve ver dois nós adicionados ao cluster:
root@earth #
crm
status
Em ambos os nós, desabilite o início automático do serviço NFS Ganesha no momento da inicialização:
root #
systemctl
disable nfs-ganesha
Inicie o shell do crm
no earth
:
root@earth #
crm
configure
Os próximos comandos são executados no shell do crm.
No earth
, execute o shell do crm para executar os comandos a seguir a fim de configurar o recurso nos daemons do NFS Ganesha como clone do tipo de recurso systemd:
crm(live)configure#
primitive nfs-ganesha-server systemd:nfs-ganesha \ op monitor interval=30scrm(live)configure#
clone nfs-ganesha-clone nfs-ganesha-server meta interleave=truecrm(live)configure#
commitcrm(live)configure#
status 2 nodes configured 2 resources configured Online: [ earth mars ] Full list of resources: Clone Set: nfs-ganesha-clone [nfs-ganesha-server] Started: [ earth mars ]
Crie um IPAddr2 primitivo com o shell do crm:
crm(live)configure#
primitive ganesha-ip IPaddr2 \ params ip=192.168.2.1 cidr_netmask=24 nic=eth0 \ op monitor interval=10 timeout=20crm(live)#
status Online: [ earth mars ] Full list of resources: Clone Set: nfs-ganesha-clone [nfs-ganesha-server] Started: [ earth mars ] ganesha-ip (ocf::heartbeat:IPaddr2): Started earth
Para configurar um relacionamento entre o servidor NFS Ganesha e o IP Virtual flutuante, usamos colocalização e ordenação.
crm(live)configure#
colocation ganesha-ip-with-nfs-ganesha-server inf: ganesha-ip nfs-ganesha-clonecrm(live)configure#
order ganesha-ip-after-nfs-ganesha-server Mandatory: nfs-ganesha-clone ganesha-ip
Use o comando mount
do cliente para garantir que a configuração do cluster foi concluída:
root #
mount
-t nfs -v -o sync,nfsvers=4 192.168.2.1:/ /mnt
Em caso de falha em um dos nós do NFS Ganesha (por exemplo, earth
), corrija o problema e limpe o recurso. Apenas depois que o recurso estiver limpo, será possível fazer failback dele para o earth
, caso haja falha no mars
do NFS Ganesha.
Para limpar o recurso:
root@earth #
crm
resource cleanup nfs-ganesha-clone earthroot@earth #
crm
resource cleanup ganesha-ip earth
Pode acontecer de um servidor não conseguir acessar o cliente por causa de um problema de rede. Um recurso de ping pode detectar e minimizar esse problema. A configuração desse recurso é opcional.
Defina o recurso de ping:
crm(live)configure#
primitive ganesha-ping ocf:pacemaker:ping \
params name=ping dampen=3s multiplier=100 host_list="CLIENT1 CLIENT2" \
op monitor interval=60 timeout=60 \
op start interval=0 timeout=60 \
op stop interval=0 timeout=60
host_list
é uma lista de endereços IP separados por caracteres de espaço. Será feito ping regular dos endereços IP para verificar se há interrupções de rede. Se um cliente sempre precisar de acesso ao servidor NFS, adicione-o à host_list
.
Crie um clone:
crm(live)configure#
clone ganesha-ping-clone ganesha-ping \
meta interleave=true
O comando a seguir cria uma restrição para o serviço NFS Ganesha. Ele força o serviço a se mover para outro nó quando a host_list
está inacessível.
crm(live)configure#
location nfs-ganesha-server-with-ganesha-ping
nfs-ganesha-clone \
rule -inf: not_defined ping or ping lte 0
O DeepSea não oferece suporte à configuração de HA do NFS Ganesha. Para evitar falha no DeepSea após a configuração de HA do NFS Ganesha, exclua a inicialização e interrupção do serviço NFS Ganesha da Fase 4 do DeepSea:
Copie /srv/salt/ceph/ganesha/default.sls
para /srv/salt/ceph/ganesha/ha.sls
.
Remova a entrada .service
do /srv/salt/ceph/ganesha/ha.sls
de modo que fique com esta aparência:
include: - .keyring - .install - .configure
Adicione a seguinte linha a /srv/pillar/ceph/stack/global.yml
:
ganesha_init: ha
Mais informações podem ser encontradas no Capítulo 14, NFS Ganesha: Exportar dados do Ceph pelo NFS.