一 关系型数据库和 NoSQL 数据库

1.1 数据库主要分为两大类:关系型数据库与 NoSQL 数据库

关系型数据库,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库中的数据主流的 MySQL、Oracle、MS SQL Server 和 DB2 都属于这类传统数据库。

NoSQL 数据库,全称为 Not Only SQL,意思就是适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。主要分为临时性键值存储(memcached、Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase),每种 NoSQL 都有其特有的使用场景及优点。

1.2 为什么还要用 NoSQL 数据库呢?

主要是由于随着互联网发展,数据量越来越大,对性能要求越来越高,传统数据库存在着先天性的缺陷,即单机(单库)性能瓶颈,并且扩展困难。这样既有单机单库瓶颈,却又扩展困难,自然无法满足日益增长的海量数据存储及其性能要求,所以才会出现了各种不同的 NoSQL 产品,NoSQL 根本性的优势在于在云计算时代,简单、易于大规模分布式扩展,并且读写性能非常高

二 redis简介

2.1 什么是redis

Redis (Remote Dictionary Server)

在2009年发布,开发者是意大利的萨尔瓦多·桑菲利波普(Salvatore Sanfilippo),他本想为自己的公司开发一个用于替换MySQL的产品Redis,但是没有想到他把Redis开源后大受欢迎,短短几年,Redis就有了很大的用户群体,目前国内外使用的公司众多,比如:阿里,百度,新浪微博,知乎网,GitHub,Twitter 等 Redis是一个开源的、遵循BSD协议的、基于内存的而且目前比较流行的键值数据库(key-value database),是一个非关系型数据库,redis 提供将内存通过网络远程共享的一种服务,提供类似功能的还有memcached,但相比memcached,redis还提供了易扩展、高性能、具备数据持久性等功能。Redis 在高并发、低延迟环境要求比较高的环境使用量非常广泛

2.2 Redis特性

  • 速度快: 10W QPS,基于内存,C语言实现

  • 单线程

  • 持久化

  • 支持多种数据结构

  • 支持多种编程语言

  • 功能丰富: 支持Lua脚本,发布订阅,事务,pipeline等功能

  • 简单: 代码短小精悍(单机核心代码只有23000行左右),单线程开发容易,不依赖外部库,使用简单

  • 主从复制

  • 支持高可用和分布式

单线程为何如此快?

  • 纯内存

  • 非阻塞

  • 避免线程切换和竞态消耗

2.3 Redis应用场景

  • Session 共享:常见于web集群中的Tomcat或者PHP中多web服务器session共享

  • 缓存:数据查询、电商网站商品信息、新闻内容

  • 计数器:访问排行榜、商品浏览数等和次数相关的数值统计场景

  • 微博/微信社交场合:共同好友,粉丝数,关注,点赞评论等

  • 消息队列:ELK的日志缓存、部分业务的订阅发布系统

  • 地理位置: 基于GEO(地理信息定位),实现摇一摇,附近的人,外卖等功能

三. 安装依赖

[root@redis-node1 ~]#  dnf install make gcc initscripts -y

四. 源码编译redis

[root@redis-node1 ~]# wget https://download.redis.io/releases/redis-7.4.8.tar.gz
[root@redis-node1 ~]# tar zxf redis-7.4.8.tar.gz
[root@redis-node1 ~]# cd redis-7.4.8/
[root@redis-node1 redis-7.4.8]#
[root@redis-node1 redis-7.4.8]# make && make install

[root@redis-node1 redis-7.4.8]# cd utils/
[root@redis-node1 utils]# vim install_server.sh
#bail if this system is managed by systemd
#_pid_1_exe="$(readlink -f /proc/1/exe)"
#if [ "${_pid_1_exe##*/}" = systemd ]
#then
#       echo "This systems seems to use systemd."
#       echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!"
#       exit 1
#fi

[root@redis-node1 utils]# ./install_server.sh
[root@redis-node1 utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] /etc/redis/redis.conf
Please select the redis log file name [/var/log/redis_6379.log]
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server]
Selected config:
Port           : 6379
Config file    : /etc/redis/redis.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!

