Redis 集群搭建及集群管理工具

news2024/11/25 11:25:02

目录

    • 一、简介
    • 二、架构图
    • 三、搭建集群
      • 3.1、下载
      • 3.2、编译安装
      • 3.3、配置文件修改
      • 3.4、创建集群
    • 四、集群管理工具redis-cli
      • 4.1、查看集群信息
      • 4.2、检查集群
      • 4.3、修复槽错误
      • 4.4、重分片
      • 4.5、负载均衡
      • 4.6、添加节点
      • 4.7、删除节点
      • 4.8、设置超时
      • 4.9、导入数据
      • 4.10、重建集群

一、简介

  本文今天主要是Redis集群相关的知识,Redis集群是从3.0版本开始引入的功能,本文中的版本是5.0.14我们大概讲下集群的搭建,以及集群命令的用法。

二、架构图

  我们来个最简单的集群架构,如下图:
在这里插入图片描述

三、搭建集群

3.1、下载

  我这里是linux一台服务器上搭建的集群,实际中不建议,非常不安全,这里只是演示,我们应该确保每个redis服务在不同的服务器上。

#下载redis-5.0.14
[root@Alian-ECS ~]# wget http://download.redis.io/releases/redis-5.0.14.tar.gz
#解压压缩包
[root@Alian-ECS ~]# tar -zxvf redis-5.0.14.tar.gz
#复制到部署目录
[root@Alian-ECS ~]# cp -r redis-5.0.14 /usr/local
#进入redis的目录
[root@Alian-ECS ~]# cd /usr/local/redis-5.0.14
[root@Alian-ECS redis-5.0.14]# ll
总用量 288
-rw-r--r--  1 root root 127554 27 13:59 00-RELEASENOTES
-rw-r--r--  1 root root     53 27 13:59 BUGS
-rw-r--r--  1 root root   2381 27 13:59 CONTRIBUTING
-rw-r--r--  1 root root   1487 27 13:59 COPYING
drwxr-xr-x  6 root root    192 27 14:01 deps
-rw-r--r--  1 root root     11 27 13:59 INSTALL
-rw-r--r--  1 root root    151 27 13:59 Makefile
-rw-r--r--  1 root root   6888 27 13:59 MANIFESTO
-rw-r--r--  1 root root  20555 27 13:59 README.md
-rw-r--r--  1 root root  63088 27 13:59 redis.conf
-rwxr-xr-x  1 root root    275 27 13:59 runtest
-rwxr-xr-x  1 root root    280 27 13:59 runtest-cluster
-rwxr-xr-x  1 root root    373 27 13:59 runtest-moduleapi
-rwxr-xr-x  1 root root    281 27 13:59 runtest-sentinel
-rw-r--r--  1 root root   9710 27 13:59 sentinel.conf
drwxr-xr-x  3 root root   8192 27 14:13 src
drwxr-xr-x 11 root root    182 27 13:59 tests
drwxr-xr-x  8 root root   4096 27 13:59 utils

3.2、编译安装

  接下里我们进入到src目录,分别执行编译和安装命令,并拷贝编译后的文件

#进入源码目录
[root@Alian-ECS redis-5.0.14]# cd src
#编译(确保linux上安装有gcc)
[root@Alian-ECS src]# make
#编译安装
[root@Alian-ECS src]# make install
#进入到redis目录
[root@Alian-ECS src]# cd /usr/local/redis-5.0.14
#新建目录
[root@Alian-ECS redis-5.0.14]# mkdir bin
#拷贝复制
[root@Alian-ECS redis-5.0.14]# cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel /usr/local/redis-5.0.14/bin
#查看拷贝的文件
[root@Alian-ECS redis-5.0.14]# ll bin
总用量 53300
-rwxr-xr-x 1 root root      735 27 14:28 mkreleasehdr.sh
-rwxr-xr-x 1 root root  6018304 27 14:28 redis-benchmark
-rwxr-xr-x 1 root root 10501736 27 14:28 redis-check-aof
-rwxr-xr-x 1 root root 10501736 27 14:28 redis-check-rdb
-rwxr-xr-x 1 root root  6542120 27 14:28 redis-cli
-rwxr-xr-x 1 root root 10501736 27 14:28 redis-sentinel
-rwxr-xr-x 1 root root 10501736 27 14:28 redis-server

