Skip to content

Commit 254eb94

Browse files
committed
update docs
1 parent 0aafd7e commit 254eb94

1 file changed

Lines changed: 174 additions & 18 deletions

File tree

docs/linux/soft/redis-ops.md

Lines changed: 174 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -209,16 +209,9 @@ Redis 3.0 后支持集群模式。
209209

210210
`Redis` 集群一般由 **多个节点** 组成,节点数量至少为 `6` 个,才能保证组成 **完整高可用** 的集群。
211211

212-
<div align="center"><img src="http://dunwu.test.upcdn.net/cs/database/redis/redis-cluster-architecture.png!zp"/></div>
212+
<div align="center"><img src="https://user-gold-cdn.xitu.io/2019/10/10/16db5250b0d1c392?w=1467&h=803&f=png&s=43428"/></div>
213213

214-
理想情况当然是所有节点各自在不同的机器上,首先于资源,本人在部署 Redis 集群时,只得到 3 台服务器。所以,我的基本规划是满足两个条件:
215-
216-
- 每台服务器上部署一个主节点、一个从节点。
217-
- 每个主节点所对应的从节点,必须在另外一台服务器上。
218-
219-
<div align="center"><img src="http://dunwu.test.upcdn.net/cs/database/redis/redis-cluster-example.png!zp"/></div>
220-
221-
> 为集群内 **所有节点** 统一目录,一般划分三个目录:`conf``data``log`,分别存放 **配置****数据****日志** 相关文件。把 `6` 个节点配置统一放在 `conf` 目录下。
214+
理想情况当然是所有节点各自在不同的机器上,首先于资源,本人在部署 Redis 集群时,只得到 3 台服务器。所以,我计划每台服务器部署 2 个 Redis 节点。
222215

223216
### 部署
224217

@@ -232,20 +225,185 @@ Redis 集群节点的安装与单节点服务相同,差异仅在于部署方
232225

233226
分配如下:
234227