[root@redis-node1 utils]# systemctl status redis_6379.service

[root@redis-node2 utils]# systemctl daemon-reload
[root@redis-node2 utils]# systemctl status redis_6379.service
○ redis_6379.service - LSB: start and stop redis_6379
     Loaded: loaded (/etc/rc.d/init.d/redis_6379; generated)
     Active: inactive (dead)
       Docs: man:systemd-sysv-generator(8)

[root@redis-node2 utils]# systemctl start redis_6379.service
[root@redis-node2 utils]# systemctl status redis_6379.service
● redis_6379.service - LSB: start and stop redis_6379
     Loaded: loaded (/etc/rc.d/init.d/redis_6379; generated)
     Active: active (exited) since Sun 2026-03-08 15:24:18 CST; 8s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 35637 ExecStart=/etc/rc.d/init.d/redis_6379 start (code=exited, status=0/SUCCESS)
        CPU: 1ms

[root@redis-node2 utils]# netstat -antlpe | grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      0          76854      35530/redis-server
tcp6       0      0 ::1:6379                :::*                    LISTEN      0          76855      35530/redis-server

五.Redis主节点配置

[root@redis-node1 ~]# vim /etc/redis/redis.conf
#bind 127.0.0.1 -::1
bind * -::*

protected-mode no

[root@redis-node1 ~]# systemctl restart redis_6379.service

六.配置Redis从节点

#在redis-node2节点
[root@redis-node2 ~]# vim /etc/redis/redis.conf
#bind 127.0.0.1 -::1
bind * -::*

protected-mode no

replicaof 172.25.254.10  6379
[root@redis-node2 ~]# systemctl restart redis_6379.service

#在redis-node3节点
[root@redis-node3 ~]# vim /etc/redis/redis.conf
#bind 127.0.0.1 -::1
bind * -::*

protected-mode no

replicaof 172.25.254.10  6379
[root@redis-node3 ~]# systemctl restart redis_6379.service

七. 查看状态并测试

1.状态查看

[root@redis-node1 ~]# redis-cli
127.0.0.1:6379> info replications
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.25.254.20,port=6379,state=online,offset=391,lag=0
slave1:ip=172.25.254.30,port=6379,state=online,offset=391,lag=1
master_failover_state:no-failover
master_replid:e5f5cddc017ab0d5223213592d0482b832d3af77
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:391
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:391


[root@redis-node2 ~]# redis-cli
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:172.25.254.10
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_read_repl_offset:433
slave_repl_offset:433
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:e5f5cddc017ab0d5223213592d0482b832d3af77
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:433
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:433

2.测试数据同步性

[root@redis-node1 ~]# redis-cli
127.0.0.1:6379> set name lee
OK
127.0.0.1:6379> get name
"lee"


[root@redis-node2 ~]# redis-cli
127.0.0.1:6379> get name
"lee"

#在从节点中不能写入数据
[root@redis-node3 ~]# redis-cli
127.0.0.1:6379> get name
"lee"
127.0.0.1:6379> set test 123
(error) READONLY You can't write against a read only replica.

八、配置Redis哨兵模式

#redis 主节点
[root@redis-node1 ~]# cd redis-7.4.8/
[root@redis-node1 redis-7.4.8]# cp -p sentinel.conf /etc/redis/
[root@redis-node1 ~]# vim /etc/redis/sentinel.conf
[root@redis-node1 redis-7.4.0]# vim /etc/redis/sentinel.conf
protected-mode no									#关闭保护模式
port 26379											#监听端口
daemonize no										#进入不打如后台
pidfile /var/run/redis-sentinel.pid					#sentinel进程pid文件
loglevel notice										#日志级别
sentinel monitor mymaster 172.25.254.100 6379 2		#创建sentinel监控监控master主机,2表示必须得到2票
sentinel down-after-milliseconds mymaster 10000		#master中断时长,10秒连不上视为master下线
sentinel parallel-syncs mymaster 1					#发生故障转移后,同时开始同步新master数据的slave数量
sentinel failover-timeout mymaster 180000			#整个故障切换的超时时间为3分钟

