{"id":31376533,"url":"https://github.com/thuongtruong109/reluster","last_synced_at":"2026-05-05T19:32:26.115Z","repository":{"id":316228494,"uuid":"1060765135","full_name":"thuongtruong109/reluster","owner":"thuongtruong109","description":"🚦 Minimal Redis HA Cluster simulator for Replication and Sharding ","archived":false,"fork":false,"pushed_at":"2025-10-01T11:37:36.000Z","size":22208,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-01T01:56:21.835Z","etag":null,"topics":["cluster","container","devops","docker","docker-compose","high-availability","redis","redis-cluster","redis-sentinel","redis-slave","replica-set","replication","sentinel"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thuongtruong109.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","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},"funding":{"github":"thuongtruong109","buy_me_a_coffee":"thuongtruong","custom":["https://paypal.me/thuongtruong1009","https://nhantien.momo.vn/0917085937"]}},"created_at":"2025-09-20T14:47:50.000Z","updated_at":"2025-10-01T11:37:40.000Z","dependencies_parsed_at":"2025-09-25T11:24:16.242Z","dependency_job_id":"0986a8d2-daef-41ec-8e35-b08a1682673f","html_url":"https://github.com/thuongtruong109/reluster","commit_stats":null,"previous_names":["thuongtruong109/redis-cluster","thuongtruong109/reluster"],"tags_count":1,"template":true,"template_full_name":null,"purl":"pkg:github/thuongtruong109/reluster","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thuongtruong109%2Freluster","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thuongtruong109%2Freluster/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thuongtruong109%2Freluster/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thuongtruong109%2Freluster/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thuongtruong109","download_url":"https://codeload.github.com/thuongtruong109/reluster/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thuongtruong109%2Freluster/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32664870,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-05T11:29:49.557Z","status":"ssl_error","status_checked_at":"2026-05-05T11:29:48.587Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["cluster","container","devops","docker","docker-compose","high-availability","redis","redis-cluster","redis-sentinel","redis-slave","replica-set","replication","sentinel"],"created_at":"2025-09-28T03:55:28.269Z","updated_at":"2026-05-05T19:32:26.110Z","avatar_url":"https://github.com/thuongtruong109.png","language":"Shell","funding_links":["https://github.com/sponsors/thuongtruong109","https://buymeacoffee.com/thuongtruong","https://paypal.me/thuongtruong1009","https://nhantien.momo.vn/0917085937"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cp\u003e\n    \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/thuongtruong109/redis-cluster/ci.yml?label=CI\u0026logo=github\" alt=\"CI Status\" height=\"28\"/\u003e\n    \u003c!-- \u003cimg src=\"https://img.shields.io/badge/Docker-Compose-brightgreen?logo=docker\u0026logoColor=white\" alt=\"Docker Compose\" height=\"28\"/\u003e --\u003e\n    \u003ca href=\"https://hub.docker.com/r/thuongtruong1009/reluster\" alt=\"Pull count\"\u003e \u003cimg src=\"https://img.shields.io/docker/pulls/thuongtruong1009/reluster?label=Image%20pull\u0026logo=docker\u0026logoColor=white\u0026color=brightgreen\" alt=\"Pull count\" height=\"28\"/\u003e \u003c/a\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Cluster-Sharding-brightgreen?logo=redis\u0026logoColor=white\" alt=\"Redis\" height=\"28\"/\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Sentinel-HA-brightgreen?logo=redis\u0026logoColor=white\" alt=\"Sentinel\" height=\"28\"/\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Commander-UI-brightgreen?logo=redis\u0026logoColor=white\" alt=\"Commander\" height=\"28\"/\u003e\n    \u003ca href=\"https://opensource.org/licenses/Apache-2.0\" alt=\"License\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-Apache%202.0-brightgreen?logo=apache\u0026logoColor=white\" alt=\"License\" height=\"28\"/\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\n   \u003cimg src=\"./.github/assets/banner.webp\" alt=\"Redis Cluster Banner\" /\u003e\n\n   \u003cp\u003eA complete, ready-to-run Redis Sentinel \u0026 Cluster playground with Docker Compose for \u003cbr/\u003e learning, testing, and deploying Redis in real-world scenarios.\u003c/p\u003e\n\u003c/div\u003e\n\n## 📝 Overview\n\nThis project provides a **hands-on Redis lab** that covers both **Sentinel** and **Cluster** modes:\n\n- ⚡ **Redis Sentinel** → High Availability \u0026 Automatic Failover\n- 📦 **Redis Cluster** → Sharding + High Availability\n\n🎯 **Goal**: Help developers, DevOps, and students **experiment, validate, monitor, and integrate Redis** into production-like environments.\n\n## ✨ Features\n\n- ✔ Quick Bootstrap – Start Sentinel \u0026 Cluster in seconds with Docker Compose\n- ✔ Automation Scripts – Health checks, failover tests, rollback, backups, slot rebalancing, integrity, and security scan\n- ✔ CI/CD Ready – GitHub Actions/GitLab CI for automated testing \u0026 deployment\n- ✔ Configurable – Easily adjust number of nodes, replicas, memory limits, persistence\n- ✔ Comprehensive Docs – Setup guides, architecture explanations, usage examples\n- ✔ Realistic Workloads – Simulate traffic with redis-benchmark and custom scripts\n- ✔ Data Persistence – RDB/AOF configurations for durability testing\n- ✔ Backup \u0026 Restore – Automated backup scripts and restore procedures\n- ✔ Failover Testing – Simulate node failures and observe automatic recovery\n- ✔ Scaling – Add/remove nodes and reshard data with minimal downtime\n- ✔ Monitoring Stack - Redis-Commander, Redis-Exporter, Prometheus, Grafana for real-time insights\n\n\u003c!-- - ✔ Security – Basic auth, TLS setup examples --\u003e\n\u003c!-- - ✔ Multi-Platform – Works on Linux, macOS, Windows (WSL2/Docker Desktop) --\u003e\n\u003c!-- - ✔ Web UIs – Redis Commander, RedisInsight for easy data management \u0026 monitoring --\u003e\n\u003c!-- - Alerts (Slack/Email/Telegram)\n- ✔ Real-World Demos – Integration with Node.js, Python, Java, Go, etc. (caching, pub/sub, queues, sessions)\n- ✔ Advanced Guides – Kubernetes (Helm, StatefulSet, Operator), Cloud Backup/Restore, TLS/Security --\u003e\n\n## 👤 Who Is This For?\n\n- 👨‍💻 Backend Developers – Learn caching, pub/sub, queues, session storage\n- 🛠️ DevOps / SREs – Practice HA, failover recovery, monitoring, scaling\n- 🎓 Students / Learners – Experiment with Redis concepts in a safe sandbox\n- 🏗️ System Architects – Validate Redis as a distributed system building block\n\n## 🏗️ Architecture\n\n### 🔹 Sentinel Mode (HA + Replica Failover)\n\n```mermaid\nflowchart TD\n   S1[\"🛰️ Sentinel 1\"]\n   S2[\"🛰️ Sentinel 2\"]\n   S3[\"🛰️ Sentinel 3\"]\n   M[\"🟥 Master (6379)\"]\n   R1[\"🟦 Replica 1 (6380)\"]\n   R2[\"🟦 Replica 2 (6381)\"]\n\n   S1 --\u003e M\n   S2 --\u003e M\n   S3 --\u003e M\n   M --\u003e R1\n   M --\u003e R2\n```\n\n```mermaid\nflowchart LR\n    %% Before failover\n    subgraph Left[\"Before Failover\"]\n        direction TB\n        Sentinel1(Sentinel) --\u003e Master1\n        Sentinel2(Sentinel) --\u003e Master1\n        Sentinel3(Sentinel) --\u003e Master1\n\n        Master1([Master]) --\u003e Slave1([Slave])\n        Master1 --\u003e Slave2([Slave])\n    end\n\n    %% After failover\n    subgraph Right[\"After Failover\"]\n        direction TB\n        Sentinel4(Sentinel) --\u003e NewMaster\n        Sentinel5(Sentinel) --\u003e NewMaster\n        Sentinel6(Sentinel) --\u003e NewMaster\n\n        OldMaster([Master Down]) --\u003e Slave2([Slave])\n        NewMaster([New Master]) --\u003e Slave2\n    end\n\n    Left --\u003e Right\n```\n\n### 🔹 Cluster Mode (Sharding + Replication)\n\n```mermaid\nflowchart LR\n   M1[\"🟥 Master #1 (Slots 0–5460)\"] --\u003e R1[\"🟦 Replica #1\"]\n   M2[\"🟥 Master #2 (Slots 5461–10922)\"] --\u003e R2[\"🟦 Replica #2\"]\n   M3[\"🟥 Master #3 (Slots 10923–16383)\"] --\u003e R3[\"🟦 Replica #3\"]\n```\n\n## 🤝 Contributing\n\nWe welcome you to contribute and help improve Reluster 💚\n\nFork → Hack → Test → PR. Here are a few ways you can get involved:\n\n- **🐛 Reporting Bugs:** If you come across any bugs or issues, please check out the [reporting bugs guide](https://github.com/thuongtruong109/reluster/issues) to learn how to submit a bug report.\n- **✨ Suggestions:** Have ideas to enhance features? We'd love to hear them! Check out the [contribution guide](.github/CONTRIBUTING.md) to share your suggestions.\n- **❓ Questions:** If you have questions or need assistance, open [discussions](https://github.com/thuongtruong109/reluster/discussions) or join our to connect with other users and contributors.\n\n## 📝 License\n\nDistributed under the [Apache 2.0](LICENSE) license. Copyright (c) 2025 Thuong Truong.\n\n\u003c!-- https://www.freecodecamp.org/news/github-super-linter/ --\u003e\n\u003c!-- https://github.com/ChickenBenny/redis-cluster-docker --\u003e\n\u003c!-- https://github.com/ahmed-226/redis-monitor-dashboard --\u003e\n\u003c!-- https://medium.com/@jielim36/basic-docker-compose-and-build-a-redis-cluster-with-docker-compose-0313f063afb6 --\u003e\n\u003c!-- https://dev.to/hedgehog/set-up-redis-diskless-replication-359 --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthuongtruong109%2Freluster","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthuongtruong109%2Freluster","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthuongtruong109%2Freluster/lists"}