235-
| 服务器 | 127.0.0.1 | 127.0.0.2 | 127.0.0.3 |
236-
| ------ | -------------- | -------------- | -------------- |
237-
| 主节点 | 127.0.0.1:6380 | 127.0.0.2:6381 | 127.0.0.3:6382 |
238-
| 从节点 | 127.0.0.1:6382 | 127.0.0.2:6380 | 127.0.0.3:6381 |
228+
| 127.0.0.1 | 127.0.0.2 | 127.0.0.3 |
229+
| -------------- | -------------- | -------------- |
230+
| 127.0.0.1:6381 | 127.0.0.2:6383 | 127.0.0.3:6385 |
231+
| 127.0.0.1:6382 | 127.0.0.2:6384 | 127.0.0.3:6386 |
232+
233+
#### (1)创建节点目录
234+
235+
我个人偏好将软件放在 `/opt` 目录下,在我的机器中,Redis 都安装在 `/opt/redis/redis-5.0.4` 目录下。所以,下面的命令和配置都假设 Redis 安装目录为 `/opt/redis/redis-5.0.4`
236+
237+
确保机器上已经安装了 Redis 后,执行以下命令,创建 Redis 集群节点实例目录:
238+
239+
- 127.0.0.1
240+
241+
```bash
242+
sudo mkdir -p /opt/redis/redis-5.0.4/cluster/6381
243+
sudo mkdir -p /opt/redis/redis-5.0.4/cluster/6382
244+
```
245+
246+
- 127.0.0.2
247+
248+
```bash
249+
sudo mkdir -p /opt/redis/redis-5.0.4/cluster/6383
250+
sudo mkdir -p /opt/redis/redis-5.0.4/cluster/6384
251+
```
252+
253+
- 127.0.0.3
254+
255+
```bash
256+
sudo mkdir -p /opt/redis/redis-5.0.4/cluster/6385
257+
sudo mkdir -p /opt/redis/redis-5.0.4/cluster/6386
258+
```
259+
260+
261+
#### (2)集群节点实例配置
262+
263+
每个实例目录下,新建 `redis.conf` 配置文件。
264+
265+
实例配置模板以 6381 节点为例(其他节点,完全替换配置中的端口号 6381 即可),如下:
266+
267+
```
268+
# 端口号
269+
port 6381
270+
# 绑定的主机端口(0.0.0.0 表示允许远程访问)
271+
bind 0.0.0.0
272+
# 以守护进程方式启动
273+
daemonize yes
274+
275+
# 开启集群模式
276+
cluster-enabled yes
277+
# 集群的配置,配置文件首次启动自动生成
278+
cluster-config-file /opt/redis/redis-5.0.4/cluster/6381/6381.conf
279+
# 请求超时时间,设置 10 秒
280+
cluster-node-timeout 10000
281+
282+
# 开启 AOF 持久化
283+
appendonly yes
284+
# 数据存放目录
285+
dir /opt/redis/redis-5.0.4/cluster/6381
286+
# 进程文件
287+
pidfile /var/run/redis-cluster/redis-6381.pid
288+
# 日志文件
289+
logfile /opt/redis/redis-5.0.4/cluster/6381/6381.log
290+
```
291+
292+
#### (3)启动 Redis 节点
293+
294+
Redis 的 utils/create-cluster 目录下自带了一个名为 create-cluster 的脚本工具,可以利用它来新建、启动、停止、重启 Redis 节点。
295+
296+
脚本中有几个关键参数:
297+
298+
- `PORT`=30000 - 初始端口号
299+
- `TIMEOUT`=2000 - 超时时间
300+
- `NODES`=6 - 节点数
301+
- `REPLICAS`=1 - 备份数
302+
303+
脚本中的每个命令项会根据初始端口号,以及设置的节点数,遍历的去执行操作。
304+
305+
由于前面的规划中,节点端口是从 6381 ~ 6386,所以需要将 PORT 变量设为 6380。
306+
307+
脚本中启动每个 Redis 节点是通过指定命令行参数来配置属性。所以,我们需要改一下:
308+
309+
```bash
310+
if [ "$1" == "start" ]
311+
then
312+
while [ $((PORT < ENDPORT)) != "0" ]; do
313+
PORT=$((PORT+1))
314+
echo "Starting $PORT"
315+
/opt/redis/redis-5.0.4/src/redis-server /opt/redis/redis-5.0.4/cluster/${PORT}/redis.conf
316+
done
317+
exit 0
318+
fi
319+
```
320+
321+
好了,在每台服务器上,都执行 `./create-cluster start` 来启动节点。
322+
323+
然后,通过 ps 命令来确认 Redis 进程是否已经工作:
324+
325+
```
326+
$ ps -ef | grep redis
327+
root 12036 1 12 16:26 ? 00:08:28 /opt/redis/redis-5.0.4/src/redis-server 0.0.0.0:6381 [cluster]
328+
root 12038 1 0 16:26 ? 00:00:03 /opt/redis/redis-5.0.4/src/redis-server 0.0.0.0:6382 [cluster]
329+
```
330+
331+
#### (4)启动集群
332+
333+
通过 `redis-cli --cluster create` 命令可以自动配置集群,如下:
334+
335+
```bash
336+
$ /opt/redis/redis-5.0.4/src/redis-cli --cluster create 127.0.0.1:6381 127.0.0.1:6382 127.0.0.2:6383 127.0.0.2:6384 127.0.0.3:6385 127.0.0.3:6386 --cluster-replicas 1
337+
```
338+
339+
如果启动成功,可以看到如下信息:
340+
341+
```
342+
>>> Performing hash slots allocation on 6 nodes...
343+
Master[0] -> Slots 0 - 5460
344+
Master[1] -> Slots 5461 - 10922
345+
Master[2] -> Slots 10923 - 16383
346+
Adding replica 127.0.0.2:6384 to 127.0.0.1:6381
347+
Adding replica 127.0.0.3:6386 to 127.0.0.2:6383
348+
Adding replica 127.0.0.1:6382 to 127.0.0.3:6385
349+
M: 75527b790e46530ea271a5b78f9e0fd9030f68e0 127.0.0.1:6381
350+
slots:[0-5460] (5461 slots) master
351+
S: 031dd0fd5ad90fa26fcf45d49ad906d063611a6d 127.0.0.1:6382
352+
replicates 53012ebdd25005840da9ecbe07d937296a264206
353+
M: 0cfbceec272b6ff70e1dfb5c5346a5cb2c20c884 127.0.0.2:6383
354+
slots:[5461-10922] (5462 slots) master
355+
S: 016ae9624202891cc6f2b480ff0634de478197fb 127.0.0.2:6384
356+
replicates 75527b790e46530ea271a5b78f9e0fd9030f68e0
357+
M: 53012ebdd25005840da9ecbe07d937296a264206 127.0.0.3:6385
358+
slots:[10923-16383] (5461 slots) master
359+
S: b6d70f2ed78922b1dcb7967ebe1d05ad9157fca8 127.0.0.3:6386
360+
replicates 0cfbceec272b6ff70e1dfb5c5346a5cb2c20c884
361+
Can I set the above configuration? (type 'yes' to accept): yes
362+
>>> Nodes configuration updated
363+
>>> Assign a different config epoch to each node
364+
>>> Sending CLUSTER MEET messages to join the cluster
365+
Waiting for the cluster to join
366+
....
367+
>>> Performing Cluster Check (using node 127.0.0.1:6381)
368+
M: 75527b790e46530ea271a5b78f9e0fd9030f68e0 127.0.0.1:6381
369+
slots:[0-5460] (5461 slots) master
370+
1 additional replica(s)
371+
M: 0cfbceec272b6ff70e1dfb5c5346a5cb2c20c884 127.0.0.2:6383
372+
slots:[5461-10922] (5462 slots) master
373+
1 additional replica(s)
374+
S: 016ae9624202891cc6f2b480ff0634de478197fb 127.0.0.2:6384
375+
slots: (0 slots) slave
376+
replicates 75527b790e46530ea271a5b78f9e0fd9030f68e0
377+
M: 53012ebdd25005840da9ecbe07d937296a264206 127.0.0.3:6385
378+
slots:[10923-16383] (5461 slots) master
379+
1 additional replica(s)
380+
S: 031dd0fd5ad90fa26fcf45d49ad906d063611a6d 127.0.0.1:6382
381+
slots: (0 slots) slave
382+
replicates 53012ebdd25005840da9ecbe07d937296a264206
383+
S: b6d70f2ed78922b1dcb7967ebe1d05ad9157fca8 127.0.0.3:6386
384+
slots: (0 slots) slave
385+
replicates 0cfbceec272b6ff70e1dfb5c5346a5cb2c20c884
386+
[OK] All nodes agree about slots configuration.
387+
>>> Check for open slots...
388+
>>> Check slots coverage...
389+
[OK] All 16384 slots covered.
390+
```
391+
392+
#### (5)日常维护操作
393+
394+
- 关闭集群 - `./create-cluster stop`
395+
- 检查集群是否健康(指定任意节点即可):`./redis-cli --cluster check <ip:port>`
396+
- 尝试修复集群节点:`./redis-cli --cluster fix <ip:port>`
239397