#在从节点关闭protected-mode模式
[root@redis-node2 ~]# vim /etc/redis/redis.conf
protected-mode no
[root@redis-node2 ~]# systemctl restart redis_6379.service
[root@redis-node3 ~]# vim /etc/redis/redis.conf
protected-mode no 
[root@redis-node3 ~]# systemctl restart redis_6379.service

#在主节点复制sentinel.conf到从节点
[root@redis-node1 ~]# scp /etc/redis/sentinel.conf root@172.25.254.20:/etc/redis/
sentinel.conf                                                           100%   14KB  16.5MB/s   00:00
[root@redis-node1 ~]# scp /etc/redis/sentinel.conf root@172.25.254.30:/etc/redis/
sentinel.conf         

#所有节点开启哨兵
[root@redis-node1~3 ~]# redis-sentinel /etc/redis/sentinel.conf
36628:X 08 Mar 2026 16:55:25.041 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
36628:X 08 Mar 2026 16:55:25.041 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
36628:X 08 Mar 2026 16:55:25.041 * Redis version=7.4.8, bits=64, commit=00000000, modified=0, pid=36628, just started
36628:X 08 Mar 2026 16:55:25.041 * Configuration loaded
36628:X 08 Mar 2026 16:55:25.041 * Increased maximum number of open files to 10032 (it was originally set to 1024).
36628:X 08 Mar 2026 16:55:25.041 * monotonic clock: POSIX clock_gettime
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis Community Edition
  .-`` .-```.  ```\/    _.,_ ''-._     7.4.8 (00000000/0) 64 bit
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 36628
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           https://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

36628:X 08 Mar 2026 16:55:25.043 * Sentinel new configuration saved on disk
36628:X 08 Mar 2026 16:55:25.043 * Sentinel ID is c3a93bf0891df6ad009eb7945e8b17926b0ad35a
36628:X 08 Mar 2026 16:55:25.043 # +monitor master mymaster 172.25.254.10 6379 quorum 2
36628:X 08 Mar 2026 16:55:25.043 * +slave slave 172.25.254.20:6379 172.25.254.20 6379 @ mymaster 172.25.254.10 6379
36628:X 08 Mar 2026 16:55:25.044 * Sentinel new configuration saved on disk
36628:X 08 Mar 2026 16:55:25.044 * +slave slave 172.25.254.30:6379 172.25.254.30 6379 @ mymaster 172.25.254.10 6379
36628:X 08 Mar 2026 16:55:25.045 * Sentinel new configuration saved on disk
36628:X 08 Mar 2026 16:55:35.063 # +sdown slave 172.25.254.20:6379 172.25.254.20 6379 @ mymaster 172.25.254.10 6379
36628:X 08 Mar 2026 16:55:35.063 # +sdown slave 172.25.254.30:6379 172.25.254.30 6379 @ mymaster 172.25.254.10 6379
36628:X 08 Mar 2026 16:56:06.067 * +sentinel sentinel 28f2f3da2b20967c546118a9e1ab4b2276600d87 172.25.254.20 26379 @ mymaster 172.25.254.10 6379
36628:X 08 Mar 2026 16:56:06.069 * Sentinel new configuration saved on disk
36628:X 08 Mar 2026 16:56:17.710 * +sentinel sentinel 89568283004e144d0d7be04c65f5e85dbf6dc147 172.25.254.30 26379 @ mymaster 172.25.254.10 6379
36628:X 08 Mar 2026 16:56:17.712 * Sentinel new configuration saved on disk

九.测试故障切换

[root@redis-node1 6379]# redis-cli
127.0.0.1:6379> SHUTDOWN
not connected> quit

