Contextualização
Em minha postagem anterior, discuti sobre a implantação do cluster IPFS com o Docker em um único host (implementei contêineres do Docker do cluster IPFS em um único host). Neste post, discutirei sobre a implantação do cluster IPFS em ambiente de vários hosts com o Docker. As implantações relacionadas a este post estão disponíveis no gitlab. Por favor, clone o repositório e continue o post.
Arquitetura do cluster
Eu estou implantando um Cluster IPFS de três nós
. Ele contém três nós IPFS
junto com três nós Cluster IPFS
. A figura a seguir descreve a arquitetura desse cluster IPFS.
Pares de Inicialização
Os pares IPFS são configurados com a bootstrap list
(lista de pares), com a qual o daemon IPFS aprende sobre outros pares na rede. O IPFS vem com uma lista padrão de pares confiáveis, mas podemos modificar a lista para atender às nossas necessidades. Um uso popular para uma lista de inicialização personalizada é criar uma rede IPFS pessoal. MAS, ao contrário do daemon IPFS, que por padrão se conecta à rede pública IPFS e pode descobrir outros pares nela, conectando-se primeiro a uma lista bem conhecida de inicializadores disponíveis, um par de um cluster IPFS é executado em uma rede privada e não possui nenhum par público para inicializar. Assim, ao iniciar os pares do cluster IPFS pela primeira vez, é importante fornecer informações para que eles possam descobrir os outros pares e ingressar no cluster. Eu posso modificar a lista de inicialização do daemon IPFS com o comando ipfs bootstrap add
. Os pares de inicialização do cluster IPFS podem ser especificados ao iniciar o cluster com --bootstrap <peer-multiaddress1,peer-multiaddress2>
. Nesta configuração de cluster, estou usando peer0
como o par de inicialização do IPFS e do cluster IPFS.
Segredo do Cluster
Existe uma string de 32 bytes codificada em hexadecimais
(conhecida como secret
) que atua como protetora da rede libp2p. Isso fornece criptografia adicional para todas as comunicações entre pares (libp2p) usando uma chave pré-compartilhada. O compartilhamento do mesmo segredo do cluster permite que os pares entendam que fazem parte de um IPFS- Cluster. O segredo do cluster impossibilita a comunicação com o ponto de extremidade de agrupamento de um par e, portanto, impossibilita o envio de comandos RPC para esse par, sem conhecer o segredo com antecedência.
O segredo é um requisito de segurança para clusters baseados em Raft
que não impõe nenhuma política de autorização RPC. Os clusters baseados em CRDT podem ser executados com um segredo vazio, desde que trusted_peers
esteja configurado corretamente: apenas os pares contidos em trusted_peers
podem modificar o agrupamento de afixados e executar ações. No entanto, é recomendável definir o secret
em todos os casos, pois fornece isolamento de rede: clusters
executados sem um segredo podem descobrir e se conectar à rede IPFS principal, o que geralmente é inútil para os pares do cluster
(e para a rede IPFS).
O segredo do cluster pode ser definido com CLUSTER_SECRET
, uma variável de ambiente. Eu gerei a chave secreta com o seguinte comando e configurei cada par como uma variável de ambiente.
# gerar segredo do cluster
export CLUSTER_SECRET=$(od -vN 32 -An -tx1 /dev/urandom | tr -d ' \n')
echo $CLUSTER_SECRET
# este é o segredo do cluster gerado
e23e876e6742615eca9aefdc05943fa0d1bbc18f7d0a4f27e22ff8931fc56624
Implantar Par0
À seguir temos a implantação docker-compose.yml
do peer0.
Ele contém os contêineres de implantações IPFS (ipfs0
) e cluster IPFS (cluster0
). Este par é implantado em uma instância AWS com endereço IP público.
version: '3.4'
services:
# cluster peer0
# use peer0 como o peer de inicialização
ipfs0:
container_name: ipfs0
image: ipfs/go-ipfs:release
ports:
- "4001:4001" # ipfs swarm
- "5001:5001" # ipfs api
- "8081:8080" # ipfs gateway
volumes:
- /private/var/services/librum/ipfs/ipfs0:/data/ipfs
cluster0:
container_name: cluster0
image: ipfs/ipfs-cluster:latest
depends_on:
- ipfs0
environment:
CLUSTER_PEERNAME: cluster0
CLUSTER_SECRET: ${CLUSTER_SECRET}
CLUSTER_IPFSHTTP_NODEMULTIADDRESS: /dns4/ipfs0/tcp/5001
CLUSTER_CRDT_TRUSTEDPEERS: '*' # Trust all peers in Cluster
CLUSTER_RESTAPI_HTTPLISTENMULTIADDRESS: /ip4/0.0.0.0/tcp/9094 # expose API
CLUSTER_MONITORPINGINTERVAL: 2s # Speed up peer discovery
ports:
- "9094:9094" # http api
- "9095:9095" # proxy api
- "9096:9096" # cluster swarm, other peers connect via this port
volumes:
- /private/var/services/librum/ipfs/cluster0:/data/ipfs-cluster
Depois de implantar o contêiner, conectei-me em ipfs0
e obtive o endereço IPFS desse par. Esse endereço é usado como endereço de inicialização IPFS em outros pares. Então eu me conectei ao cluster0
container e peguei o endereço do cluster desse par. Esse endereço é usado como o endereço de inicialização do cluster IPFS para outros pares (peer1
e peer2
). Eu configurei este endereço no arquivo .env
de outros pares (peer1
e peer2
) como uma variável de ambiente CLUSTER_PEER0
.
# implantar ipfs0 e cluster0
docker-compose -f peer0-deployment.yml up -d ipfs0
docker-compose -f peer0-deployment.yml up -d cluster0
# executando containers
docker ps | grep ipfs
c72adf8a2a1e ipfs/ipfs-cluster:latest "/sbin/tini -- /usr/…" 20 seconds ago Up 18 seconds 0.0.0.0:9094-9096->9094-9096/tcp, :::9094-9096->9094-9096/tcp ipfs0
2e3f72345414 ipfs/go-ipfs:release "/sbin/tini -- /usr/…" About a minute ago Up About a minute (healthy) 0.0.0.0:4001->4001/tcp, :::4001->4001/tcp, 4001/udp, 0.0.0.0:5001->5001/tcp, :::5001->5001/tcp, 8081/tcp, 0.0.0.0:8081->8080/tcp, :::8081->8080/tcp cluster0
# conectar ipfs0
docker exec -it ipfs0 /bin/sh
# obter o ID do par
ipfs id
{
"ID": "12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P",
"PublicKey": "CAESINSnt5wVK8Sx3fVByTUZGOmVfnOeWJd3qr31gaAilmyc",
"Addresses": [
"/ip4/127.0.0.1/tcp/4001/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P",
"/ip4/127.0.0.1/udp/4001/quic/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P",
"/ip4/172.21.0.2/tcp/4001/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P",
"/ip4/172.21.0.2/udp/4001/quic/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P",
"/ip4/20.127.75.93/tcp/4001/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P",
"/ip4/20.127.75.93/udp/4001/quic/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P"
],
"AgentVersion": "go-ipfs/0.12.2/0e8b121/docker",
"ProtocolVersion": "ipfs/0.1.0",
"Protocols": [
"/ipfs/bitswap",
"/ipfs/bitswap/1.0.0",
"/ipfs/bitswap/1.1.0",
"/ipfs/bitswap/1.2.0",
"/ipfs/id/1.0.0",
"/ipfs/id/push/1.0.0",
"/ipfs/kad/1.0.0",
"/ipfs/lan/kad/1.0.0",
"/ipfs/ping/1.0.0",
"/libp2p/autonat/1.0.0",
"/libp2p/circuit/relay/0.1.0",
"/libp2p/circuit/relay/0.2.0/hop",
"/libp2p/circuit/relay/0.2.0/stop",
"/p2p/id/delta/1.0.0",
"/x/"
]
}
# conectar ao cluster0
docker exec -it cluster0 /bin/sh
# obter o ID do par
# ipfs-cluster-ctl id
12D3KooWRdUMLYM3M1hwXrCPfjnoFnx9PfdTCuGa2h5VKoABZ2uC | cluster0 | Sees 0 other peers
> Addresses:
- /ip4/127.0.0.1/tcp/9096/p2p/12D3KooWRdUMLYM3M1hwXrCPfjnoFnx9PfdTCuGa2h5VKoABZ2uC
- /ip4/172.21.0.3/tcp/9096/p2p/12D3KooWRdUMLYM3M1hwXrCPfjnoFnx9PfdTCuGa2h5VKoABZ2uC
> IPFS: 12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
- /ip4/127.0.0.1/tcp/4001/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
- /ip4/127.0.0.1/udp/4001/quic/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
- /ip4/172.21.0.2/tcp/4001/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
- /ip4/172.21.0.2/udp/4001/quic/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
- /ip4/20.127.75.93/tcp/4001/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
- /ip4/20.127.75.93/udp/4001/quic/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
/ #
Implantar Par1
À seguir temos a implantação docker-compose.yml
do peer1
. Ele contém os contêineres de implantações IPFS (ipfs1
) e cluster IPFS (cluster1
). Este par é implantado em uma instância AWS.
version: '3.4'
services:
# cluster peer1
# use peer0 como o peer de inicialização
ipfs1:
container_name: ipfs1
image: ipfs/go-ipfs:release
volumes:
- /private/var/services/librum/ipfs/ipfs1:/data/ipfs
cluster1:
container_name: cluster1
image: ipfs/ipfs-cluster:latest
depends_on:
- ipfs1
environment:
CLUSTER_PEERNAME: cluster1
CLUSTER_SECRET: ${CLUSTER_SECRET}
CLUSTER_IPFSHTTP_NODEMULTIADDRESS: /dns4/ipfs1/tcp/5001
CLUSTER_CRDT_TRUSTEDPEERS: '*'
CLUSTER_MONITORPINGINTERVAL: 2s # Speed up peer discovery
volumes:
- /private/var/services/librum/ipfs/cluster1:/data/ipfs-cluster
command:
- "daemon --bootstrap ${CLUSTER_PEER0}" # add multiple peers with comma seperated
Antes de implantar o peer1
, adicionei o endereço CLUSTER_PEER0
ao arquivo .env
. Este endereço passou para o comando de cluster IPFS daemon --bootstrap.
CLUSTER_SECRET=e23e876e6742615eca9aefdc05943fa0d1bbc18f7d0a4f27e22ff8931fc56624
# 20.127.75.93 é o endereço IP público de peer0
CLUSTER_PEER0="/ip4/20.127.75.93/tcp/9096/p2p/12D3KooWRdUMLYM3M1hwXrCPfjnoFnx9PfdTCuGa2h5VKoABZ2uC"
Depois de implantar o contêiner ipfs1
, conectei-me ao contêiner e adicionei o endereço ipfs0
dos pares à lista de inicialização com o comando ipfs bootstrap add.
Então este ipfs1
pode encontrar os outros pares na rede através do par de inicialização ipfs0
.
# implantar contêiner ipfs1
docker-compose -f peer1-deployment.yml up -d ipfs1
# conectar ao contêiner ipfs1
docker exec -it ipfs1 /bin/sh
# adicionar ipfs0 na lista de inicialização /ip4/20.127.75.93/tcp/4001/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
# listar pares de inicialização
# o último é o par de inicialização recém-adicionado
ipfs bootstrap list
/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN
/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa
/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb
/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt
/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ
/ip4/104.131.131.82/udp/4001/quic/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ
/ip4/20.127.75.93/tcp/4001/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
# executar cluster1
docker-compose -f peer1-deployment.yml up -d cluster1
# conectar ao contêiner cluster1
docker exec -it cluster1 /bin/sh
# verifique os pares do cluster ipfs
# dois pares devem estar lá
ipfs-cluster-ctl peers ls
12D3KooWD2gfEg4sjK7zVaj9SeK8pcssnxczjg9Lt7ZkkkhcmwpZ | cluster1 | Sees 1 other peers
> Addresses:
- /ip4/127.0.0.1/tcp/9096/p2p/12D3KooWD2gfEg4sjK7zVaj9SeK8pcssnxczjg9Lt7ZkkkhcmwpZ
- /ip4/172.22.0.3/tcp/9096/p2p/12D3KooWD2gfEg4sjK7zVaj9SeK8pcssnxczjg9Lt7ZkkkhcmwpZ
> IPFS: 12D3KooWQqQPMLLsXzGtxd1wCZBRdZjxW7wzyXgJamnqipwAvrcG
- /ip4/127.0.0.1/tcp/4001/p2p/12D3KooWQqQPMLLsXzGtxd1wCZBRdZjxW7wzyXgJamnqipwAvrcG
- /ip4/127.0.0.1/udp/4001/quic/p2p/12D3KooWQqQPMLLsXzGtxd1wCZBRdZjxW7wzyXgJamnqipwAvrcG
- /ip4/172.22.0.2/tcp/4001/p2p/12D3KooWQqQPMLLsXzGtxd1wCZBRdZjxW7wzyXgJamnqipwAvrcG
- /ip4/172.22.0.2/udp/4001/quic/p2p/12D3KooWQqQPMLLsXzGtxd1wCZBRdZjxW7wzyXgJamnqipwAvrcG
- /ip4/20.228.145.221/tcp/4001/p2p/12D3KooWQqQPMLLsXzGtxd1wCZBRdZjxW7wzyXgJamnqipwAvrcG
- /ip4/20.228.145.221/udp/4001/quic/p2p/12D3KooWQqQPMLLsXzGtxd1wCZBRdZjxW7wzyXgJamnqipwAvrcG
12D3KooWRdUMLYM3M1hwXrCPfjnoFnx9PfdTCuGa2h5VKoABZ2uC | cluster0 | Sees 1 other peers
> Addresses:
- /ip4/127.0.0.1/tcp/9096/p2p/12D3KooWRdUMLYM3M1hwXrCPfjnoFnx9PfdTCuGa2h5VKoABZ2uC
- /ip4/172.21.0.3/tcp/9096/p2p/12D3KooWRdUMLYM3M1hwXrCPfjnoFnx9PfdTCuGa2h5VKoABZ2uC
- /ip4/20.127.75.93/tcp/9096/p2p/12D3KooWRdUMLYM3M1hwXrCPfjnoFnx9PfdTCuGa2h5VKoABZ2uC
> IPFS: 12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
- /ip4/127.0.0.1/tcp/4001/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
- /ip4/127.0.0.1/udp/4001/quic/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
- /ip4/172.21.0.2/tcp/4001/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
- /ip4/172.21.0.2/udp/4001/quic/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
- /ip4/20.127.75.93/tcp/4001/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
- /ip4/20.127.75.93/udp/4001/quic/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
Implantar Par2
A seguir está a implantação docker-compose.yml
do peer2
. Ele contém os contêineres de implantações IPFS (ipfs2
) e cluster IPFS (cluster2
). Este par é implantado na máquina local.
version: '3.4'
services:
# cluster peer2
# use peer0 como o par de inicialização
ipfs2:
container_name: ipfs2
image: ipfs/go-ipfs:release
volumes:
- /private/var/services/librum/ipfs/ipfs2:/data/ipfs
cluster2:
container_name: cluster2
image: ipfs/ipfs-cluster:latest
depends_on:
- ipfs2
environment:
CLUSTER_PEERNAME: cluster2
CLUSTER_SECRET: ${CLUSTER_SECRET}
CLUSTER_IPFSHTTP_NODEMULTIADDRESS: /dns4/ipfs2/tcp/5001
CLUSTER_CRDT_TRUSTEDPEERS: '*'
CLUSTER_MONITORPINGINTERVAL: 2s # Speed up peer discovery
volumes:
- /private/var/services/librum/ipfs/cluster2:/data/ipfs-cluster
command:
- "daemon --bootstrap ${CLUSTER_PEER0}" # add multiple peers with comma seperated
Semelhante ao peer1
, antes de implantar o peer2
, adicionei o endereço CLUSTER_PEER0
ao arquivo .env
. Este endereço passou para o comando de cluster IPFS daemon --bootstrap.
CLUSTER_SECRET=e23e876e6742615eca9aefdc05943fa0d1bbc18f7d0a4f27e22ff8931fc56624
# 20.127.75.93 é o endereço IP público de peer0
CLUSTER_PEER0="/ip4/20.127.75.93/tcp/9096/p2p/12D3KooWRdUMLYM3M1hwXrCPfjnoFnx9PfdTCuGa2h5VKoABZ2uC"
Depois de implantar o contêiner ipfs2
, conectei-me ao contêiner e adicionei o endereço ipfs0
dos pares à lista de inicialização com o comando ipfs bootstrap add.
Então este par ipfs2
pode encontrar os outros pares na rede através do par de inicialização ipfs0.
# executar o contêiner ipfs2
docker-compose -f peer2-deployment.yml up -d ipfs1
# conectar ao contêiner ipfs2
docker exec -it ipfs2 /bin/sh
# adicionar ipfs0 na lista de inicialização
ipfs bootstrap add /ip4/20.127.75.93/tcp/4001/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
# listar pares de inicialização
# o último é o peer de inicialização recém-adicionado
# lista de inicialização ipfs
/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN
/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa
/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb
/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt
/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ
/ip4/104.131.131.82/udp/4001/quic/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ
/ip4/20.127.75.93/tcp/4001/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
# executar cluster2
docker-compose -f peer1-deployment.yml up -d cluster2
# conectar ao contêiner cluster2
docker exec -it cluster2 /bin/sh
# verifique os pares do cluster ipfs
# três pares devem estar lá
ipfs-cluster-ctl peers ls
12D3KooWQcaPhm7DvD2jSXFyaBoMR3WHUA9udTZwwyt34ousR6Rm | cluster2 | Sees 2 other peers
> Addresses:
- /ip4/127.0.0.1/tcp/9096/p2p/12D3KooWQcaPhm7DvD2jSXFyaBoMR3WHUA9udTZwwyt34ousR6Rm
- /ip4/172.18.0.3/tcp/9096/p2p/12D3KooWQcaPhm7DvD2jSXFyaBoMR3WHUA9udTZwwyt34ousR6Rm
> IPFS: 12D3KooWStxtfQW45SCE1MtaF6cQQyRb8QHpgJ5aQoTMBY4Zu1ur
- /ip4/127.0.0.1/tcp/4001/p2p/12D3KooWStxtfQW45SCE1MtaF6cQQyRb8QHpgJ5aQoTMBY4Zu1ur
- /ip4/127.0.0.1/udp/4001/quic/p2p/12D3KooWStxtfQW45SCE1MtaF6cQQyRb8QHpgJ5aQoTMBY4Zu1ur
- /ip4/172.18.0.2/tcp/4001/p2p/12D3KooWStxtfQW45SCE1MtaF6cQQyRb8QHpgJ5aQoTMBY4Zu1ur
- /ip4/172.18.0.2/udp/4001/quic/p2p/12D3KooWStxtfQW45SCE1MtaF6cQQyRb8QHpgJ5aQoTMBY4Zu1ur
- /ip4/70.104.177.55/tcp/33046/p2p/12D3KooWStxtfQW45SCE1MtaF6cQQyRb8QHpgJ5aQoTMBY4Zu1ur
- /ip4/70.104.177.55/udp/46850/quic/p2p/12D3KooWStxtfQW45SCE1MtaF6cQQyRb8QHpgJ5aQoTMBY4Zu1ur
12D3KooWRdUMLYM3M1hwXrCPfjnoFnx9PfdTCuGa2h5VKoABZ2uC | cluster0 | Sees 2 other peers
> Addresses:
- /ip4/127.0.0.1/tcp/9096/p2p/12D3KooWRdUMLYM3M1hwXrCPfjnoFnx9PfdTCuGa2h5VKoABZ2uC
- /ip4/172.21.0.3/tcp/9096/p2p/12D3KooWRdUMLYM3M1hwXrCPfjnoFnx9PfdTCuGa2h5VKoABZ2uC
- /ip4/20.127.75.93/tcp/9096/p2p/12D3KooWRdUMLYM3M1hwXrCPfjnoFnx9PfdTCuGa2h5VKoABZ2uC
> IPFS: 12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
- /ip4/127.0.0.1/tcp/4001/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
- /ip4/127.0.0.1/udp/4001/quic/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
- /ip4/172.21.0.2/tcp/4001/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
- /ip4/172.21.0.2/udp/4001/quic/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
- /ip4/20.127.75.93/tcp/4001/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
- /ip4/20.127.75.93/udp/4001/quic/p2p/12D3KooWQ8Uvw8QrfF9coNdKPezRMQNY9pJ8Kdg3jjdCqEQ1pF8P
12D3KooWD2gfEg4sjK7zVaj9SeK8pcssnxczjg9Lt7ZkkkhcmwpZ | ERROR: failed to dial 12D3KooWD2gfEg4sjK7zVaj9SeK8pcssnxczjg9Lt7ZkkkhcmwpZ:
* [/ip4/172.22.0.3/tcp/9096] dial tcp4 0.0.0.0:9096->172.22.0.3:9096: i/o timeout
Testar o cluster
Finalmente, conectei-me ao cluster IPFS e fixei alguns CIDs no cluster. A seguir está a maneira de fazer a fixação do CID e recuperar os status da fixação.
# conectar ao contêiner cluster2
docker exec -it cluster2 /bin/sh
# adicionar conteúdo ao ipfs
ipfs-cluster-ctl add data/ipfs-cluster/peerstore
added QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH peerstore
# setar CID no cluster
ipfs-cluster-ctl pin add QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH
QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH:
> cluster1 : CLUSTER_ERROR: context deadline exceeded | 2022-05-25T07:01:26.295752814Z | Attempts: 0 | Priority: false
> cluster2 : PINNED | 2022-05-25T07:01:25Z | Attempts: 0 | Priority: false
> cluster0 : PINNED | 2022-05-25T07:01:25Z | Attempts: 0 | Priority: false
# lista de pins
ipfs-cluster-ctl pin ls
QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH | | PIN | Repl. Factor: -1 | Allocations: [everywhere] | Recursive | Metadata: no | Exp: ∞ | Added: 2022-05-25 07:01:25
# estado do pin
ipfs-cluster-ctl status QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH
QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH:
> cluster1 : CLUSTER_ERROR: context deadline exceeded | 2022-05-25T07:02:34.847996491Z | Attempts: 0 | Priority: false
> cluster2 : PINNED | 2022-05-25T07:01:25Z | Attempts: 0 | Priority: false
> cluster0 : PINNED | 2022-05-25T07:01:25Z | Attempts: 0 | Priority: false
Referência
- https://rossbulat.medium.com/using-ipfs-cluster-service-for-global-ipfs-data-persistence-69a260a0711c
- https://medium.com/rahasak/ipfs-cluster-with-docker-db2ec20a6cc1
- https://labs.eleks.com/2019/03/ipfs-network-data-replication.html
- https://www.geekdecoder.com/setting-up-a-private-ipfs-network-with-ipfs-and-ipfs-cluster/
- https://developpaper.com/construction-of-ipfs-private-network-cluster/
- https://medium.com/towardsblockchain/setting-up-your-first-distributed-private-storage-network-on-ipfs-part-1-a6ff15222b90
Este artigo foi escrito por λ.eranga e traduzido por Marcelo Panegali. Você pode encontrar o original em inglês aqui.
Top comments (0)