@@ -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