3.3、配置文件修改

  为了简单,我们把端口定义为7001、7002、7003、7004、7005、7006,我们创建6个文件夹

[root@Alian-ECS redis-5.0.14]# mkdir 7001 7002 7003 7004 7005 7006
[root@Alian-ECS redis-5.0.14]# vim redis.conf

修改如下:

  • protected-modeno(关闭保护模式,不然无法同步)
  • port7001(redis服务的端口)
  • daemonizeyes(守护进程)
  • pidfile/usr/local/redis-5.0.14/7001/redis_7001.pid(pid文件)
  • logfile/usr/local/redis-5.0.14/7001/redis_7001.log(日志文件)
  • dir/usr/local/src/redis5.0.0/7001(同步的备份文件目录)
  • appendonlyyes(AOF同步)
  • cluster-enabledyes(开启集群)
  • cluster-config-filenodes-7001.conf(集群配置文件服务自动读写)

  至此,我们一个服务的配置就改好了,我们把它考到之前创建的6个目录中,然后批量修改即可,如下:

[root@Alian-ECS redis-5.0.14]# cp redis.conf 7001
[root@Alian-ECS redis-5.0.14]# cp redis.conf 7002
[root@Alian-ECS redis-5.0.14]# cp redis.conf 7003
[root@Alian-ECS redis-5.0.14]# cp redis.conf 7004
[root@Alian-ECS redis-5.0.14]# cp redis.conf 7005
[root@Alian-ECS redis-5.0.14]# cp redis.conf 7006
#批量修改为对应的服务需要的配置(比如把7001都替换为7002)
[root@Alian-ECS redis-5.0.14]# sed -i 's/7001/7002/g' 7002/redis.conf 
[root@Alian-ECS redis-5.0.14]# sed -i 's/7001/7003/g' 7003/redis.conf 
[root@Alian-ECS redis-5.0.14]# sed -i 's/7001/7004/g' 7004/redis.conf 
[root@Alian-ECS redis-5.0.14]# sed -i 's/7001/7005/g' 7005/redis.conf 
[root@Alian-ECS redis-5.0.14]# sed -i 's/7001/7006/g' 7006/redis.conf 
[root@Alian-ECS redis-5.0.14]# 

然后我们,把这两个服务都启动起来

[root@Alian-ECS redis-5.0.14]# bin/redis-server 7001/redis.conf 
[root@Alian-ECS redis-5.0.14]# bin/redis-server 7002/redis.conf 
[root@Alian-ECS redis-5.0.14]# bin/redis-server 7003/redis.conf 
[root@Alian-ECS redis-5.0.14]# bin/redis-server 7004/redis.conf 
[root@Alian-ECS redis-5.0.14]# bin/redis-server 7005/redis.conf 
[root@Alian-ECS redis-5.0.14]# bin/redis-server 7006/redis.conf 
[root@Alian-ECS redis-5.0.14]# ps -ef|grep redis
root     2979640       1  0 15:48 ?        00:00:00 bin/redis-server 127.0.0.1:7001 [cluster]
root     2980332       1  0 15:49 ?        00:00:00 bin/redis-server 127.0.0.1:7002 [cluster]
root     2980507       1  0 15:49 ?        00:00:00 bin/redis-server 127.0.0.1:7003 [cluster]
root     2980702       1  0 15:49 ?        00:00:00 bin/redis-server 127.0.0.1:7004 [cluster]
root     2980857       1  0 15:49 ?        00:00:00 bin/redis-server 127.0.0.1:7005 [cluster]
root     2980977       1  0 15:49 ?        00:00:00 bin/redis-server 127.0.0.1:7006 [cluster]
root     2981097 2735921  0 15:49 pts/0    00:00:00 grep --color=auto redis

  至此,我们的服务也启动了,不过现在还不是集群模式。

