این پروژه یک خوشه Redis با یک Master و دو Replica را با استفاده از Docker Compose راهاندازی میکند.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Redis Master │ │ Redis Replica1 │ │ Redis Replica2 │
│ Port: 6379 │◄───┤ Port: 6380 │ │ Port: 6381 │
│ │ │ │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
└───────────────────────┼───────────────────────┘
│
┌─────────────────────────────────────────────────┐
│ Sentinel Cluster │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Sentinel 1 │ │ Sentinel 2 │ │ Sentinel 3 │ │
│ │ Port: 26379 │ │ Port: 26380 │ │ Port: 26381 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────┘
# اجرای اسکریپت راهاندازی (راهاندازی دستی برای Windows توصیه میشود)
docker-compose up -d# اجرای اسکریپت راهاندازی
chmod +x start-redis-cluster.sh
./start-redis-cluster.sh# راهاندازی تمام سرویسها
docker-compose up -d
# بررسی وضعیت سرویسها
docker-compose ps
# مشاهده لاگها
docker-compose logs -f- Redis Master: 6379
- Redis Replica 1: 6380
- Redis Replica 2: 6381
- Redis Sentinel 1: 26379
- Redis Sentinel 2: 26380
- Redis Sentinel 3: 26381
- RedisInsight: 8001 (رابط وب برای مدیریت Redis)
- Master:
redis_master_password_2024(قابل تنظیم از طریق Docker secrets) - Replicas:
redis_replica_password_2024(قابل تنظیم از طریق Docker secrets) - Sentinels:
redis_sentinel_password_2024(قابل تنظیم از طریق Docker secrets)
config/redis-master.conf- پیکربندی Masterconfig/redis-replica-1.conf- پیکربندی Replica 1config/redis-replica-2.conf- پیکربندی Replica 2config/redis-sentinel-1.conf- پیکربندی Sentinel 1config/redis-sentinel-2.conf- پیکربندی Sentinel 2config/redis-sentinel-3.conf- پیکربندی Sentinel 3
scripts/init-redis-master.sh- اسکریپت راهاندازی Masterscripts/init-redis-replica.sh- اسکریپت راهاندازی Replicascripts/init-redis-sentinel.sh- اسکریپت راهاندازی Sentinel
secrets/redis_master_password- فایل رمز Mastersecrets/redis_sentinel_password- فایل رمز Sentinel
- رمزهای عبور در فایلهای Docker secrets ذخیره میشوند
- عدم وجود رمزهای عبور سختکد شده در پیکربندی
- مدیریت امن رمزهای عبور مطابق با بهترین روشهای Docker
- امکان تغییر رمزهای عبور بدون بازسازی کانتینرها
- تمام نودها با رمزهای عبور قوی محافظت شدهاند
- رمزهای عبور جداگانه برای Master و Replicas
- حالت محافظت شده فعال
- بارگذاری پویای رمزهای عبور از secrets
- شبکه اختصاصی برای Redis (
redis-network) - محدودیت دسترسی به پورتهای داخلی با IP های ثابت
- شبکه bridge برای ارتباط امن بین کانتینرها
- زیرشبکه جدا شده (192.168.55.0/24)
- AOF (Append Only File) فعال
- RDB snapshots منظم
- Volume های persistent برای ذخیره دادهها
- جداسازی دایرکتوری داده برای هر نود
- سه نود Sentinel برای تصمیمگیری مبتنی بر quorum
- قابلیت failover خودکار
- مانیتورینگ Master و بررسی سلامت
- Service discovery برای اپلیکیشنها
- تنظیمات timeout و down-after-milliseconds
- بررسی خودکار سلامت نودها
- راهاندازی خودکار در صورت خرابی
- وابستگیهای صحیح بین سرویسها
- بررسیهای سلامت آگاه از رمز عبور با استفاده از Docker secrets
- رابط مدیریت Redis مبتنی بر وب مدرن
- دسترسی از طریق http://localhost:8001
- اتصالات پایگاه داده از پیش پیکربندی شده
- مانیتورینگ و مدیریت بلادرنگ
- رابط پرسوجو و تحلیل عملکرد
# اجرای تستهای Redis cluster
python3 test-redis-cluster.py
# اجرای تستهای Sentinel cluster
python3 test-sentinel-simple.py
# اجرای نمایش failover
./demo-sentinel-failover.shمجموعه تستها شامل:
- ✅ تست اتصال
- ✅ بررسی وضعیت replication
- ✅ تست عملیات خواندن/نوشتن
- ✅ تأیید رفتار read-only در replicas
- ✅ اتصال و مانیتورینگ Sentinel
- ✅ کشف Master/Slave توسط Sentinel
- ✅ ارتباط بین Sentinel ها
# اجرای نمایش failover Sentinel
./demo-sentinel-failover.sh
# تست عملکرد Redis cluster
python3 test-redis-cluster.py
# تست مانیتورینگ و HA Sentinel
python3 test-sentinel-simple.py# راهاندازی
docker-compose up -d
# توقف
docker-compose down
# راهاندازی مجدد
docker-compose restart
# مشاهده وضعیت
docker-compose ps
# مشاهده لاگها
docker-compose logs -f [service-name]# اتصال به Master
docker exec -it redis-master redis-cli -a redis_master_password_2024
# اتصال به Replica 1
docker exec -it redis-replica-1 redis-cli -a redis_replica_password_2024
# اتصال به Replica 2
docker exec -it redis-replica-2 redis-cli -a redis_replica_password_2024
# اتصال به Sentinel 1
docker exec -it redis-sentinel-1 redis-cli -p 26379 -a redis_sentinel_password_2024
# اتصال به Sentinel 2
docker exec -it redis-sentinel-2 redis-cli -p 26379 -a redis_sentinel_password_2024
# اتصال به Sentinel 3
docker exec -it redis-sentinel-3 redis-cli -p 26379 -a redis_sentinel_password_2024# اتصال به Master از host
redis-cli -h localhost -p 6379 -a redis_master_password_2024
# اتصال به Replica 1 از host
redis-cli -h localhost -p 6380 -a redis_replica_password_2024
# اتصال به Replica 2 از host
redis-cli -h localhost -p 6381 -a redis_replica_password_2024
# اتصال به Sentinel 1 از host
redis-cli -h localhost -p 26379 -a redis_sentinel_password_2024
# اتصال به Sentinel 2 از host
redis-cli -h localhost -p 26380 -a redis_sentinel_password_2024
# اتصال به Sentinel 3 از host
redis-cli -h localhost -p 26381 -a redis_sentinel_password_2024# بررسی وضعیت Master
docker exec redis-master redis-cli -a redis_master_password_2024 info replication
# بررسی وضعیت Replicas
docker exec redis-replica-1 redis-cli -a redis_replica_password_2024 info replication
docker exec redis-replica-2 redis-cli -a redis_replica_password_2024 info replication
# بررسی وضعیت مانیتورینگ Sentinel
docker exec redis-sentinel-1 redis-cli -p 26379 -a redis_sentinel_password_2024 sentinel masters
# بررسی slaves مانیتور شده توسط Sentinel
docker exec redis-sentinel-1 redis-cli -p 26379 -a redis_sentinel_password_2024 sentinel slaves mymaster
# بررسی سایر Sentinel ها در cluster
docker exec redis-sentinel-1 redis-cli -p 26379 -a redis_sentinel_password_2024 sentinel sentinels mymaster# تست نوشتن در Master
docker exec redis-master redis-cli -a redis_master_password_2024 set test_key "Hello Redis"
# تست خواندن از Replica 1
docker exec redis-replica-1 redis-cli -a redis_replica_password_2024 get test_key
# تست خواندن از Replica 2
docker exec redis-replica-2 redis-cli -a redis_replica_password_2024 get test_key
# دریافت Master فعلی از طریق Sentinel
docker exec redis-sentinel-1 redis-cli -p 26379 -a redis_sentinel_password_2024 sentinel get-master-addr-by-name mymaster
# بررسی اطلاعات Sentinel
docker exec redis-sentinel-1 redis-cli -p 26379 -a redis_sentinel_password_2024 info sentinel# بررسی لاگها
docker-compose logs redis-master
docker-compose logs redis-replica-1
docker-compose logs redis-replica-2# بررسی شبکه
docker network ls
docker network inspect test-docker_redis-network
# بررسی اتصال
docker exec redis-replica-1 ping redis-master# تست اتصال با رمز عبور
docker exec redis-master redis-cli -a redis_master_password_2024 ping# بررسی استفاده از پورتها
netstat -tulpn | grep :6379
netstat -tulpn | grep :6380
netstat -tulpn | grep :6381
netstat -tulpn | grep :26379
netstat -tulpn | grep :26380
netstat -tulpn | grep :26381# بررسی لاگهای Sentinel
docker-compose logs redis-sentinel-1
docker-compose logs redis-sentinel-2
docker-compose logs redis-sentinel-3
# تست اتصال Sentinel
docker exec redis-sentinel-1 redis-cli -p 26379 -a redis_sentinel_password_2024 ping
# بررسی پیکربندی Sentinel
docker exec redis-sentinel-1 redis-cli -p 26379 -a redis_sentinel_password_2024 sentinel masters# مشاهده لاگهای زنده
docker-compose logs -f
# مشاهده لاگهای خاص
docker-compose logs -f redis-master
docker-compose logs -f redis-replica-1
docker-compose logs -f redis-sentinel-1maxmemory: 512MB برای هر نودmaxmemory-policy: allkeys-lru
repl-backlog-size: 1MBrepl-timeout: 60 ثانیهrepl-ping-replica-period: 10 ثانیه
- AOF فعال با
appendfsync everysec - RDB snapshots منظم
auto-aof-rewrite-percentage: 100%
- تغییر رمزهای عبور: رمزهای پیشفرض را در محیط تولید تغییر دهید
- فایروال: دسترسی به پورتها را محدود کنید
- SSL/TLS: برای اتصالات خارجی از SSL استفاده کنید
- مانیتورینگ: لاگها و عملکرد را به طور منظم بررسی کنید
پروژه شامل مجموعه تستهای جامع و اسکریپتهای نمایشی است که موارد زیر را تأیید میکند:
- تست اتصال: بررسی دسترسی به تمام نودها
- وضعیت Replication: تأیید روابط master-replica
- عملیات داده: تست عملیات خواندن/نوشتن و replication
- امنیت: تأیید رفتار read-only در replicas
- اتصال Sentinel: تأیید دسترسی به تمام نودهای Sentinel
- مانیتورینگ Master: تأیید مانیتورینگ Master توسط Sentinel
- مانیتورینگ Slave: تأیید کشف Replica ها توسط Sentinel
- ارتباط Cluster: تست ارتباط بین Sentinel ها
- اتصال Master: اطمینان از کارکرد اتصال مستقیم به Master
- نمایش زنده Failover: نمایش فرآیند failover Sentinel در زمان واقعی
- ارتقای Master: نمایش ارتقای replica به master
- بازیابی سرویس: تست بازیابی خودکار سرویس
- مانیتورینگ سلامت: تأیید سلامت cluster در طول failover
اجرای تستها:
# تست عملکرد Redis cluster
python3 test-redis-cluster.py
# یا استفاده از wrapper script (توصیه شده برای Ubuntu 24.04+)
./run-tests.sh test-redis-cluster.py
# تست مانیتورینگ و HA Sentinel
python3 test-sentinel-simple.py
# یا استفاده از wrapper script (توصیه شده برای Ubuntu 24.04+)
./run-tests.sh test-sentinel-simple.py
# اجرای نمایش failover
./demo-sentinel-failover.shtest-docker/
├── config/
│ ├── redis-master.conf # پیکربندی Master
│ ├── redis-replica-1.conf # پیکربندی Replica 1
│ ├── redis-replica-2.conf # پیکربندی Replica 2
│ ├── redis-sentinel-1.conf # پیکربندی Sentinel 1
│ ├── redis-sentinel-2.conf # پیکربندی Sentinel 2
│ └── redis-sentinel-3.conf # پیکربندی Sentinel 3
├── scripts/
│ ├── init-redis-master.sh # اسکریپت راهاندازی Master
│ ├── init-redis-replica.sh # اسکریپت راهاندازی Replica
│ └── init-redis-sentinel.sh # اسکریپت راهاندازی Sentinel
├── secrets/
│ ├── redis_master_password # secret رمز Master
│ └── redis_sentinel_password # secret رمز Sentinel
├── docker-compose.yml # پیکربندی Docker Compose
├── test-redis-cluster.py # مجموعه تستهای Redis cluster
├── test-sentinel-simple.py # مجموعه تستهای Sentinel cluster
├── demo-sentinel-failover.sh # اسکریپت نمایش failover
├── start-redis-cluster.sh # اسکریپت راهاندازی Linux/macOS
├── requirements.txt # وابستگیهای Python
├── redisinsight-config.json # پیکربندی RedisInsight
├── redisinsight-databases.json # تعاریف پایگاه داده RedisInsight
├── README-Docker-Secrets.md # مستندات Docker secrets
├── README.md # مستندات فارسی
└── README-EN.md # مستندات انگلیسی
- Fork کردن repository
- ایجاد شاخه feature
- اعمال تغییرات
- تست کامل
- ارسال pull request
- Redis Documentation
- Docker Compose Documentation
- Docker Secrets Documentation
- Redis Replication
- Redis Sentinel
- Redis Security
- Redis Performance
- RedisInsight Documentation
README-Docker-Secrets.md- راهنمای تفصیلی پیادهسازی Docker secretsSECRETS-IMPLEMENTATION-SUMMARY.md- خلاصه بهبودهای امنیتی
این پروژه open source است و تحت مجوز MIT در دسترس میباشد.