#切换信息
37502:X 08 Mar 2026 17:56:40.872 * Sentinel new configuration saved on disk
37502:X 08 Mar 2026 17:56:40.872 * Sentinel ID is d0780e7fd242a8f3244bc4dbead0fe63f793af03
37502:X 08 Mar 2026 17:56:40.872 # +monitor master mymaster 172.25.254.10 6379 quorum 2
37502:X 08 Mar 2026 17:56:40.873 * +slave slave 172.25.254.20:6379 172.25.254.20 6379 @ mymaster 172.25.254.10 6379
37502:X 08 Mar 2026 17:56:40.874 * Sentinel new configuration saved on disk
37502:X 08 Mar 2026 17:56:40.874 * +slave slave 172.25.254.30:6379 172.25.254.30 6379 @ mymaster 172.25.254.10 6379
37502:X 08 Mar 2026 17:56:40.902 * Sentinel new configuration saved on disk
37502:X 08 Mar 2026 17:57:02.726 * +sentinel sentinel ae862a91f4d7dba85c8e23da1c2e3e2758e5741d 172.25.254.20 26379 @ mymaster 172.25.254.10 6379
37502:X 08 Mar 2026 17:57:02.727 * Sentinel new configuration saved on disk
37502:X 08 Mar 2026 17:58:22.387 * +sentinel sentinel 7ef7c9ff4a5c9891530c9bd5f9379a39e5941079 172.25.254.30 26379 @ mymaster 172.25.254.10 6379
37502:X 08 Mar 2026 17:58:22.389 * Sentinel new configuration saved on disk
37502:X 08 Mar 2026 17:59:16.271 # +sdown master mymaster 172.25.254.10 6379
37502:X 08 Mar 2026 17:59:16.338 # +odown master mymaster 172.25.254.10 6379 #quorum 2/2
37502:X 08 Mar 2026 17:59:16.338 # +new-epoch 1
37502:X 08 Mar 2026 17:59:16.338 # +try-failover master mymaster 172.25.254.10 6379
37502:X 08 Mar 2026 17:59:16.340 * Sentinel new configuration saved on disk
37502:X 08 Mar 2026 17:59:16.340 # +vote-for-leader d0780e7fd242a8f3244bc4dbead0fe63f793af03 1
37502:X 08 Mar 2026 17:59:16.342 * 7ef7c9ff4a5c9891530c9bd5f9379a39e5941079 voted for d0780e7fd242a8f3244bc4dbead0fe63f793af03 1
37502:X 08 Mar 2026 17:59:16.343 * ae862a91f4d7dba85c8e23da1c2e3e2758e5741d voted for d0780e7fd242a8f3244bc4dbead0fe63f793af03 1
37502:X 08 Mar 2026 17:59:16.440 # +elected-leader master mymaster 172.25.254.10 6379
37502:X 08 Mar 2026 17:59:16.441 # +failover-state-select-slave master mymaster 172.25.254.10 6379
37502:X 08 Mar 2026 17:59:16.503 # +selected-slave slave 172.25.254.20:6379 172.25.254.20 6379 @ mymaster 172.25.254.10 6379
37502:X 08 Mar 2026 17:59:16.503 * +failover-state-send-slaveof-noone slave 172.25.254.20:6379 172.25.254.20 6379 @ mymaster 172.25.254.10 6379
37502:X 08 Mar 2026 17:59:16.580 * +failover-state-wait-promotion slave 172.25.254.20:6379 172.25.254.20 6379 @ mymaster 172.25.254.10 6379
37502:X 08 Mar 2026 17:59:16.641 * Sentinel new configuration saved on disk
37502:X 08 Mar 2026 17:59:16.641 # +promoted-slave slave 172.25.254.20:6379 172.25.254.20 6379 @ mymaster 172.25.254.10 6379
37502:X 08 Mar 2026 17:59:16.641 # +failover-state-reconf-slaves master mymaster 172.25.254.10 6379
37502:X 08 Mar 2026 17:59:16.693 * +slave-reconf-sent slave 172.25.254.30:6379 172.25.254.30 6379 @ mymaster 172.25.254.10 6379
37502:X 08 Mar 2026 17:59:17.520 # -odown master mymaster 172.25.254.10 6379	#客观下线
37502:X 08 Mar 2026 17:59:17.674 * +slave-reconf-inprog slave 172.25.254.30:6379 172.25.254.30 6379 @ mymaster 172.25.254.10 6379
37502:X 08 Mar 2026 17:59:17.674 * +slave-reconf-done slave 172.25.254.30:6379 172.25.254.30 6379 @ mymaster 172.25.254.10 6379
37502:X 08 Mar 2026 17:59:17.746 # +failover-end master mymaster 172.25.254.10 6379
37502:X 08 Mar 2026 17:59:17.746 # +switch-master mymaster 172.25.254.10 6379 172.25.254.20 6379			#主节点被切换到20