3.4、创建集群

  通过redis-cli命令创建集群

redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 
127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1
  • cluster-replicas 这个参数就是说明副本数,这里是1,也就是每个主节点的从节点数量是1
[root@Alian-ECS bin]# redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:7005 to 127.0.0.1:7001
Adding replica 127.0.0.1:7006 to 127.0.0.1:7002
Adding replica 127.0.0.1:7004 to 127.0.0.1:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 5df6e4e6acefc3045d98f1a3207168e8007f6288 127.0.0.1:7001
   slots:[0-5460] (5461 slots) master
M: fb0383882cfb2b1e219b822d5f3a46cad8ed624e 127.0.0.1:7002
   slots:[5461-10922] (5462 slots) master
M: 48b9419d7e772f71273347dc557a3ef07edb67a9 127.0.0.1:7003
   slots:[10923-16383] (5461 slots) master
S: 4d40e49d2d8602fb335b16c3cf8c425e7317049e 127.0.0.1:7004
   replicates 48b9419d7e772f71273347dc557a3ef07edb67a9
S: 6979395e0eadb9a252ce80f61ed4b3b1ec1cccf0 127.0.0.1:7005
   replicates 5df6e4e6acefc3045d98f1a3207168e8007f6288
S: 4822ef8b239c5f3f00c71cca00f7636ba7fa60e3 127.0.0.1:7006
   replicates fb0383882cfb2b1e219b822d5f3a46cad8ed624e
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join

>>> Performing Cluster Check (using node 127.0.0.1:7001)
M: 5df6e4e6acefc3045d98f1a3207168e8007f6288 127.0.0.1:7001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 4822ef8b239c5f3f00c71cca00f7636ba7fa60e3 127.0.0.1:7006
   slots: (0 slots) slave
   replicates fb0383882cfb2b1e219b822d5f3a46cad8ed624e
S: 6979395e0eadb9a252ce80f61ed4b3b1ec1cccf0 127.0.0.1:7005
   slots: (0 slots) slave
   replicates 5df6e4e6acefc3045d98f1a3207168e8007f6288
M: fb0383882cfb2b1e219b822d5f3a46cad8ed624e 127.0.0.1:7002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 4d40e49d2d8602fb335b16c3cf8c425e7317049e 127.0.0.1:7004
   slots: (0 slots) slave
   replicates 48b9419d7e772f71273347dc557a3ef07edb67a9
M: 48b9419d7e772f71273347dc557a3ef07edb67a9 127.0.0.1:7003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@Alian-ECS bin]# 

  询问是否确认分配slot的方案,我选择yes

四、集群管理工具redis-cli

4.1、查看集群信息

  集群搭建完成后,我们可以通过 cluster 选项的 info 子命令查看集群的相关信息,但是需要提供集群中任意一个节点的地址作为参数。

语法

 redis-cli --cluster info ip:port

使用

