-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
186 lines (145 loc) · 5.67 KB
/
Copy pathMakefile
File metadata and controls
186 lines (145 loc) · 5.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
ifneq (,$(wildcard .env))
include .env
endif
export REDIS_PASSWORD
export GRAFANA_ADMIN_PASSWORD
.PHONY: format validate commander commander-ha commander-clt ha ha-cli ha-ready ha-scan ha-master ha-slave ha-test-failover ha-test ha-bench ha-backup ha-health clt clt-cli clt-init clt-ready clt-monitor clt-scan clt-test clt-bench clt-rollback clt-scale clt-health clean ci
HA_COMPOSE_FILE = docker-compose.ha.yml
CLT_COMPOSE_FILE = docker-compose.cluster.yml
TOOL_COMPOSE_FILE = docker-compose.tool.yml
CLT_BENCH_DIR=benchmark-results
CLT_BENCH_IMAGE=thuongtruong1009/reluster-bench:latest
REDIS_NETWORK=redisnet
COMMANDER_HA_HOSTS = master:redis-master:6379:0:$(REDIS_PASSWORD),slave1:slave_1:6379:0:$(REDIS_PASSWORD),slave2:slave_2:6379:0:$(REDIS_PASSWORD),slave3:slave_3:6379:0:$(REDIS_PASSWORD)
COMMANDER_CLUSTER_HOSTS = node1:node-1:6379:0:$(REDIS_PASSWORD),node2:node-2:6379:0:$(REDIS_PASSWORD),node3:node-3:6379:0:$(REDIS_PASSWORD),node4:node-4:6379:0:$(REDIS_PASSWORD),node5:node-5:6379:0:$(REDIS_PASSWORD),node6:node-6:6379:0:$(REDIS_PASSWORD)
LOG_DIR=monitor-logs
format:
@dos2unix Makefile
@sed -i 's/\r$$//' Makefile configs/ha/sentinel/sentinel.conf configs/ha/replica/slave.conf configs/ha/replica/master.conf configs/cluster/node.conf
validate:
docker compose -f $(HA_COMPOSE_FILE) config --quiet
docker compose -f $(CLT_COMPOSE_FILE) config --quiet
chmod +x scripts/ha.sh
bash scripts/ha.sh validate
chmod +x scripts/clt.sh
bash scripts/clt.sh validate
ha:
docker compose -f $(HA_COMPOSE_FILE) up -d --force-recreate
ha-cli:
docker exec -it -e REDISCLI_AUTH="$${REDIS_PASSWORD}" redis-master redis-cli -p 6379
ha-ready:
chmod +x scripts/ha.sh
bash scripts/ha.sh ready
ha-scan:
chmod +x scripts/ha.sh
bash scripts/ha.sh scan
ha-master:
docker exec -it sentinel_1 redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster
ha-slave:
docker exec -it -e REDISCLI_AUTH="$${REDIS_PASSWORD}" slave_1 redis-cli info replication
ha-test-failover:
chmod +x tests/ha-failover.sh
bash ./tests/ha-failover.sh
ha-test:
chmod +x tests/ha.sh
bash ./tests/ha.sh
# current only support on CI
ha-bench:
chmod +x tests/ha-bench.sh
MASTER_PASS="$${REDIS_PASSWORD}" bash tests/ha-bench.sh all
ha-backup:
chmod +x scripts/ha-backup.sh
bash ./scripts/ha-backup.sh
ha-health:
@echo "Flags: --basic, --full --report, --load-test, --metrics-only, --help"
chmod +x scripts/ha-health.sh
bash ./scripts/ha-health.sh --basic
clt:
docker compose -f $(CLT_COMPOSE_FILE) up -d --build --force-recreate node-1 node-2 node-3 node-4 node-5 node-6
clt-cli:
docker exec -it $$(docker ps -qf "name=node-1") redis-cli -c -p 6379 -a $(REDIS_PASSWORD)
clt-init:
chmod +x scripts/clt-scale.sh
CLUSTER_PASS=$(REDIS_PASSWORD) bash ./scripts/clt-scale.sh init
clt-ready:
chmod +x scripts/clt.sh
CLUSTER_PASS=$(REDIS_PASSWORD) bash ./scripts/clt.sh ready
clt-monitor:
chmod +x scripts/clt.sh
CLUSTER_PASS=$(REDIS_PASSWORD) bash ./scripts/clt.sh status
CLUSTER_PASS=$(REDIS_PASSWORD) bash ./scripts/clt.sh monitor
clt-scan:
chmod +x scripts/clt.sh
CLUSTER_PASS=$(REDIS_PASSWORD) bash scripts/clt.sh scan
clt-test:
chmod +x tests/clt.sh
bash ./tests/clt.sh
clt-bench:
mkdir -p $(CLT_BENCH_DIR)
chmod 777 $(CLT_BENCH_DIR)
docker build -f configs/cluster/Dockerfile.bench -t $(CLT_BENCH_IMAGE) .
docker run --rm \
--network $(REDIS_NETWORK) \
-v $$(pwd)/$(CLT_BENCH_DIR):/results \
-e REDIS_PASSWORD=$${REDIS_PASSWORD} \
-e REDIS_HOST=node-1 \
$(CLT_BENCH_IMAGE)
clt-rollback:
chmod +x scripts/clt-rollback.sh
CLUSTER_PASS=$(REDIS_PASSWORD) bash ./scripts/clt-rollback.sh
clt-scale:
docker-compose -f $(CLT_COMPOSE_FILE) up -d node-7
chmod +x scripts/clt-scale.sh
CLUSTER_PASS=$(REDIS_PASSWORD) bash ./scripts/clt-scale.sh add node-7
CLUSTER_PASS=$(REDIS_PASSWORD) bash ./scripts/clt-scale.sh remove node-6
CLUSTER_PASS=$(REDIS_PASSWORD) bash ./scripts/clt-scale.sh rebalance
clt-health:
chmod +x scripts/clt-health.sh
set +e
bash ./scripts/clt-health.sh --report
clean:
docker compose -f $(CLT_COMPOSE_FILE) down -v
docker compose -f $(HA_COMPOSE_FILE) down -v
docker compose -f $(TOOL_COMPOSE_FILE) down -v
docker volume prune -f
rm -rf $(CLT_BENCH_DIR)
rm -rf $(LOG_DIR)
# Flags: -j <job_name>
ci:
act -W .github/workflows/ci.yml --rm --pull=false --secret DOCKER_USERNAME= --secret DOCKER_PASSWORD=
commander:
@if [ -z "$$REDIS_PASSWORD" ]; then \
echo "❌ REDIS_PASSWORD is not set."; \
exit 1; \
fi
@if [ -z "$$COMMANDER_REDIS_HOSTS" ]; then \
echo "❌ COMMANDER_REDIS_HOSTS is not set."; \
exit 1; \
fi
docker compose -f $(TOOL_COMPOSE_FILE) up -d --force-recreate commander
commander-ha: export COMMANDER_REDIS_HOSTS = $(COMMANDER_HA_HOSTS)
commander-ha: commander
commander-clt: export COMMANDER_REDIS_HOSTS = $(COMMANDER_CLUSTER_HOSTS)
commander-clt: commander
monitor:
@if [ -z "$$GRAFANA_ADMIN_PASSWORD" ]; then \
echo "❌ GRAFANA_ADMIN_PASSWORD is not set."; \
exit 1; \
fi
docker compose -f $(TOOL_COMPOSE_FILE) up -d --force-recreate exporter prometheus grafana
monitor-health:
chmod +x scripts/monitor.sh
LOG_DIR=$(LOG_DIR) bash ./scripts/monitor.sh
demo-ping:
# docker compose -f docker-compose.cluster.dev.yml up -d --build --force-recreate node-1 node-2 node-3 node-4 node-5 node-6
# docker exec -it node-1 redis-cli -a $(REDIS_PASSWORD) --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1 --cluster-yes
# docker run --rm -it --network host redis:7.2 \
# redis-cli -a "$$REDIS_PASSWORD" --cluster create \
# 127.0.0.1:6379 \
# 127.0.0.1:6380 \
# 127.0.0.1:6381 \
# 127.0.0.1:6382 \
# 127.0.0.1:6383 \
# 127.0.0.1:6384 \
# --cluster-replicas 1 --cluster-yes
cd examples/ping && npm run dev