#在30中查看信息
[root@redis-node3 ~]# redis-cli
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:172.25.254.20
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_read_repl_offset:123299
slave_repl_offset:123299
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:dcd9e887a20f05380a448cca1f332ec2501e5477
master_replid2:d4caee184d2c8ffdf82d30fc7267ec6cedbf08f8
master_repl_offset:123299
second_repl_offset:113351
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:91236
repl_backlog_histlen:32064


#恢复10redis
[root@redis-node1 6379]# /etc/init.d/redis_6379 start
Starting Redis server...

#在20查看信息
[root@redis-node2 ~]# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.25.254.30,port=6379,state=online,offset=130264,lag=1
slave1:ip=172.25.254.10,port=6379,state=online,offset=135673,lag=0
master_failover_state:no-failover
master_replid:dcd9e887a20f05380a448cca1f332ec2501e5477
master_replid2:d4caee184d2c8ffdf82d30fc7267ec6cedbf08f8
master_repl_offset:130405
second_repl_offset:113351
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:91236
repl_backlog_histlen:39170

十.修改所有节点配置文件

[root@redis-node1 ~]# vim /etc/redis/6379.conf
masterauth "123456"					#集群主从认证
cluster-enabled yes					#开启cluster集群功能
cluster-config-file nodes-6379.conf	#指定集群配置文件
cluster-node-timeout 15000			#节点加入集群的超时时间单位是ms

[root@redis-node1 ~]# /etc/init.d/redis_6379 stop

十一、启动集群

[root@redis-node1 ~]# redis-cli  --cluster create 172.25.254.10:6379 172.25.254.20:6379 172.25.254.30:6379 172.25.254.40:6379 172.25.254.50:6379 172.25.254.60:6379 --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 172.25.254.50:6379 to 172.25.254.10:6379
Adding replica 172.25.254.60:6379 to 172.25.254.20:6379
Adding replica 172.25.254.40:6379 to 172.25.254.30:6379
M: 8db833f3c3bc6b8f93e87111f13f56d366f833a0 172.25.254.10:6379
   slots:[0-5460] (5461 slots) master
M: ca599940209f55c07d06951480703bb0a5d8873a 172.25.254.20:6379
   slots:[5461-10922] (5462 slots) master
M: d9300173b75149d3056f0ee3edec063f8ec66e9a 172.25.254.30:6379
   slots:[10923-16383] (5461 slots) master
S: 32d797eb30094b77edb896abcc0b0fc91ccdb4fd 172.25.254.40:6379
   replicates d9300173b75149d3056f0ee3edec063f8ec66e9a
S: ba6ef067c63d30c213493eb48d43427015018898 172.25.254.50:6379
   replicates 8db833f3c3bc6b8f93e87111f13f56d366f833a0
S: c939a04358edc1ce7a1c1a44561d77fb402025fd 172.25.254.60:6379
   replicates ca599940209f55c07d06951480703bb0a5d8873a
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 172.25.254.10:6379)
M: 8db833f3c3bc6b8f93e87111f13f56d366f833a0 172.25.254.10:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: c939a04358edc1ce7a1c1a44561d77fb402025fd 172.25.254.60:6379
   slots: (0 slots) slave
   replicates ca599940209f55c07d06951480703bb0a5d8873a
M: d9300173b75149d3056f0ee3edec063f8ec66e9a 172.25.254.30:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: ca599940209f55c07d06951480703bb0a5d8873a 172.25.254.20:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: ba6ef067c63d30c213493eb48d43427015018898 172.25.254.50:6379
   slots: (0 slots) slave
   replicates 8db833f3c3bc6b8f93e87111f13f56d366f833a0