[root@Alian-ECS redis-5.0.14]# bin/redis-cli --cluster info 127.0.0.1:7001
127.0.0.1:7001 (5df6e4e6...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:7002 (fb038388...) -> 0 keys | 5462 slots | 1 slaves.
127.0.0.1:7003 (48b9419d...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
[root@Alian-ECS redis-5.0.14]# 

4.2、检查集群

  拥有集群后,我们可以通过 cluster 选项的 check 子命令查看集群 16384 个槽是否全部指派给了主节点,但是需要提供集群中任意一个节点的地址作为参数。

语法

 redis-cli --cluster check ip:port

使用

[root@Alian-ECS redis-5.0.14]# bin/redis-cli --cluster check 127.0.0.1:7001
127.0.0.1:7001 (5df6e4e6...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:7002 (fb038388...) -> 0 keys | 5462 slots | 1 slaves.
127.0.0.1:7003 (48b9419d...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 127.0.0.1:7001)
M: 5df6e4e6acefc3045d98f1a3207168e8007f6288 127.0.0.1:7001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 4822ef8b239c5f3f00c71cca00f7636ba7fa60e3 127.0.0.1:7006
   slots: (0 slots) slave
   replicates fb0383882cfb2b1e219b822d5f3a46cad8ed624e
S: 6979395e0eadb9a252ce80f61ed4b3b1ec1cccf0 127.0.0.1:7005
   slots: (0 slots) slave
   replicates 5df6e4e6acefc3045d98f1a3207168e8007f6288
M: fb0383882cfb2b1e219b822d5f3a46cad8ed624e 127.0.0.1:7002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 4d40e49d2d8602fb335b16c3cf8c425e7317049e 127.0.0.1:7004
   slots: (0 slots) slave
   replicates 48b9419d7e772f71273347dc557a3ef07edb67a9
M: 48b9419d7e772f71273347dc557a3ef07edb67a9 127.0.0.1:7003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@Alian-ECS redis-5.0.14]# 

  比如我们使用 cluster delslots slot [slot] 来撤销对节点槽的指派,则检查就会报错

#撤销对7001节点槽0,1,2,3,4的指派
127.0.0.1:7001> cluster delslots 0 1 2 3 4 5
OK
127.0.0.1:7001> cluster slots
1) 1) (integer) 6
   2) (integer) 5460
   3) 1) "127.0.0.1"
      2) (integer) 7001
      3) "5df6e4e6acefc3045d98f1a3207168e8007f6288"
   4) 1) "127.0.0.1"
      2) (integer) 7005
      3) "6979395e0eadb9a252ce80f61ed4b3b1ec1cccf0"
2) 1) (integer) 5461
   2) (integer) 10922
   3) 1) "127.0.0.1"
      2) (integer) 7002
      3) "fb0383882cfb2b1e219b822d5f3a46cad8ed624e"
   4) 1) "127.0.0.1"
      2) (integer) 7006
      3) "4822ef8b239c5f3f00c71cca00f7636ba7fa60e3"
3) 1) (integer) 10923
   2) (integer) 16383
   3) 1) "127.0.0.1"
      2) (integer) 7003
      3) "48b9419d7e772f71273347dc557a3ef07edb67a9"
   4) 1) "127.0.0.1"
      2) (integer) 7004
      3) "4d40e49d2d8602fb335b16c3cf8c425e7317049e"
127.0.0.1:7001>

  我们再次检查如下

[root@Alian-ECS redis-5.0.14]# bin/redis-cli --cluster check 127.0.0.1:7001
127.0.0.1:7001 (5df6e4e6...) -> 1 keys | 5455 slots | 1 slaves.
127.0.0.1:7002 (fb038388...) -> 1 keys | 5462 slots | 1 slaves.
127.0.0.1:7003 (48b9419d...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 2 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 127.0.0.1:7001)
M: 5df6e4e6acefc3045d98f1a3207168e8007f6288 127.0.0.1:7001
   slots:[6-5460] (5455 slots) master
   1 additional replica(s)
S: 4822ef8b239c5f3f00c71cca00f7636ba7fa60e3 127.0.0.1:7006
   slots: (0 slots) slave
   replicates fb0383882cfb2b1e219b822d5f3a46cad8ed624e
S: 6979395e0eadb9a252ce80f61ed4b3b1ec1cccf0 127.0.0.1:7005
   slots: (0 slots) slave
   replicates 5df6e4e6acefc3045d98f1a3207168e8007f6288
M: fb0383882cfb2b1e219b822d5f3a46cad8ed624e 127.0.0.1:7002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 4d40e49d2d8602fb335b16c3cf8c425e7317049e 127.0.0.1:7004
   slots: (0 slots) slave
   replicates 48b9419d7e772f71273347dc557a3ef07edb67a9
M: 48b9419d7e772f71273347dc557a3ef07edb67a9 127.0.0.1:7003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
[ERR] Nodes don't agree about configuration!
>>> Check for open slots...
>>> Check slots coverage...
[ERR] Not all 16384 slots are covered by nodes.

