{"id":25545166,"url":"https://github.com/vutrandn94/minio-site-replication","last_synced_at":"2026-04-16T02:32:24.883Z","repository":{"id":277514459,"uuid":"932598306","full_name":"vutrandn94/minio-site-replication","owner":"vutrandn94","description":"Deploy MinIO: Site Replication","archived":false,"fork":false,"pushed_at":"2025-02-14T09:47:10.000Z","size":708,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-19T02:34:55.175Z","etag":null,"topics":["docker","docker-compose","minio","minio-site-replicate"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vutrandn94.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-02-14T07:11:58.000Z","updated_at":"2025-02-14T09:47:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"f16b3270-603a-4329-9b93-7f39039312a6","html_url":"https://github.com/vutrandn94/minio-site-replication","commit_stats":null,"previous_names":["vutrandn94/minio-site-replication"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vutrandn94/minio-site-replication","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vutrandn94%2Fminio-site-replication","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vutrandn94%2Fminio-site-replication/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vutrandn94%2Fminio-site-replication/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vutrandn94%2Fminio-site-replication/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vutrandn94","download_url":"https://codeload.github.com/vutrandn94/minio-site-replication/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vutrandn94%2Fminio-site-replication/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31868498,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"online","status_checked_at":"2026-04-16T02:00:06.042Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-compose","minio","minio-site-replicate"],"created_at":"2025-02-20T08:18:06.977Z","updated_at":"2026-04-16T02:32:24.839Z","avatar_url":"https://github.com/vutrandn94.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# minio-site-replication\nDeploy MinIO: Site Replication\n\n![Alt Text](site-replicate-diagram.png)\n\n## Requirement\n- Format disk XFS for high performance\n- Minimum: 2 nodes (2 servers)\n- Deployment environment: Docker\n- Deployment tools: Docker Compose\n\n\n## Information about the servers deploying the lab\n\n| Hostname | IP Address | Description |\n| :--- | :--- | :--- |\n| minio01 | 172.31.47.91 | |\n| minio02 | 172.31.37.11 | |\n| minio03 | 172.31.36.54 | Add Later |\n\n## Deploy\n**Default minio admin user \u0026 password (Change if necessary)**\n| Default Root User | Default Root Password |\n| :--- | :--- |\n| root | Enjoyday |\n\n**Default container Timezone (Modify to appropriate timezone)**\n| Default container Timezone |\n| :--- |\n| Asia/Ho_Chi_Minh |\n\n**Default docker volume mount path**\n| Default volume mount path |\n| :--- |\n| /mnt/data | \n\n**Default MinIO docker image**\n| Default MinIO docker image |\n| :--- |\n| quay.io/minio/minio:RELEASE.2025-01-20T14-49-07Z |\n\n**Setting hosts file (Set on all nodes)**\n```\n## MINIO\n172.31.47.91 minio01 \n172.31.37.11 minio02 \n172.31.36.54 minio03\n```\n\n## Add site replication (2 node minio01 - minio02)\n**docker-compose.yml in minio01 (Config in node \"minio01\"):**\n```\nservices:\n  minio01:\n    image: 'quay.io/minio/minio:RELEASE.2025-01-20T14-49-07Z'\n    restart: always\n    environment:\n      MINIO_ROOT_USER: \"root\"\n      MINIO_ROOT_PASSWORD: \"Enjoyday\"\n      TZ: \"Asia/Ho_Chi_Minh\"\n      MC_HOST_minio01: \"http://root:Enjoyday@minio01:9000\"\n      MC_HOST_minio02: \"http://root:Enjoyday@minio02:9000\"\n      MC_HOST_minio03: \"http://root:Enjoyday@minio03:9000\"\n    command: server /data --console-address \":9001\"\n    ports:\n      - 9000:9000\n      - 9001:9001\n    volumes:\n      - /mnt/data:/data\n    networks:\n      - minio-net\n    healthcheck:\n      test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n      interval: 1m\n      timeout: 10s\n      retries: 3\n      start_period: 1m\nnetworks:\n  minio-net:\n    driver: bridge\n```\n\n**docker-compose.yml in minio02 (Config in node \"minio02\"):**\n```\nservices:\n  minio02:\n    image: 'quay.io/minio/minio:RELEASE.2025-01-20T14-49-07Z'\n    restart: always\n    environment:\n      MINIO_ROOT_USER: \"root\"\n      MINIO_ROOT_PASSWORD: \"Enjoyday\"\n      TZ: \"Asia/Ho_Chi_Minh\"\n      MC_HOST_minio01: \"http://root:Enjoyday@minio01:9000\"\n      MC_HOST_minio02: \"http://root:Enjoyday@minio02:9000\"\n      MC_HOST_minio03: \"http://root:Enjoyday@minio03:9000\"\n    command: server /data --console-address \":9001\"\n    ports:\n      - 9000:9000\n      - 9001:9001\n    volumes:\n      - /mnt/data:/data\n    networks:\n      - minio-net\n    healthcheck:\n      test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:9000/minio/health/live\"]\n      interval: 1m\n      timeout: 10s\n      retries: 3\n      start_period: 1m\nnetworks:\n  minio-net:\n    driver: bridge\n```\n\n**Deploy service (Execute on all nodes):**\n```\n# docker-compose up -d\n```\n\n**Add site replication (Execute on minio01/minio02):**\n```\nroot@minio01:~/minio-deploy# docker ps\nCONTAINER ID   IMAGE                                              COMMAND                  CREATED              STATUS                        PORTS                              NAMES\nb47c3db88b69   quay.io/minio/minio:RELEASE.2025-01-20T14-49-07Z   \"/usr/bin/docker-ent…\"   About a minute ago   Up About a minute (healthy)   0.0.0.0:9000-9001-\u003e9000-9001/tcp   minio-deploy-minio01-1\n```\n```\nroot@minio01:~/minio-deploy# docker exec -it minio-deploy-minio01-1 bash\n```\n```\nbash-5.1# mc admin replicate add minio01 minio02\nmc: Configuration written to `/tmp/.mc/config.json`. Please update your access credentials.\nmc: Successfully created `/tmp/.mc/share`.\nmc: Initialized share uploads `/tmp/.mc/share/uploads.json` file.\nmc: Initialized share downloads `/tmp/.mc/share/downloads.json` file.\nRequested sites were configured for replication successfully.\n```\n**Site replication configuration verify:**\n```\nbash-5.1# mc admin replicate info  minio01\nSiteReplication enabled for:\n\nDeployment ID                        | Site Name       | Endpoint                                       | Sync | Bandwidth  | ILM Expiry Replication   \n                                     |                 |                                                |      | Per Bucket |                          \n4bc1ff09-2783-4f04-9f07-3f27ed43f66f | minio01         | http://minio01:9000                            |      | N/A        | false                    \n8a3cade1-8ada-4bdd-a7a3-c1c082e568c3 | minio02         | http://minio02:9000                            |      | N/A        | false                    \n```\n```\nbash-5.1# mc admin replicate info  minio02\nSiteReplication enabled for:\n\nDeployment ID                        | Site Name       | Endpoint                                       | Sync | Bandwidth  | ILM Expiry Replication   \n                                     |                 |                                                |      | Per Bucket |                          \n4bc1ff09-2783-4f04-9f07-3f27ed43f66f | minio01         | http://minio01:9000                            |      | N/A        | false                    \n8a3cade1-8ada-4bdd-a7a3-c1c082e568c3 | minio02         | http://minio02:9000                            |      | N/A        | false                    \n```\n**Check replicate status in node minio01:**\n```\nbash-5.1# mc admin replicate status minio01\nBucket replication status:\nNo Buckets present\n\nPolicy replication status:\n●  5/5 Policies in sync\n\nUser replication status:\nNo Users present\n\nGroup replication status:\nNo Groups present\n\nILM Expiry Rules replication status:\nNo ILM Expiry Rules present\n\nObject replication status:\nReplication status since 8 minutes \nSummary:\nReplicated:    0 objects (0 B)\nQueued:        ● 0 objects, (0 B) (avg: 0 objects, 0 B; max: 0 objects, 0 B)\nReceived:      0 objects (0 B)\n```\n**Check replicate status in node minio02:**\n```\nbash-5.1# mc admin replicate status minio02\nBucket replication status:\nNo Buckets present\n\nPolicy replication status:\n●  5/5 Policies in sync\n\nUser replication status:\nNo Users present\n\nGroup replication status:\nNo Groups present\n\nILM Expiry Rules replication status:\nNo ILM Expiry Rules present\n\nObject replication status:\nReplication status since 8 minutes \nSummary:\nReplicated:    0 objects (0 B)\nQueued:        ● 0 objects, (0 B) (avg: 0 objects, 0 B; max: 0 objects, 0 B)\nReceived:      0 objects (0 B)\n```\n\n**Test replicate**\n- **Create bucket in node minio01/minio02 and check the remaining node:**\n\n![Alt Text](bucket-replicate-1.png)\n\n![Alt Text](bucket-replicate-2.png)\n\n- **Upload item object in node minio01/minio02 and verify object metadata in remaining node:**\n\n![Alt Text](object-replicate-1.png)\n\n![Alt Text](metric.png)\n\n\n## (Optinal) Add site replication to expand (add node minio03)\n\u003e [!NOTE]\n\u003e Node need to add more to expand replicate size, there must be no data (Empty data). The data will automatically sync to the new node according to the default mode \"asynchronous\" (MinIO strongly recommends). Can change mode with \"mc admin replicate update --mode\" (https://min.io/docs/minio/linux/reference/minio-mc-admin/mc-admin-replicate.html#mc.admin.replicate.update.-mode)\n\n**Execute on minio01/minio02:**\n```\nroot@minio01:~/minio-deploy# docker ps\nCONTAINER ID   IMAGE                                              COMMAND                  CREATED          STATUS                    PORTS                              NAMES\nb47c3db88b69   quay.io/minio/minio:RELEASE.2025-01-20T14-49-07Z   \"/usr/bin/docker-ent…\"   33 minutes ago   Up 32 minutes (healthy)   0.0.0.0:9000-9001-\u003e9000-9001/tcp   minio-deploy-minio01-1\n```\n```\nroot@minio01:~/minio-deploy# docker exec -it minio-deploy-minio01-1 bash\n```\n```\nbash-5.1# mc admin replicate add minio01 minio02 minio03\nRequested sites were configured for replication successfully.\n```\n**Site replication configuration verify:**\n```\nbash-5.1# mc admin replicate info  minio01\nSiteReplication enabled for:\n\nDeployment ID                        | Site Name       | Endpoint                                       | Sync | Bandwidth  | ILM Expiry Replication   \n                                     |                 |                                                |      | Per Bucket |                          \n4bc1ff09-2783-4f04-9f07-3f27ed43f66f | minio01         | http://minio01:9000                            |      | N/A        | false                    \n8a3cade1-8ada-4bdd-a7a3-c1c082e568c3 | minio02         | http://minio02:9000                            |      | N/A        | false                    \nec02fcd6-0986-4792-8b15-01e43105eae4 | minio03         | http://minio03:9000                            |      | N/A        | false                    \n```\n```\nbash-5.1# mc admin replicate info  minio02\nSiteReplication enabled for:\n\nDeployment ID                        | Site Name       | Endpoint                                       | Sync | Bandwidth  | ILM Expiry Replication   \n                                     |                 |                                                |      | Per Bucket |                          \n4bc1ff09-2783-4f04-9f07-3f27ed43f66f | minio01         | http://minio01:9000                            |      | N/A        | false                    \n8a3cade1-8ada-4bdd-a7a3-c1c082e568c3 | minio02         | http://minio02:9000                            |      | N/A        | false                    \nec02fcd6-0986-4792-8b15-01e43105eae4 | minio03         | http://minio03:9000                            |      | N/A        | false                    \n```\n```\nbash-5.1# mc admin replicate info  minio03\nSiteReplication enabled for:\n\nDeployment ID                        | Site Name       | Endpoint                                       | Sync | Bandwidth  | ILM Expiry Replication   \n                                     |                 |                                                |      | Per Bucket |                          \n4bc1ff09-2783-4f04-9f07-3f27ed43f66f | minio01         | http://minio01:9000                            |      | N/A        | false                    \n8a3cade1-8ada-4bdd-a7a3-c1c082e568c3 | minio02         | http://minio02:9000                            |      | N/A        | false                    \nec02fcd6-0986-4792-8b15-01e43105eae4 | minio03         | http://minio03:9000                            |      | N/A        | false             \n``` \n\n**Test replicate:**\n\n![Alt Text](expand.png)\n\n\n## (Optinal) Remove a Site from Replication\n\u003e [!NOTE]\n\u003e If the node that needs to be removed crashes or cannot connect. The removal process when executing the \"mc admin replicate remove\" command will take longer (because it can't connect to the node that needs to be removed to clear the Replicate Policy). Please wait until the statement is complete.\n\n```\nSyntax: \n   mc admin replicate rm ALIAS PEER_TO_REMOVE --force\n\n- Replace ALIAS with the alias of any peer site in the replication configuration.\n- Replace PEER_TO_REMOVE with the alias of the peer site to remove.\n- All healthy peers in the site replication configuration update to remove the specified peer automatically.\n- MinIO requires the --force flag to remove the peer from the site replication configuration.\n```\n\n\n**Execution in a different node than the node to be removed (example remove node minio02):**\n```\nroot@minio01:~/minio-deploy# docker ps\nCONTAINER ID   IMAGE                                              COMMAND                  CREATED          STATUS                    PORTS                              NAMES\nb47c3db88b69   quay.io/minio/minio:RELEASE.2025-01-20T14-49-07Z   \"/usr/bin/docker-ent…\"   55 minutes ago   Up 55 minutes (healthy)   0.0.0.0:9000-9001-\u003e9000-9001/tcp   minio-deploy-minio01-1\n```\n```\nroot@minio01:~/minio-deploy# docker exec -it minio-deploy-minio01-1 bash\n```\n```\nbash-5.1# mc admin replicate remove minio01 minio02 --force\nFollowing site(s) [minio02] were removed successfully\n```\n\n**Site replication configuration verify:**\n```\nbash-5.1# mc admin replicate info  minio01\nSiteReplication enabled for:\n\nDeployment ID                        | Site Name       | Endpoint                                       | Sync | Bandwidth  | ILM Expiry Replication   \n                                     |                 |                                                |      | Per Bucket |                          \n4bc1ff09-2783-4f04-9f07-3f27ed43f66f | minio01         | http://minio01:9000                            |      | N/A        | false                    \nec02fcd6-0986-4792-8b15-01e43105eae4 | minio03         | http://minio03:9000                            |      | N/A        | false                    \n```\n```\nbash-5.1# mc admin replicate info  minio03\nSiteReplication enabled for:\n\nDeployment ID                        | Site Name       | Endpoint                                       | Sync | Bandwidth  | ILM Expiry Replication   \n                                     |                 |                                                |      | Per Bucket |                          \n4bc1ff09-2783-4f04-9f07-3f27ed43f66f | minio01         | http://minio01:9000                            |      | N/A        | false                    \nec02fcd6-0986-4792-8b15-01e43105eae4 | minio03         | http://minio03:9000                            |      | N/A        | false                    \n```\n\n**Test replicate (after remove node minio02):**\n\n![Alt Text](remove-node.png)\n\n\n## (Optinal) Some related documents and commands\n- **Document:**\n```\nhttps://min.io/docs/minio/linux/operations/install-deploy-manage/multi-site-replication.html\nhttps://min.io/docs/minio/linux/reference/minio-mc-admin/mc-admin-replicate.html#mc.admin.replicate.update.-mode\nhttps://min.io/docs/minio/linux/reference/minio-mc-admin/mc-admin-trace.html\n```\n\n- **Commands:**\n```\n# mc admin trace --call storage \u003cALIAS\u003e\n\n# mc admin replicate status \u003cALIAS\u003e --all\n\n# mc admin replicate status \u003cALIAS\u003e --bucket \u003cBUCKET NAME\u003e\n\n# mc admin replicate resync \u003cALIAS_SYNC_NODE\u003e \u003cALIAST_NODE_RECEIVE_DATA\u003e \n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvutrandn94%2Fminio-site-replication","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvutrandn94%2Fminio-site-replication","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvutrandn94%2Fminio-site-replication/lists"}