S: 32d797eb30094b77edb896abcc0b0fc91ccdb4fd 172.25.254.40:6379
   slots: (0 slots) slave
   replicates d9300173b75149d3056f0ee3edec063f8ec66e9a
[OK] All nodes agree about slots configuration.

#查看集群状态

[root@redis-node1 ~]# redis-cli  --cluster info 172.25.254.10:6379

172.25.254.10:6379 (8db833f3...) -> 0 keys | 5461 slots | 1 slaves.
172.25.254.30:6379 (d9300173...) -> 0 keys | 5461 slots | 1 slaves.
172.25.254.20:6379 (ca599940...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.

#查看集群信息
[root@redis-node1 ~]# redis-cli  cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:168
cluster_stats_messages_pong_sent:163
cluster_stats_messages_sent:331
cluster_stats_messages_ping_received:158
cluster_stats_messages_pong_received:168
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:331
total_cluster_links_buffer_limit_exceeded:0

#检测当前集群
[root@redis-node1 ~]# redis-cli  --cluster  check  172.25.254.10:6379
172.25.254.10:6379 (8db833f3...) -> 0 keys | 5461 slots | 1 slaves.
172.25.254.30:6379 (d9300173...) -> 0 keys | 5461 slots | 1 slaves.
172.25.254.20:6379 (ca599940...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 172.25.254.10:6379)
M: 8db833f3c3bc6b8f93e87111f13f56d366f833a0 172.25.254.10:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: c939a04358edc1ce7a1c1a44561d77fb402025fd 172.25.254.60:6379
   slots: (0 slots) slave
   replicates ca599940209f55c07d06951480703bb0a5d8873a
M: d9300173b75149d3056f0ee3edec063f8ec66e9a 172.25.254.30:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: ca599940209f55c07d06951480703bb0a5d8873a 172.25.254.20:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: ba6ef067c63d30c213493eb48d43427015018898 172.25.254.50:6379
   slots: (0 slots) slave
   replicates 8db833f3c3bc6b8f93e87111f13f56d366f833a0
S: 32d797eb30094b77edb896abcc0b0fc91ccdb4fd 172.25.254.40:6379
   slots: (0 slots) slave
   replicates d9300173b75149d3056f0ee3edec063f8ec66e9a
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

十二、集群扩容

#添加master
[root@redis-node1 ~]# redis-cli --cluster  add-node 172.25.254.70:6379 172.25.254.10:6379

[root@redis-node1 ~]# redis-cli  --cluster  check  172.25.254.10:6379
172.25.254.10:6379 (8db833f3...) -> 0 keys | 5461 slots | 1 slaves.
172.25.254.70:6379 (dfabfe07...) -> 0 keys | 0 slots | 0 slaves.
172.25.254.30:6379 (d9300173...) -> 0 keys | 5461 slots | 1 slaves.
172.25.254.20:6379 (ca599940...) -> 1 keys | 5462 slots | 1 slaves.
[OK] 1 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 172.25.254.10:6379)
M: 8db833f3c3bc6b8f93e87111f13f56d366f833a0 172.25.254.10:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: dfabfe07170ac9b5d20a5a7a70c836877bd64504 172.25.254.70:6379
   slots: (0 slots) master
S: c939a04358edc1ce7a1c1a44561d77fb402025fd 172.25.254.60:6379
   slots: (0 slots) slave
   replicates ca599940209f55c07d06951480703bb0a5d8873a
M: d9300173b75149d3056f0ee3edec063f8ec66e9a 172.25.254.30:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: ca599940209f55c07d06951480703bb0a5d8873a 172.25.254.20:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: ba6ef067c63d30c213493eb48d43427015018898 172.25.254.50:6379
   slots: (0 slots) slave
   replicates 8db833f3c3bc6b8f93e87111f13f56d366f833a0
S: 32d797eb30094b77edb896abcc0b0fc91ccdb4fd 172.25.254.40:6379
   slots: (0 slots) slave
   replicates d9300173b75149d3056f0ee3edec063f8ec66e9a
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.