4.3、修复槽错误

  如果是有槽未分配则可以通过 cluster 选项的 fix 命令去修复,比如上面的检查报错了

语法

 redis-cli --cluster fix ip:port

使用

[root@Alian-ECS redis-5.0.14]# bin/redis-cli --cluster fix 127.0.0.1:7001
127.0.0.1:7001 (5df6e4e6...) -> 1 keys | 5455 slots | 1 slaves.
127.0.0.1:7002 (fb038388...) -> 1 keys | 5462 slots | 1 slaves.
127.0.0.1:7003 (48b9419d...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 2 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 127.0.0.1:7001)
M: 5df6e4e6acefc3045d98f1a3207168e8007f6288 127.0.0.1:7001
   slots:[6-5460] (5455 slots) master
   1 additional replica(s)
S: 4822ef8b239c5f3f00c71cca00f7636ba7fa60e3 127.0.0.1:7006
   slots: (0 slots) slave
   replicates fb0383882cfb2b1e219b822d5f3a46cad8ed624e
S: 6979395e0eadb9a252ce80f61ed4b3b1ec1cccf0 127.0.0.1:7005
   slots: (0 slots) slave
   replicates 5df6e4e6acefc3045d98f1a3207168e8007f6288
M: fb0383882cfb2b1e219b822d5f3a46cad8ed624e 127.0.0.1:7002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 4d40e49d2d8602fb335b16c3cf8c425e7317049e 127.0.0.1:7004
   slots: (0 slots) slave
   replicates 48b9419d7e772f71273347dc557a3ef07edb67a9
M: 48b9419d7e772f71273347dc557a3ef07edb67a9 127.0.0.1:7003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
[ERR] Nodes don't agree about configuration!
>>> Check for open slots...
>>> Check slots coverage...
[ERR] Not all 16384 slots are covered by nodes.

>>> Fixing slots coverage...
List of not covered slots: 
0,1,2,3,4,5

Slot 0 has keys in 0 nodes: 
Slot 1 has keys in 0 nodes: 
Slot 2 has keys in 0 nodes: 
Slot 3 has keys in 0 nodes: 
Slot 4 has keys in 0 nodes: 
Slot 5 has keys in 0 nodes: 
The following uncovered slots have no keys across the cluster:
2, 1, 0, 5, 3, 4
Fix these slots by covering with a random node? (type 'yes' to accept): yes
>>> Covering slot 2 with 127.0.0.1:7003
>>> Covering slot 1 with 127.0.0.1:7003
>>> Covering slot 0 with 127.0.0.1:7003
>>> Covering slot 5 with 127.0.0.1:7003
>>> Covering slot 3 with 127.0.0.1:7003
>>> Covering slot 4 with 127.0.0.1:7003

[root@Alian-ECS redis-5.0.14]#

4.4、重分片

  通过 cluster 选项的 reshard 子命令,用户可以将指定数量的槽从原节点迁移到目标节点

语法

redis-cli --cluster reshard <ip>:<port>
--cluster-from <id>           #源节点的ID
--cluster-to <id>             #目标节点的ID
--cluster-slots <num>         #要迁移的槽的数量
--cluster-yes                 #直接确认
--cluster-timeout <time>      #迁移最大时限
--cluster-pipeline <yes/no>   #是否使用流水线

比如:

[root@Alian-ECS redis-5.0.14]# bin/redis-cli --cluster reshard 127.0.0.1:7001 --cluster-from 48b9419d7e772f71273347dc557a3ef07edb67a9 -- cluster-to 5df6e4e6acefc3045d98f1a3207168e8007f6288 --cluster-slots 5

4.5、负载均衡

  通过 cluster 选项的 rebalance 子命令,用户在有需要时重新分配各个节点的槽数量(相对均匀),从而让各个节点的负载趋于平衡。

语法

redis-cli --cluster rebalance <ip>:<port>