240398
## Redis 命令
241399

242400
> 命令详细用法,请参考 [**Redis 命令官方文档**](https://redis.io/commands)
243401
>
244402
> 搬迁两张 cheat sheet 图,原址:https://www.cheatography.com/tasjaevan/cheat-sheets/redis/
245403
246-
<div align="center"><img src="http://dunwu.test.upcdn.net/cs/database/redis/redis-cheat-sheets-01.png!zp"/></div>
404+
<div align="center"><img src="https://user-gold-cdn.xitu.io/2019/10/10/16db5250b0b8ea57?w=2230&h=2914&f=png&s=246433"/></div>
247405

248-
<div align="center"><img src="http://dunwu.test.upcdn.net/cs/database/redis/redis-cheat-sheets-02.png!zp"/></div>
406+
<div align="center"><img src="https://user-gold-cdn.xitu.io/2019/10/10/16db5250b0e9ba3c?w=2229&h=2890&f=png&s=192997"/></div>
249407

250408
## 压力测试
251409

@@ -284,9 +442,7 @@ GET: 508388.41 requests per second
284442

285443
## 脚本
286444

287-
以上两种安装方式,我都写了脚本去执行:
288-
289-
| [安装脚本](https://github.com/dunwu/linux-tutorial/tree/master/codes/linux/soft) |
445+
如果想傻瓜式安装一个 Redis 单节点服务,可以使用我的 [安装脚本](https://github.com/dunwu/linux-tutorial/tree/master/codes/linux/soft#redis-%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE)
290446

291447
## 参考资料
292448

0 commit comments

Comments
 (0)