#分配solt给新加入的主机
>>> Performing Cluster Check (using node 172.25.254.10:6379)
M: 8db833f3c3bc6b8f93e87111f13f56d366f833a0 172.25.254.10:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: dfabfe07170ac9b5d20a5a7a70c836877bd64504 172.25.254.70:6379
   slots: (0 slots) master
S: c939a04358edc1ce7a1c1a44561d77fb402025fd 172.25.254.60:6379
   slots: (0 slots) slave
   replicates ca599940209f55c07d06951480703bb0a5d8873a
M: d9300173b75149d3056f0ee3edec063f8ec66e9a 172.25.254.30:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: ca599940209f55c07d06951480703bb0a5d8873a 172.25.254.20:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: ba6ef067c63d30c213493eb48d43427015018898 172.25.254.50:6379
   slots: (0 slots) slave
   replicates 8db833f3c3bc6b8f93e87111f13f56d366f833a0
S: 32d797eb30094b77edb896abcc0b0fc91ccdb4fd 172.25.254.40:6379
   slots: (0 slots) slave
   replicates d9300173b75149d3056f0ee3edec063f8ec66e9a
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4096			#分配solt的数量
What is the receiving node ID? dfabfe07170ac9b5d20a5a7a70c836877bd64504
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1: all			#solt来源

Ready to move 4096 slots.


#给新主机添加slave
[root@redis-node1 ~]# redis-cli  --cluster  add-node 172.25.254.80:6379 172.25.254.10:6379 --cluster-slave --cluster-master-id dfabfe07170ac9b5d20a5a7a70c836877bd64504


[root@redis-node1 ~]# redis-cli  --cluster  check  172.25.254.10:6379                                              172.25.254.10:6379 (8db833f3...) -> 0 keys | 4096 slots | 1 slaves.
172.25.254.70:6379 (dfabfe07...) -> 1 keys | 4096 slots | 1 slaves.
172.25.254.30:6379 (d9300173...) -> 0 keys | 4096 slots | 1 slaves.
172.25.254.20:6379 (ca599940...) -> 0 keys | 4096 slots | 1 slaves.
[OK] 1 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 172.25.254.10:6379)
M: 8db833f3c3bc6b8f93e87111f13f56d366f833a0 172.25.254.10:6379
   slots:[1365-5460] (4096 slots) master
   1 additional replica(s)
S: 1176ee294e6b5071ca57e93374d04ac22028daed 172.25.254.80:6379
   slots: (0 slots) slave
   replicates dfabfe07170ac9b5d20a5a7a70c836877bd64504
M: dfabfe07170ac9b5d20a5a7a70c836877bd64504 172.25.254.70:6379
   slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
   1 additional replica(s)
S: c939a04358edc1ce7a1c1a44561d77fb402025fd 172.25.254.60:6379
   slots: (0 slots) slave
   replicates ca599940209f55c07d06951480703bb0a5d8873a
M: d9300173b75149d3056f0ee3edec063f8ec66e9a 172.25.254.30:6379
   slots:[12288-16383] (4096 slots) master
   1 additional replica(s)
M: ca599940209f55c07d06951480703bb0a5d8873a 172.25.254.20:6379
   slots:[6827-10922] (4096 slots) master
   1 additional replica(s)
S: ba6ef067c63d30c213493eb48d43427015018898 172.25.254.50:6379
   slots: (0 slots) slave
   replicates 8db833f3c3bc6b8f93e87111f13f56d366f833a0
S: 32d797eb30094b77edb896abcc0b0fc91ccdb4fd 172.25.254.40:6379
   slots: (0 slots) slave
   replicates d9300173b75149d3056f0ee3edec063f8ec66e9a
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

十三、集群缩容

#集群槽位回收到10主机中

[root@redis-node1 ~]# redis-cli  --cluster reshard 172.25.254.10:6379

>>> Performing Cluster Check (using node 172.25.254.10:6379)
M: 8db833f3c3bc6b8f93e87111f13f56d366f833a0 172.25.254.10:6379
   slots:[1365-5460] (4096 slots) master
   1 additional replica(s)