比如:

[root@Alian-ECS redis-5.0.14]# bin/redis-cli --cluster rebalance 127.0.0.1:7001 

4.6、添加节点

  通过 cluster 选项的 add-node 子命令,用户可以把新的节点添加到已有的集群当中,用户需要提供新的节点地址以及集群中某个节点的地址即可。

语法

redis-cli --cluster add-node <new-host>:<port> <existing-host>:<port>

上面添加的就是主节点,如果希望添加的是从节点,则添加如下参数

  • –cluster-slave
  • –cluster-master-id <id>

–cluster-slave表示是从节点,–cluster-master-id表示设置从节点将要复制的主节点的。

4.7、删除节点

  当用户不再要集群中的某个节点的时候,可以通过 cluster 选项的 del-node 来移除该节点。

语法

redis-cli --cluster del-node <ip>:<port> <node_id>

这里的ip:port 就是集群的某个节点作为入口,node_id 就是用户要移除的节点ID,比如:

[root@Alian-ECS redis-5.0.14]# bin/redis-cli --cluster del-node 127.0.0.1:7001 4d40e49d2d8602fb335b16c3cf8c425e7317049e

4.8、设置超时

  通过 cluster 选项的 set-timeout 子命令,用户可以为集群的所有节点重新设置 cluster-node-timeout 选项的值。

语法

redis-cli --cluster set-timeout <ip>:<port> <milliseconds>

比如:

[root@Alian-ECS redis-5.0.14]# bin/redis-cli --cluster set-timeout 127.0.0.1:7001 30000

4.9、导入数据

  通过 cluster 选项的 import 子命令,用户可以将给定单机redis服务器的数据导入集群中。

语法

redis-cli --cluster import <node-host>:<port>  # 集群入口的ip地址和端口
--cluster-from <id> <server-host>:<port>       # 单机服务的ip地址和端口
--cluster-copy                                 # 使用复制导入
--cluster-replace                              # 覆盖相同名称的键

比如:

[root@Alian-ECS redis-5.0.14]# bin/redis-cli --cluster import 127.0.0.1:7001 --cluster-from 127.0.0.1:7002 --cluster-copy --cluster-replace  