S: 1176ee294e6b5071ca57e93374d04ac22028daed 172.25.254.80:6379
   slots: (0 slots) slave
   replicates dfabfe07170ac9b5d20a5a7a70c836877bd64504
M: dfabfe07170ac9b5d20a5a7a70c836877bd64504 172.25.254.70:6379
   slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
   1 additional replica(s)
S: c939a04358edc1ce7a1c1a44561d77fb402025fd 172.25.254.60:6379
   slots: (0 slots) slave
   replicates ca599940209f55c07d06951480703bb0a5d8873a
M: d9300173b75149d3056f0ee3edec063f8ec66e9a 172.25.254.30:6379
   slots:[12288-16383] (4096 slots) master
   1 additional replica(s)
M: ca599940209f55c07d06951480703bb0a5d8873a 172.25.254.20:6379
   slots:[6827-10922] (4096 slots) master
   1 additional replica(s)
S: ba6ef067c63d30c213493eb48d43427015018898 172.25.254.50:6379
   slots: (0 slots) slave
   replicates 8db833f3c3bc6b8f93e87111f13f56d366f833a0
S: 32d797eb30094b77edb896abcc0b0fc91ccdb4fd 172.25.254.40:6379
   slots: (0 slots) slave
   replicates d9300173b75149d3056f0ee3edec063f8ec66e9a
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4096
What is the receiving node ID? 8db833f3c3bc6b8f93e87111f13f56d366f833a0  #10id
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1: dfabfe07170ac9b5d20a5a7a70c836877bd64504        #70id
Source node #2: done

#删除70和80节点

[root@redis-node1 ~]# redis-cli --cluster del-node  172.25.254.10:6379 dfabfe07170ac9b5d20a5a7a70c836877bd64504

>>> Removing node dfabfe07170ac9b5d20a5a7a70c836877bd64504 from cluster 172.25.254.10:6379
>>> Sending CLUSTER FORGET messages to the cluster...
>>> Sending CLUSTER RESET SOFT to the deleted node.

[root@redis-node1 ~]# redis-cli --cluster del-node  172.25.254.10:6379 1176ee294e6b5071ca57e93374d04ac22028daed

>>> Removing node 1176ee294e6b5071ca57e93374d04ac22028daed from cluster 172.25.254.10:6379
>>> Sending CLUSTER FORGET messages to the cluster...
>>> Sending CLUSTER RESET SOFT to the deleted node.

root@redis-node1 ~]# redis-cli  --cluster  check  172.25.254.10:6379

172.25.254.10:6379 (8db833f3...) -> 1 keys | 8192 slots | 1 slaves.
172.25.254.30:6379 (d9300173...) -> 0 keys | 4096 slots | 1 slaves.
172.25.254.20:6379 (ca599940...) -> 0 keys | 4096 slots | 1 slaves.
[OK] 1 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 172.25.254.10:6379)
M: 8db833f3c3bc6b8f93e87111f13f56d366f833a0 172.25.254.10:6379
   slots:[0-6826],[10923-12287] (8192 slots) master
   1 additional replica(s)
S: c939a04358edc1ce7a1c1a44561d77fb402025fd 172.25.254.60:6379
   slots: (0 slots) slave
   replicates ca599940209f55c07d06951480703bb0a5d8873a
M: d9300173b75149d3056f0ee3edec063f8ec66e9a 172.25.254.30:6379
   slots:[12288-16383] (4096 slots) master
   1 additional replica(s)
M: ca599940209f55c07d06951480703bb0a5d8873a 172.25.254.20:6379
   slots:[6827-10922] (4096 slots) master
   1 additional replica(s)
S: ba6ef067c63d30c213493eb48d43427015018898 172.25.254.50:6379
   slots: (0 slots) slave
   replicates 8db833f3c3bc6b8f93e87111f13f56d366f833a0
S: 32d797eb30094b77edb896abcc0b0fc91ccdb4fd 172.25.254.40:6379
   slots: (0 slots) slave
   replicates d9300173b75149d3056f0ee3edec063f8ec66e9a
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