4.10、重建集群

  如果我们验证过程,可能不断的分片,添加或者删除节点,搞晕了,想重新构建集群该怎么操作呢?(重建集群操作生产上不要随便搞

  • 停止所有节点的服务
  • 删除各个节点下的文件包括(nodes-*.conf、appendonly.aof、dump.rdb、*.log
  • 通过redis-cli工具重新构建集群

具体操作如下:

[root@Alian-ECS redis-5.0.14]# redis-cli -h 127.0.0.1 -p 7001 shutdown
[root@Alian-ECS redis-5.0.14]# redis-cli -h 127.0.0.1 -p 7002 shutdown
[root@Alian-ECS redis-5.0.14]# redis-cli -h 127.0.0.1 -p 7003 shutdown
[root@Alian-ECS redis-5.0.14]# redis-cli -h 127.0.0.1 -p 7004 shutdown
[root@Alian-ECS redis-5.0.14]# redis-cli -h 127.0.0.1 -p 7005 shutdown
[root@Alian-ECS redis-5.0.14]# redis-cli -h 127.0.0.1 -p 7006 shutdown
#删除
[root@Alian-ECS redis-5.0.14]# rm -f ./*/nodes-*.conf ./*/appendonly.aof ./*/dump.rdb ./*/*.log
[root@Alian-ECS bin]# redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1

注意:我这里执行的目录是redis的安装目录,子节点目录分别是7001、7002、7003、7004、7005、7006,这里是用/*/表示,实际中,你们根据需要修改目录,或者一个个删除都行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/346207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaWeb】网络编程概念 + Socket套接字 + UDP/TCP编程

目录 网络编程基础概念 发送端与接受端 请求与响应 客户端与服务器 常见的客户端服务器模型 Socket套接字 回显(echo)程序 UDP版的回显程序 服务器代码 客户端代码 结果 TCP版的回显程序 服务器代码 客户端代码 结果 网络编程基础概念 网络编程&#xff0c;指网…

2.5|物联网应用系统设计|复习提纲|提问背诵

基础概念总结掌握Linux常用的基本命令功能、语法结构&#xff0c;用法等。具体命令参考实验指导书、相关PPT等资料内容。什么是操作系统&#xff08;OS&#xff09;&#xff1f;操作系统是用以控制和管理计算机系统资源&#xff0c;方便用户使用的程序和数据结构的集合。在所有…

零基础学习Python的一点建议

Python语言的火爆程度&#xff0c;真的是超过了任何一门计算机语言&#xff0c;当然火爆程度里面含有赶上了人工智能这个领域的风口&#xff0c;但是大部分的原因是Python易学&#xff0c;语法对小白非常友好&#xff0c;总结一句话&#xff0c;Python语言能做很多事情&#xf…

亿级高并发电商项目-- 实战篇 --万达商城项目 六(编写角色管理、用户权限(Spring Security认证授权)、管理员管理等模块)

专栏&#xff1a;高并发---前后端分布式 &#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小童&#xff0c;Java开发工程师&#xff0c;CSDN博客博主&#xff0c;Java领域新星创作者 &#x1f4d5;系列专栏&#xff1a;前端、Java、Java中间件大全、微信小程序、微信…

使用nvm管理node

nvm介紹 node的版本管理器&#xff0c;可以方便地安装&切换不同版本的node 我们在工作中&#xff0c;可以会有老版本的node的项目需要维护&#xff0c;也可能有新版本的node的项目需要开发&#xff0c;如果只有一个node版本的话将会很麻烦&#xff0c;nvm可以解决我们的难点…

node 拉取github开源漏洞

我们可以通过github的open api 来拉取一些信息。这里主要是拉取 github 开源漏洞中的漏洞信息 Github Explorer github Explorer 是一个在线工具&#xff0c;登录之后&#xff0c;我们可以在左侧输入GraphQL 查询语句&#xff0c;之后就可以查询相关的信息。例如&#xff1a;…

B树和B+树,红黑树作为索引的区别

索引是一种数据结构&#xff0c;帮助我们在mysql表中更高效获取数据的数据结构 常用作为索引的数据结构&#xff1a;二叉树&#xff0c;红黑树&#xff0c;Hash表&#xff0c;B树&#xff0c;B树 下面的数据表中有两个字段&#xff0c;第一个字段是col1&#xff0c;第二个字段…

如何在Qt中设置背景图片,且不覆盖其它控件

正常情况&#xff0c;我们直接通过在样式表里设置背景图片会出现背景图片覆盖其它控件的情况&#xff0c;比如下面操作&#xff1a; 首先右击空白处&#xff0c;点击改变样式表。 然后选择background-image 然后点击铅笔图标 之后我们要先添加前缀&#xff0c;也就是我们…

使用 Three.js 后处理的粗略铅笔画效果

本文使用Three.js的后处理创建粗略的铅笔画效果。我们将完成创建自定义后处理渲染通道、在 WebGL中实现边缘检测、将法线缓冲区重新渲染到渲染目标以及使用生成和导入的纹理调整最终结果的步骤。翻译自Codrops&#xff0c;有改动。 Three.js 中的后处理 Three.js中的后处理是一…

1.9 实践项目——爬取学生信息

1. 项目简介设计一个 Web 服务器 server.py&#xff0c;它读取 students.txt 文件中的学生数据&#xff0c;以表格的形式呈现在网页上&#xff0c;其中 students.txt 的格式如下&#xff1a;No,Name,Gender,Age1001,张三,男,201002,李四,女,191003,王五,男,21设计一个客户端的爬…

【Junit5】就这篇,带你从入门到进阶

目录 前言 1.前置工作 2、注解 2、断言&#xff08;Assertions类&#xff09; 2.1、断言 匹配/不匹配 2.2、断言结果 为真/为假 2.3、断言结果 为空/不为空 3、用例的执行顺序 3.1、用例执行顺序是怎样的&#xff1f; 3.2、通过order注解来排序 4、参数化 4.1、单…

Firefox 110, Chrome 110, Chromium 110 官网离线下载 (macOS, Linux, Windows)

Mozilla Firefox, Google Chrome, Chromium, Apple Safari 请访问原文链接&#xff1a;https://sysin.org/blog/chrome-firefox-download/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org 天下只剩三种&#xff08;主流&am…

feign技巧 - form方式传值

feign技巧 - form方式传值。 0. 文章目录1. 前言2. 调用样例3. 原理解析3.1 feign端序列化参数3.2 SpringMVC服务端解析参数3.3 补充 - 继承关系不会被传递的原因3.4 补充 - 不能使用GET。4. 总结1. 前言 直接正题。 如何使用feign进行fom表单方式的请求调用&#xff0c;以及其…

leaflet 上传KMZ文件,并在map上显示(062)

第062个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中本地上传包kmz文件,解析并在地图上显示图形。在制作本示例的过程中,还有点缺憾,就是kmz中的图片文件没有在jszip中处理好,只能先解压缩后,将图片文件放到public/文件加下,暂时留一个遗憾点,以后再做…

又发现一个ChatGPT体验站,辅助写代码真方便

♥️ 作者&#xff1a;Hann Yang ♥️ 主页&#xff1a;CSDN主页 ♥️ 2022博客之星Top58&#xff0c;原力榜Top10/作者周榜Top13 ♥️ “抢走你工作的不会是 AI &#xff0c;而是先掌握 AI 能力的人” ChatGPT 美国OpenAI研发的聊天机器人程序&#xff0c;于2022年11月30日发…

【刷题笔记】--两数之和Ⅳ,从二叉树中找出两数之和

法一&#xff1a;深度搜索中序遍历双指针 思路&#xff1a;通过中序遍历二叉树得到一个递增的数列&#xff0c;再在这个递增的二叉树中找到这两数。 主要学到双指针这个方法。 对于一般数列&#xff0c;我们要找到两数满足其之和等于目标数&#xff0c;我们一般会进行暴力&a…

C++请求SpringBoot的接口问题记录

问题描述最近忙一个小东西&#xff0c;遇到一个很有意思的问题&#xff0c;记录一下。 需求非常简单&#xff0c;就是java侧提供一个接口给C侧调用。 接口按照业务规范提供出来了&#xff0c;在postman中请求一下&#xff0c;出入参都正常。 关于这个接口请求方式为postJson方式…

C++:提高篇: 栈-寄存器和函数状态:栈指针帧指针详解

栈指针和帧指针前言1、EBP和ESP详解2、push &#xff0c;leave &#xff0c;call汇编指令分析3、下面用一个图总结前言 &#x1f697;&#x1f697;&#x1f697;&#xff1a;在刚接触 ESP和EBP概念时&#xff0c;我一直认为&#xff1a;ESP指向栈顶指针&#xff0c;EBP指向栈…

为什么说百度下个月推出文心一言会被ChatGPT完全碾压

作者&#xff0c;姚远&#xff1a; Oracle ACE&#xff08;Oracle和MySQL数据库方向&#xff09;华为云MVP 《MySQL 8.0运维与优化》的作者中国唯一一位Oracle高可用大师拥有包括 Oracle 10g和12c OCM在内的20数据库相关认证。曾任IBM公司数据库部门经理现在一家第三方公司任首…

操作系统——2.操作系统的特征

这篇文章&#xff0c;我们来讲一讲操作系统的特征 目录 1.概述 2.并发 2.1并发概念 2.1.1操作系统的并发性 3.共享 3.1共享的概念 3.2共享的方式 4.并发和共享的关系 5.虚拟 5.1虚拟的概念 5.2虚拟小结 6.异步 6.1异步概念 7.小结 1.概述 上一篇文章&#xff0c;我们…