Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

进一步详细学习  >>>  点击  或  redis相关

安装

安装方式选择

redis可以采用yum安装,源码安装,rpm安装三种安装方式。不同安装方式优劣如下:

yum安装:

  • 快速,间接,高效,解决依赖关系,(自动安装到某个路径,不可控),
  • 通过yum安装的软件查询命令: rpm -ql nginx/redis
  • yum源的软件包可能版本非常低

源码安装:

  • 可扩展第三方的功能(可以指定目录安装, configure --prefix=/opt/python36/)
  • 可以通过官网的最新代码,进行编译安装

rpm安装:

源码安装方法

步骤1. 在线下载redis源码包
wget http://download.redis.io/releases/redis-4.0.10.tar.gz      # redis下载一般比较快
步骤2 .解压缩redis源码包,如果源码包带有.gz结尾,需要通过gzip指令扩展,也就是-z的参数, 参数v可以展示解压过程
tar -zxvf redis-4.0.10.tar.gz              # 解压缩这个文件,且显示解压缩过程
步骤3. 解压缩后会有源码包文件夹redis-4.0.10,切换目录到redis源码包
cd redis-4.0.10
步骤4.安装gcc依赖
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

步骤5. 由于redis没有configure脚本,直接就有了makefile,因此可以直接编译且安装
make #编译
make install #安装
#此两条命令可以缩写为一条,  make && make install 
步骤6. 编译安装完成后,redis默认会将redis命令添加到环境变量中/usr/local/bin底下

[root@MiWiFi-R4CM-srv redis-4.0.10]# echo $PATH
/opt/python36/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin

步骤7. 启动redis服务端,redis源码包文件夹中有一个redis.conf文件用于启动redis。

redis-server redis.conf

步骤8  启动redis客户端,新安装的redis没有密码,可以redis-cli直接启动(密码可以在redis.conf文件中配置)

redis-cli

与服务端连接成功后ping回复PONG
[root@MiWiFi-R4CM-srv ~]# redis-cli
127.0.0.1:6379> ping                    #如果没有设置密码redis-cli会直接登录
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth mima
OK
127.0.0.1:6379> ping
PONG

redis配置文件redis.conf

自定义一个redis.conf ,自定义新的redis.conf文件前可以将原有redis.conf文件改名备份。
vim redis.conf ,写入以下内容(不要加上注释)
    bind 0.0.0.0
    port 6379                                            #运行端口, 默认端口也是6379
    daemonize no                                    #后台运行redis
    pidfile /data/6379/redis.pid              #将redis进程的id写入到redis.pid这个文件
    loglevel notice                                    #日志级别
    logfile "/data/6379/redis.log"
    dir /data/6379                                     #配置redis数据存放点
    protected-mode yes                          #redis3.0之后的安全模式
    requirepass mima                             #给redis添加密码
    
    redis的安全模式,可能会阻挡你远程连接,为了解决这个安全模式,给redis设置一个密码
    设置密码后的登录命令:   redis-cli -a 密码

可以在客户端通过命令查询redis的密码参数
CONFIG get requirepass

127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) "mima"

redis的多实例功能

可以在一个机器上,启动多个redis服务端
步骤1.准备一个新的配置文件,redis默认支持多实例,再准备一个新的配置文件redis-6380.conf,内容如下:
port 6380
bind 0.0.0.0
daemonize yes
pidfile /data/6380/redis.pid 
loglevel notice 
logfile "/data/6380/redis.log"
dir /data/6380
protected-mode yes
requirepass mima2

步骤2  创建目录 /data/6380/

步骤3. 启动第二个redis实例(第二个数据库)
    redis-server  redis-6380.conf

步骤4:连接第二个redis实例
    redis-cli -p 6380

发布订阅

1. 一个发布者,多个订阅者  
2. 支持正则的匹配订阅者

-a    参数意思是指定redis的密码登录
redis-cli -a mima   #启动1个redis客户端 (订阅者1)
    SUBSCRIBE  频道名字   
    PSUBSCRIBE  频道名*

redis-cli -a qiangdademima   #启动2个redis客户端(订阅者2)
    SUBSCRIBE  频道名字 
    PSUBSCRIBE  频道名*
    
redis-cli -a qiangdademima   #启动3个redis客户端(发布者)
    PUBLISH   频道名字  想发送的消息   
    PUBLISH   频道名字*   发送的消息

持久化之RDB与AOF

Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案RDB与AOF,将内存中的数据保存到磁盘中,避免数据的丢失。

rdb模式

RDB持久化的功能,能可以将redis在内存中的的状态保存到硬盘中:

  • 它可以手动执行。
  • 也可以再redis.conf中配置,定期执行

RDB持久化产生的RDB文件是一个经过压缩二进制文件,这个文件被保存在硬盘中,redis可以通过这个文件还原数据库当时的状态。

RDB配置参数:

dir /data/6379/          持久化文件存储位置
dbfilename  dbmp.rdb     持久化文件每过900秒 有1个操作就进行持久化save 900秒  1个修改类的操作
save 300秒  10个操作
save 60秒  10000个操作

步骤1.在配置文件中写入参数(实际文件不能有注释),支持rdb模式
vim redis.conf

port 6379
bind 0.0.0.0
daemonize yes
pidfile /data/6379/redis.pid 
loglevel notice 
logfile "/data/6379/redis.log"
dir /data/6379                             
protected-mode yes
requirepass mima
dbfilename  dbmp.rdb
save  900 1
save 300 10
save 60  10000

步骤2. 启动redis服务端,

步骤3: 登录redis客户端, 此时可以设置redis的key

步骤4: .此时检查目录,/data/6379底下没有dbmp.rdb文件

如果没有可以通过save命令触发rdb持久化

步骤4. 后续的操作会自动持久化到dbmp.rdb文件中.

aof模式

AOF(append-only log file)
记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集
AOF 文件中的命令全部以redis协议的格式保存,新命令追加到文件末尾。
优点:最大程序保证数据不丢
缺点:日志记录非常大

AOF持久化配置,两条参数appendonly yes
appendfsync  always    总是修改类的操作everysec   每秒做一次持久化no     依赖于系统自带的缓存大小机制

步骤1. vim redis.conf     #写入以下

daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename  dbmp.rdb
requirepass redhat
save 900 1
save 300 10
save 60  10000
appendonly yes
appendfsync everysec

2.启动redis-server服务端,默认就会生成appendonly.aof持久化文件
此时进入redis-cli的操作,都会被记录,且追加到appendonly.aof文件中,以达到持久化的操作

redis 持久化方式有哪些?有什么区别?

rdb:基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能

aof:以追加的方式记录redis操作日志的文件。可以最大程度的保证redis数据安全,类似于mysql的binlog

RDB数据切换AOF数据的操作

要求:redis不重启,切换RDB备份到AOF备份

环境配置:确保redis版本在2.2以上

redis版本查询:  redis-server -v

[root@MiWiFi-R4CM-srv /]# redis-server -v
Redis server v=4.0.10 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=987228021bd34865

查询到当前版本4.0.10

本文在redis4.0中,通过config set命令,达到不重启redis服务,从RDB持久化切换为AOF,步骤如下:

步骤1. 准备redis.conf配置文件,确保开启rdb功能,配置参数如下

port 6379
    daemonize yes
    pidfile /data/redis.pid 
    loglevel notice 
    logfile "/data/redis.log"
    dir /data/
    dbfilename  dbmp.rdb
    save  900 1
    save 300 10
    save 60  10000

步骤2. 启动redis服务端
    redis-server redis.conf

步骤3. 插入redis数据,通过save命令,强制写入持久化rdb文件(此时还是使用rdb持久化)
    set name shahe 
    set age 11
    save  
    
步骤4. 通过命令,切换到aof持久化,(注意此步只是临时生效,必须将AOF的配置,写入redis.conf)
127.0.0.1:6379> CONFIG set appendonly yes   #开启AOF功能
OK
127.0.0.1:6379> CONFIG SET save ""  #关闭RDB功能
OK

步骤5. 修改配置文件,添加aof参数,(此步重启后,rdb持久化完全切换aof持久化,且数据保持一致)

port 6379
daemonize yes
pidfile /data/redis.pid 
loglevel notice 
logfile "/data/redis.log"
dir /data/
appendonly yes
appendfsync  everysec

步骤6. 重启redis服务

[root@MiWiFi-R4CM-srv redis-4.0.10]# ps -ef|grep redis
root     129461  92720  0 21:35 pts/1    00:00:00 grep --color=auto redis
[root@MiWiFi-R4CM-srv redis-4.0.10]# redis-server redis.conf
[root@MiWiFi-R4CM-srv redis-4.0.10]#
[root@MiWiFi-R4CM-srv redis-4.0.10]#
[root@MiWiFi-R4CM-srv redis-4.0.10]# ps -ef|grep redis
root     129477      1  0 21:35 ?        00:00:00 redis-server 0.0.0.0:6379
root     129487  92720  0 21:35 pts/1    00:00:00 grep --color=auto redis
[root@MiWiFi-R4CM-srv redis-4.0.10]# redis-cli
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth mima
OK
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>

redis主从同步

redis集群中的数据库复制是通过主从同步实现的

主节点Master把数据分发给从节点Slave

主从同步的好处在于高可用,redis节点有冗余设计

主从同步原理:
1. 从服务器向主服务器发送 SYNC 命令。
2. 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令。
3. 当主服务器执行完 BGSAVE 命令时,它会向从服务器发送 RDB 文件,而从服务器则会接收并载入这个文件。
4. 主服务器将缓冲区储存的所有写命令发送给从服务器执行。

主从同步特点:
1、在开启主从复制的时候,使用的是RDB方式同步主从数据的
2、同步开始之后,通过主库命令传播的方式,主动的复制方式实现
3、redis2.8以后实现PSYNC的机制,实现断线重连

info命令可以查询redis使用信息:

[root@MiWiFi-R4CM-srv redis-4.0.10]# redis-cli
127.0.0.1:6379> auth mima
OK
127.0.0.1:6379> info
# Server
redis_version:4.0.10
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:987228021bd34865
redis_mode:standalone
os:Linux 3.10.0-862.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:4.8.5
process_id:129477
run_id:be1816a01c8de5c598f662c00c0e63ac334c1270
tcp_port:6379
uptime_in_seconds:3401
uptime_in_days:0
hz:10
lru_clock:8347648
executable:/opt/redis-4.0.10/redis-server
config_file:/opt/redis-4.0.10/redis.conf# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0# Memory
used_memory:849520
used_memory_human:829.61K
used_memory_rss:2322432
used_memory_rss_human:2.21M
used_memory_peak:849520
used_memory_peak_human:829.61K
used_memory_peak_perc:100.12%
used_memory_overhead:836294
used_memory_startup:786592
used_memory_dataset:13226
used_memory_dataset_perc:21.02%
total_system_memory:1021931520
total_system_memory_human:974.59M
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:2.73
mem_allocator:jemalloc-4.0.3
active_defrag_running:0
lazyfree_pending_objects:0# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1585403452
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:126976
aof_enabled:1
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0
aof_current_size:53
aof_base_size:53
aof_pending_rewrite:0
aof_buffer_length:0
aof_rewrite_buffer_length:0
aof_pending_bio_fsync:0
aof_delayed_fsync:0# Stats
total_connections_received:3
total_commands_processed:4
instantaneous_ops_per_sec:0
total_net_input_bytes:166
total_net_output_bytes:166
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
expired_stale_perc:0.00
expired_time_cap_reached_count:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:204
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0# Replication
role:master
connected_slaves:0
master_replid:3396b19a53f9747c7d56362803b9faef01ee63f4
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0# CPU
used_cpu_sys:2.69
used_cpu_user:1.29
used_cpu_sys_children:0.03
used_cpu_user_children:0.00# Cluster
cluster_enabled:0# Keyspace
db0:keys=1,expires=0,avg_ttl=0
127.0.0.1:6379>

主从 同步配置步骤

步骤1.  环境准备3个redis实例
redis-6380.conf
redis-6381.conf
redis-6382.conf
                三个配置文件的区别,仅仅是端口的不同修改即可
port 6380
daemonize yes
pidfile /data/6380/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dbfilename dump.rdb
dir /data/6380
protected-mode no

步骤2. 启动三个redis实例
redis-server 6380.conf 
redis-server 6381.conf 
redis-server 6382.conf

步骤3. 此时可以查看redis身份信息,通过info参数()此时还未配置主从,因此都是master身份
redis-cli -p 6382 info Replication
redis-cli -p 6381 info Replication
redis-cli -p 6380 info Replication

步骤4. 配置从节点的身份(6380为主,6381,6382为从),通过命令指明master节点信息即可
127.0.0.1:6381> SLAVEOF 127.0.0.1 6380

127.0.0.1:6382> SLAVEOF 127.0.0.1 6380

步骤5. 查看各个各个节点的身份信息
redis-cli -p 6382 info Replication        从节点
redis-cli -p 6381 info Replication    从节点
redis-cli -p 6380 info Replication  ()主节点

手动切换主从身份

步骤1. 将主节点挂掉
kill -9 主节点 6380

步骤2. 将6382去掉slave的身份
redis-cli -p 6382 slaveof no one

步骤3. 将6381设置新的主人,设置为6382
redis-cli -p 6381 slaveof 127.0.0.1 6382

通过配置文件,决定主从身份

例如以6381为主,6380为从,在6380的配置文件中,添加一条参数即可(主节点不做配置,从节点指明主人的ip端口信息即可)
port 6380
daemonize yes
pidfile /data/6380/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dbfilename dump.rdb
dir /data/6380
protected-mode no
slaveof 127.0.0.1 6381

redis哨兵

redis的主从机制可以实现读写分离与数据安全,但是假如主库挂了,得手动切换主从库,这就需要准备一个值班人,他去检测,redis主从机制,是否宕机,值班人来做这个主从切换的事,显示显然不符合自动运维的需要。因此有了Redis-Sentinel来解决这一问题。

Redis-Sentinel是redis官方推荐的高可用性解决方案, 当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户端都没有实现主从切换的功能。 而redis-sentinel就是一个独立运行的进程,用于监控多个master-slave集群, 自动发现master宕机,进行自动切换slave > master

sentinel主要功能如下:

  • 不时的监控redis是否良好运行,如果节点不可达就会对节点进行下线标识
  • 如果被标识的是主节点,sentinel就会和其他的sentinel节点“协商”,如果其他节点也人为主节点不可达,就会选举一个sentinel节点来完成自动故障转义
  • 在master-slave进行切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换

Redis Sentinel架构

redis的一个进程,但是不存储数据,只是监控redis。

redis命令整理

官网地址:http://redisdoc.com/resid-server redis.conf # 启动redis数据库
redis-cli -p 6379       # 启动redis的6379客户端
redis-cli info #查看redis数据库信息redis-cli info replication #查看redis的复制授权信息
redis-cli -p 6381 info replication #查看redis的6381端口复制授权信息
redis-cli info sentinel   #查看redis的哨兵信息

redis哨兵配置步骤

步骤1. 准备3个redis实例文件
    -rw-r--r-- 1 root root 145 12月 11 09:14 redis-6379.conf
    -rw-r--r-- 1 root root 115 12月 11 09:13 redis-6380.conf
    -rw-r--r-- 1 root root  93 12月 11 09:13 redis-6381.conf

redis-6379配置文件内容如下
    cat redis-6379.conf

port 6379
    daemonize yes
    logfile "6379.log"
    dbfilename "dump-6379.rdb"
    dir "/var/redis/data/"
    daemonize yes

#其余6380、6381配置文件,端口确保不同,且配置上主从参数
    slaveof 127.0.0.1 6379

[root@MiWiFi-R4CM-srv ~]# cd /opt/redis-4.0.10/
[root@MiWiFi-R4CM-srv redis-4.0.10]# mkdir myshobing
[root@MiWiFi-R4CM-srv redis-4.0.10]# cd myshobing/
[root@MiWiFi-R4CM-srv myshobing]# touch redis-6379.conf
[root@MiWiFi-R4CM-srv myshobing]# touch redis-6380.conf
[root@MiWiFi-R4CM-srv myshobing]# touch redis-6381.conf
[root@MiWiFi-R4CM-srv myshobing]# ll
总用量 0
-rw-r--r--. 1 root root 0 3月  30 09:38 redis-6379.conf
-rw-r--r--. 1 root root 0 3月  30 09:38 redis-6380.conf
-rw-r--r--. 1 root root 0 3月  30 09:38 redis-6381.conf
[root@MiWiFi-R4CM-srv myshobing]# mkdir -p /var/redis/data
[root@MiWiFi-R4CM-srv myshobing]# vim redis-6379.conf
[root@MiWiFi-R4CM-srv myshobing]# cat redis-6379.conf port 6379
daemonize yes
logfile "6379.log"
dbfilename "dump-6379.rdb"
dir "/var/redis/data/"
[root@MiWiFi-R4CM-srv myshobing]# cat redis-6379.conf > redis-6380.conf     #可以快速复制内容
[root@MiWiFi-R4CM-srv myshobing]# cat redis-6379.conf > redis-6381.conf
[root@MiWiFi-R4CM-srv myshobing]# vim redis-6380.conf
[root@MiWiFi-R4CM-srv myshobing]# vim redis-6381.conf
[root@MiWiFi-R4CM-srv myshobing]#

步骤2. 启动三个redis实例

[root@MiWiFi-R4CM-srv myshobing]# redis-server redis-6379.conf
[root@MiWiFi-R4CM-srv myshobing]# redis-server redis-6380.conf
[root@MiWiFi-R4CM-srv myshobing]# redis-server redis-6381.conf
[root@MiWiFi-R4CM-srv myshobing]# !ps
ps -ef | grep redis
root     126723      1  0 09:57 ?        00:00:00 redis-server *:6379
root     126736      1  0 09:57 ?        00:00:00 redis-server *:6380
root     126745      1  1 09:57 ?        00:00:00 redis-server *:6381
root     126754 125275  0 09:57 pts/2    00:00:00 grep --color=auto redis

步骤3. 检查三个redis实例的主从身份关系,还可以登录客户端测试一下主从复制是否正常
redis-cli -p 6379 info replication
redis-cli -p 6380 info replication
redis-cli -p 6381 info replication

[root@MiWiFi-R4CM-srv myshobing]# redis-cli -p 6379 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=308,lag=0
slave1:ip=127.0.0.1,port=6381,state=online,offset=308,lag=0
master_replid:babb0e29faa991c837f2d8114d1424bfdd35bd4d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:308
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:308

步骤4. 配置三个哨兵
-rw-r--r-- 1 root root 560 12月 11 09:13 redis-sentinel-26379.conf
-rw-r--r-- 1 root root 560 12月 11 09:13 redis-sentinel-26380.conf
-rw-r--r-- 1 root root 560 12月 11 09:13 redis-sentinel-26381.conf

[root@MiWiFi-R4CM-srv myshobing]# touch redis-sentinel-26379.conf
[root@MiWiFi-R4CM-srv myshobing]# touch redis-sentinel-26380.conf
[root@MiWiFi-R4CM-srv myshobing]# touch redis-sentinel-26381.conf
[root@MiWiFi-R4CM-srv myshobing]# ll
总用量 12
-rw-r--r--. 1 root root   0 3月  30 09:51 6379.log
-rw-r--r--. 1 root root   0 3月  30 09:51 6380.log
-rw-r--r--. 1 root root   0 3月  30 09:52 6381.log
-rw-r--r--. 1 root root  94 3月  30 09:43 redis-6379.conf
-rw-r--r--. 1 root root 117 3月  30 09:55 redis-6380.conf
-rw-r--r--. 1 root root 117 3月  30 09:55 redis-6381.conf
-rw-r--r--. 1 root root   0 3月  30 10:08 redis-sentinel-26379.conf
-rw-r--r--. 1 root root   0 3月  30 10:08 redis-sentinel-26380.conf
-rw-r--r--. 1 root root   0 3月  30 10:08 redis-sentinel-26381.conf

哨兵配置文件内容,几乎一致,仅有端口区别

// Sentinel节点的端口
    port 26379  
    dir /var/redis/data/
    logfile "26379.log"

daemonize yes

// 当前Sentinel节点监控 127.0.0.1:6379 这个主节点
    // 2代表判断主节点失败至少需要2个Sentinel节点节点同意
    // mymaster是主节点的别名
    sentinel monitor mymaster 127.0.0.1 6379 2

//每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒30s且没有回复,则判定不可达
    sentinel down-after-milliseconds mymaster 30000

//当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,
    原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
    sentinel parallel-syncs mymaster 1

//故障转移超时时间为180000毫秒
    sentinel failover-timeout mymaster 180000

[root@MiWiFi-R4CM-srv myshobing]# cat redis-sentinel-26380.conf port 26380
dir /var/redis/data/
logfile "26380.log"
daemonize yes
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

步骤5. 启动三个redis哨兵

redis-sentinel redis-sentinel-26379.conf 
redis-sentinel redis-sentinel-26380.conf 
redis-sentinel redis-sentinel-26381.conf

[root@MiWiFi-R4CM-srv myshobing]# redis-sentinel redis-sentinel-26379.conf
[root@MiWiFi-R4CM-srv myshobing]# redis-sentinel redis-sentinel-26380.conf
[root@MiWiFi-R4CM-srv myshobing]# redis-sentinel redis-sentinel-26381.conf
[root@MiWiFi-R4CM-srv myshobing]# ps -ef | grep redisroot     126723      1  0 09:57 ?        00:00:06 redis-server *:6379
root     126736      1  0 09:57 ?        00:00:05 redis-server *:6380
root     126745      1  0 09:57 ?        00:00:05 redis-server *:6381
root     130783      1  0 11:05 ?        00:00:00 redis-sentinel *:26379 [sentinel]
root     130793      1  1 11:05 ?        00:00:00 redis-sentinel *:26380 [sentinel]
root     130801      1  1 11:05 ?        00:00:00 redis-sentinel *:26381 [sentinel]
root     130812 125275  0 11:05 pts/2    00:00:00 grep --color=auto redis

步骤6. 检查redis哨兵身份信息,检查主从节点健康状态

redis-cli -p 26379 info sentinel
redis-cli -p 26380 info sentinel
redis-cli -p 26381 info sentinel

[root@MiWiFi-R4CM-srv myshobing]# redis-cli -p 26379 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
[root@MiWiFi-R4CM-srv myshobing]# redis-cli -p 26379
127.0.0.1:26379> ping
PONG
127.0.0.1:26379> 

此时也可以 “cat redis-sentinel-26380.conf” ,会发现文件内容已经发生变化,就说明哨兵功能已经开始运行

[root@MiWiFi-R4CM-srv myshobing]# cat redis-sentinel-26380.conf
port 26380
dir "/var/redis/data"
logfile "26380.log"
daemonize yes
sentinel myid f318feae0f895f9c60ef81cf5fad0afb7001fe7f
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
# Generated by CONFIG REWRITE
sentinel known-slave mymaster 127.0.0.1 6380
sentinel known-slave mymaster 127.0.0.1 6381
sentinel known-sentinel mymaster 127.0.0.1 26381 d00e195c04f8648e78f00ad215042bb95f3ba73b
sentinel known-sentinel mymaster 127.0.0.1 26379 efc8388c4c0973087e0ce660fceb5b19ecf30870
sentinel current-epoch 0

步骤7. 配置正确后,杀死master节点,查看主从身份切换是否正常

挂掉6379的redis进程,发现6381变成了主进程

再重启6379的redis进程,发现6379变成了6381从进程

[root@MiWiFi-R4CM-srv myshobing]# kill 126723   # 杀死6379的redis-server
[root@MiWiFi-R4CM-srv myshobing]# !ps
ps -ef | grep redis
root        426 125275  0 11:12 pts/2    00:00:00 grep --color=auto redis
root     126736      1  0 09:57 ?        00:00:07 redis-server *:6380
root     126745      1  0 09:57 ?        00:00:07 redis-server *:6381
root     130783      1  0 11:05 ?        00:00:03 redis-sentinel *:26379 [sentinel]
root     130793      1  0 11:05 ?        00:00:03 redis-sentinel *:26380 [sentinel]
root     130801      1  0 11:05 ?        00:00:03 redis-sentinel *:26381 [sentinel]
[root@MiWiFi-R4CM-srv myshobing]# cat redis-638
redis-6380.conf  redis-6381.conf
[root@MiWiFi-R4CM-srv myshobing]# cat redis-6380.conf port 6380
daemonize yes
logfile "6380.log"
dbfilename "dump-6380.rdb"
dir "/var/redis/data"
slaveof 127.0.0.1 6381    # 6380变成了6381的从进程
[root@MiWiFi-R4CM-srv myshobing]# redis-cli -p 26379 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:6381,slaves=2,sentinels=3
[root@MiWiFi-R4CM-srv myshobing]# redis-cli -p 6381 info replication
# Replication
role:master    # 6381已经是主进程
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=117115,lag=1
master_replid:397fd8ebe7cdb3d66afb22022fcb3019ee063840
master_replid2:babb0e29faa991c837f2d8114d1424bfdd35bd4d
master_repl_offset:117115
second_repl_offset:79454
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:117101
[root@MiWiFi-R4CM-srv myshobing]# redis-server redis-6379.conf     #再重启6379的redis进程,发现6379变成了6381从进程
[root@MiWiFi-R4CM-srv myshobing]# redis-cli -p 6379 info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6381
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:150493
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:397fd8ebe7cdb3d66afb22022fcb3019ee063840
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:150493
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:150058
repl_backlog_histlen:436

redis-cluster配置

redis的数据存储在内存中,一般服务器内存16~256G,当高并发,且数据量大时,假如你的业务需要500G内存甚至1TB时怎么办?例如新浪微博作为世界上最大的redis存储,就超过1TB的数据,去哪买这么大的内存条?

解决方案如下

  1. 配置一个超级牛逼的计算机,超大内存,超强cpu,例如天河一号计算机,但是问题是。。。。
  2. 正确的应该是考虑分布式,加机器,把数据分到不同的位置,分摊集中式的压力,一堆机器做一件事

天河一号计算机主要配置:

  • 6144个通用处理器(3072x2 Intel Quad Core Xeon E5540 2.53GHz/E5540 3.0GHz);
  • –5120个加速处理器(2560 ATI Radeon 4870x2 575MHz)
  • –内存总容量98TB ;
  • –点点通信带宽40Gbps ;
  • –共享磁盘总容量为1PB

各大公司有自己的解决方案,推出各自的集群功能,核心思想都是将数据分片(sharding)存储在多个redis实例中,每一片就是一个redis实例。各大企业集群方案:

  • twemproxy由Twitter开源
  • Codis由豌豆荚开发,基于GO和C开发
  • redis-cluster官方3.0版本后的集群方案

redis分布原理

redis3.0集群采用P2P模式,完全去中心化,将redis所有的key分成了16384个槽位,每个redis实例负责一部分slot,集群中的所有信息通过节点数据交换而更新。

redis实例集群主要思想是将redis数据的key进行散列,通过hash函数特定的key会映射到指定的redis节点上

分布式数据库首要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整个数据的一个子集。

常见的分区规则有顺序分区和哈希分区。Redis 使用哈希分区方法,哈希分区有如下方法:

  • 节点取余分区
  • 一致性哈希分区
  • 虚拟槽分区(redis-cluster采用的方式)

Redis Cluster采用虚拟槽分区

虚拟槽分区巧妙地使用了哈希空间,使用分散度良好的哈希函数把所有的数据映射到一个固定范围内的整数集合,整数定义为槽(slot)。

Redis Cluster槽的范围是0 ~ 16383。

槽是集群内数据管理和迁移的基本单位。采用大范围的槽的主要目的是为了方便数据的拆分和集群的扩展,

每个节点负责一定数量的槽。

redis-cluster安装

ruby语言脚本,一键自动安装redis-cluster

redis-cluster是什么,就是将我所有的数据keys * 分配给多个节点。例如:

分配6匹马,6匹马的身份信息:

  • 3个主
  • 3个从

redis-cluster使用的哈希槽算法,将数据分为0~16383的槽位
将所有的keys 分配到这些槽位当中

安装配置手册

步骤1. 准备6个redis节点,也就是准备6匹马

redis可以自定制端口,你可以用6379,也可以用7000

-rw-r--r-- 1 root root 185 12月 11 09:51 redis-7000.conf
-rw-r--r-- 1 root root 185 12月 11 09:52 redis-7001.conf
-rw-r--r-- 1 root root 185 12月 11 09:52 redis-7002.conf
-rw-r--r-- 1 root root 185 12月 11 09:52 redis-7003.conf
-rw-r--r-- 1 root root 185 12月 11 09:52 redis-7004.conf
-rw-r--r-- 1 root root 185 12月 11 09:52 redis-7005.conf

快速修改方法:
查看redis配置文件,修改这6个文件的端口不同

sed   's/7000/7001/g' redis-7000.conf       #  此时还未生效,只返回处理结果
        -i 参数,写入到文件 insert 
        
    sed  -i  's/7000/7001/g' redis-7000.conf     #  对redis-7000.conf这个文件修改

sed    's/7000/7001/g'    redis-7000.conf   >  redis-7001.conf

sed     linux处理字符串的命令

's/7000/7001/g'        s  代表替换指令/你想换的内容/你想替换后的内容/g 全局替换 globol 
     
     redis-7000.conf   操作的对象,将这个文件内的所有7000替换为7001

步骤2. 准备6个配置文件redis.conf 
    -rw-r--r-- 1 root root 182 12月 11 10:01 redis-7000.conf
    -rw-r--r-- 1 root root 182 12月 11 10:01 redis-7001.conf
    -rw-r--r-- 1 root root 182 12月 11 10:02 redis-7002.conf
    -rw-r--r-- 1 root root 182 12月 11 10:02 redis-7003.conf
    -rw-r--r-- 1 root root 182 12月 11 10:02 redis-7004.conf
    -rw-r--r-- 1 root root 182 12月 11 10:02 redis-7005.conf

配置文件内容如下:

[root@MiWiFi-R4CM-srv redis-4.0.10]# cd myjiqun/
[root@MiWiFi-R4CM-srv myjiqun]# touch redis-7000.conf
[root@MiWiFi-R4CM-srv myjiqun]# mkdir -p /opt/redis/data
[root@MiWiFi-R4CM-srv myjiqun]# vim redis-7000.conf
[root@MiWiFi-R4CM-srv myjiqun]# cat redis-7000.conf port 7000
daemonize yes
dir "/opt/redis/data"
logfile "7000.log"
dbfilename "dump-7000.rdb"
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-require-full-coverage no# 快速复制修改端口
[root@MiWiFi-R4CM-srv myjiqun]# sed 's/7000/7001/g' redis-7000.conf > redis-7001.conf
[root@MiWiFi-R4CM-srv myjiqun]# cat redis-7001.conf port 7001
daemonize yes
dir "/opt/redis/data"
logfile "7001.log"
dbfilename "dump-7001.rdb"
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-require-full-coverage no[root@MiWiFi-R4CM-srv myjiqun]# sed 's/7000/7002/g' redis-7000.conf > redis-7002.conf
[root@MiWiFi-R4CM-srv myjiqun]# sed 's/7000/7003/g' redis-7000.conf > redis-7003.conf
[root@MiWiFi-R4CM-srv myjiqun]# sed 's/7000/7004/g' redis-7000.conf > redis-7004.conf
[root@MiWiFi-R4CM-srv myjiqun]# sed 's/7000/7005/g' redis-7000.conf > redis-7005.conf

参数解释:

port 7000
daemonize yes
dir "/opt/redis/data"
logfile "7000.log"
dbfilename "dump-7000.rdb"
cluster-enabled yes   #开启集群模式
cluster-config-file nodes-7000.conf  #集群内部的配置文件
cluster-require-full-coverage no  #redis cluster需要16384个slot都正常的时候才能对外提供服务,换句话说,只要任何一个slot异常那么整个cluster不对外提供服务。 因此生产环境一般为no

6个配置文件,仅仅是端口的区别,可以使用sed命令快速生成配配置文件
        1117  sed 's/7000/7001/g'  redis-7000.conf > redis-7001.conf
        1118  sed 's/7000/7002/g'  redis-7000.conf > redis-7002.conf
        1119  sed 's/7000/7003/g'  redis-7000.conf > redis-7003.conf
        1120  sed 's/7000/7004/g'  redis-7000.conf > redis-7004.conf
        1121  sed 's/7000/7005/g'  redis-7000.conf > redis-7005.conf

步骤3.  启动6个redis实例并检查redis进程信息

# 启动redis进程
[root@MiWiFi-R4CM-srv myjiqun]# pkill redis
[root@MiWiFi-R4CM-srv myjiqun]# !ps
ps -ef | grep redis
root       4847 125275  0 12:19 pts/2    00:00:00 grep --color=auto redis
[root@MiWiFi-R4CM-srv myjiqun]# redis-server redis-7000.conf
[root@MiWiFi-R4CM-srv myjiqun]# redis-server redis-7001.conf
[root@MiWiFi-R4CM-srv myjiqun]# redis-server redis-7002.conf
[root@MiWiFi-R4CM-srv myjiqun]# redis-server redis-7003.conf
[root@MiWiFi-R4CM-srv myjiqun]# redis-server redis-7004.conf
[root@MiWiFi-R4CM-srv myjiqun]# redis-server redis-7005.conf # 检查进程状态
[root@MiWiFi-R4CM-srv myjiqun]# ps -ef | grep redis
root       4900      1  0 12:20 ?        00:00:00 redis-server *:7000 [cluster]
root       4917      1  0 12:20 ?        00:00:00 redis-server *:7001 [cluster]
root       4924      1  0 12:20 ?        00:00:00 redis-server *:7002 [cluster]
root       4934      1  0 12:20 ?        00:00:00 redis-server *:7003 [cluster]
root       4948      1  0 12:20 ?        00:00:00 redis-server *:7004 [cluster]
root       4955      1  0 12:20 ?        00:00:00 redis-server *:7005 [cluster]
root       4964 125275  0 12:20 pts/2    00:00:00 grep --color=auto redis

此时因为哈希槽未分配,redis还不能存储信息:

[root@MiWiFi-R4CM-srv myjiqun]# redis-cli -p 7000
127.0.0.1:7000> ping
PONG
127.0.0.1:7000> set age 18
(error) CLUSTERDOWN Hash slot not served

步骤4. 安装配置ruby环境,用于一键搭建redis集群
    1.下载源码 下载位置可以在 /opt/redis-4.0.10/myjiqun  如果一次下载链接失败,可以多次尝试
        wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz

ruby中文下载网   : http://www.ruby-lang.org/zh_cn/downloads/

ruby下载速度很慢,建议从网上直接寻址源码包进行安装.   ruby-2.7.0.tar.gz下载点击

2.解压缩ruby
        tar -zxvf ruby-2.3.1.tar.gz
    3.编译安装ruby到/opt/ruby路径下
        ./configure --prefix=/opt/ruby/
        make && make install

安装后/opt/ruby/下有四个文件:

[root@MiWiFi-R4CM-srv opt]# cd /opt/ruby/
[root@MiWiFi-R4CM-srv ruby]# ll
总用量 0
drwxr-xr-x. 2 root root 154 3月  30 16:06 bin
drwxr-xr-x. 3 root root  24 3月  30 16:06 include
drwxr-xr-x. 4 root root  59 3月  30 16:06 lib
drwxr-xr-x. 5 root root  38 3月  30 16:06 share
[root@MiWiFi-R4CM-srv bin]# cd /opt/ruby/bin
[root@MiWiFi-R4CM-srv bin]# ls
bundle   erb  irb   racc2y  rdoc  ruby
bundler  gem  racc  rake    ri    y2racc

步骤5. 准备ruby的环境变量

cp /opt/ruby/bin/ruby   /usr/local/bin/
cp /opt/ruby//bin/gem   /usr/local/bin

操作示例:

[root@MiWiFi-R4CM-srv ruby]# echo $PATH
/opt/python36/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin[root@MiWiFi-R4CM-srv bin]# cp /opt/ruby/bin/ruby   /usr/local/bin/
[root@MiWiFi-R4CM-srv bin]# cp /opt/ruby//bin/gem   /usr/local/bin[root@MiWiFi-R4CM-srv bin]# ll /usr/local/bin    #检查是否复制成功
总用量 42580
-rwxr-xr-x. 1 root root      547 3月  30 16:21 gem
-rwxr-xr-x. 1 root root  2451256 3月  21 02:44 redis-benchmark
-rwxr-xr-x. 1 root root  5768688 3月  21 02:44 redis-check-aof
-rwxr-xr-x. 1 root root  5768688 3月  21 02:44 redis-check-rdb
-rwxr-xr-x. 1 root root  2617280 3月  21 02:44 redis-cli
lrwxrwxrwx. 1 root root       12 3月  21 02:44 redis-sentinel -> redis-server
-rwxr-xr-x. 1 root root  5768688 3月  21 02:44 redis-server
-rwxr-xr-x. 1 root root    65991 3月  30 16:35 redis-trib.rb
-rwxr-xr-x. 1 root root 21139576 3月  30 16:20 rub

步骤6. 下载ruby的软件包管理工具
wget http://rubygems.org/downloads/redis-3.3.0.gem    # 一般情况可以正常下载
gem install -l redis-3.3.0.gem  # 安装ruby操作redis的模块

步骤7. 查看ruby语言的包哪些
gem list -- check redis gem

ruby-2.7.0.tar.gz包含如下:

[root@MiWiFi-R4CM-srv ~]# gem list -- check redis gem*** LOCAL GEMS ***benchmark (default: 0.1.0)
bigdecimal (default: 2.0.0)
bundler (default: 2.1.2)
cgi (default: 0.1.0)
csv (default: 3.1.2)
date (default: 3.0.0)
dbm (default: 1.1.0)
delegate (default: 0.1.0)
did_you_mean (default: 1.4.0)
etc (default: 1.1.0)
fcntl (default: 1.0.0)
fiddle (default: 1.0.0)
fileutils (default: 1.4.1)
forwardable (default: 1.3.1)
gdbm (default: 2.1.0)
getoptlong (default: 0.1.0)
io-console (default: 0.5.3)
ipaddr (default: 1.2.2)
irb (default: 1.2.1)
json (default: 2.3.0)
logger (default: 1.4.2)
matrix (default: 0.2.0)
minitest (5.13.0)
mutex_m (default: 0.1.0)
net-pop (default: 0.1.0)
net-smtp (default: 0.1.0)
net-telnet (0.2.0)
observer (default: 0.1.0)
open3 (default: 0.1.0)
openssl (default: 2.1.2)
ostruct (default: 0.2.0)
power_assert (1.1.5)
prime (default: 0.1.1)
pstore (default: 0.1.0)
psych (default: 3.1.0)
racc (default: 1.4.16)
rake (13.0.1)
rdoc (default: 6.2.1)
readline (default: 0.0.2)
readline-ext (default: 0.1.0)
redis (3.3.0)
reline (default: 0.1.2)
rexml (default: 3.2.3)
rss (default: 0.2.8)
sdbm (default: 1.0.0)
singleton (default: 0.1.0)
stringio (default: 0.1.0)
strscan (default: 1.0.3)
test-unit (3.3.4)
timeout (default: 0.1.0)
tracer (default: 0.1.0)
uri (default: 0.10.0)
webrick (default: 1.6.0)
xmlrpc (0.3.0)
yaml (default: 0.1.0)
zlib (default: 1.1.0)

步骤8 . 配置环境变量redis-trib.rb,用于创建redis-cluster 
    #  找到这个redis-trib.rb命令在哪里
   find /opt  -name redis-trib.rb /opt/redis-4.0.10/src/redis-trib.rb
    #    配置环境变量,用于快速执行redis-trib.rb这个命令 
    cp /opt/redis-4.0.10/src/redis-trib.rb    /usr/local/bin/

[root@MiWiFi-R4CM-srv ruby]# find /opt -name redis-trib.rb
/opt/redis-4.0.10/src/redis-trib.rb[root@MiWiFi-R4CM-srv ruby]# cp /opt/redis-4.0.10/src/redis-trib.rb    /usr/local/bin/

步骤9 . 通过redis-trib.rb命令,一键创建redis-cluster集群功能
    redis-trib.rb create --replicas 1 127.0.0.1:7000 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

  • 其实就是分配槽位,分配主从关系
  • #通过这个命令,创建集群功能
  • #1  代表每个主只有一个从
  • #自动给后面6个节点,分配主从关系,7000、7001、7002是主节点,7003、7004、7005是从节点
[root@MiWiFi-R4CM-srv ruby]# redis-trib.rb create --replicas 1 127.0.0.1:7000 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
>>> Creating cluster
/opt/ruby/lib/ruby/gems/2.7.0/gems/redis-3.3.0/lib/redis/client.rb:459: warning: constant ::Fixnum is deprecated
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7000
127.0.0.1:7001
127.0.0.1:7002
Adding replica 127.0.0.1:7004 to 127.0.0.1:7000
Adding replica 127.0.0.1:7005 to 127.0.0.1:7001
Adding replica 127.0.0.1:7003 to 127.0.0.1:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: fe1ce156c10e18ce5d11901c38893318e9836662 127.0.0.1:7000slots:0-5460 (5461 slots) master
M: aba8447c85110e90946583eb68f285aa0bcc66d3 127.0.0.1:7001slots:5461-10922 (5462 slots) master
M: ae6acd98d686eb4f8c9d4001288c67a9c2cabb85 127.0.0.1:7002slots:10923-16383 (5461 slots) master
S: 56a654bfb7faabfbcebc83845024dd20ab02098a 127.0.0.1:7003replicates aba8447c85110e90946583eb68f285aa0bcc66d3
S: ad51303b56b7eaf4d4159c8423437cd849996990 127.0.0.1:7004replicates ae6acd98d686eb4f8c9d4001288c67a9c2cabb85
S: a7974f4c239f6ca50c66a3b6667fc455e5995f15 127.0.0.1:7005replicates fe1ce156c10e18ce5d11901c38893318e9836662
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:7000)
M: fe1ce156c10e18ce5d11901c38893318e9836662 127.0.0.1:7000slots:0-5460 (5461 slots) master1 additional replica(s)
M: ae6acd98d686eb4f8c9d4001288c67a9c2cabb85 127.0.0.1:7002slots:10923-16383 (5461 slots) master1 additional replica(s)
S: a7974f4c239f6ca50c66a3b6667fc455e5995f15 127.0.0.1:7005slots: (0 slots) slavereplicates fe1ce156c10e18ce5d11901c38893318e9836662
S: 56a654bfb7faabfbcebc83845024dd20ab02098a 127.0.0.1:7003slots: (0 slots) slavereplicates aba8447c85110e90946583eb68f285aa0bcc66d3
M: aba8447c85110e90946583eb68f285aa0bcc66d3 127.0.0.1:7001slots:5461-10922 (5462 slots) master1 additional replica(s)
S: ad51303b56b7eaf4d4159c8423437cd849996990 127.0.0.1:7004slots: (0 slots) slavereplicates ae6acd98d686eb4f8c9d4001288c67a9c2cabb85
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@MiWiFi-R4CM-srv ruby]#

步骤10.  此时可以查询主从关系, 并可以写入数据来使用redis集群了

redis查看身份的命令,可以来检查集群的节点身份信息
redis-cli -p 7003 info replication        #  查看主从身份信息
redis-cli -p 7004 info replication        #  查看主从身份信息
redis-cli -p 7005 info replication        #  查看主从身份信息

#查看redis集群状态信息
redis-cli -p 7000 cluster info    #查看节点集群状态

步骤11   :  redis操作集群数据
redis-cli -p 7000 -c       # 通过-c参数才能指定集群功能

[root@MiWiFi-R4CM-srv ruby]# redis-cli -c -p 7000
127.0.0.1:7000> ping
PONG
127.0.0.1:7000> keys *
(empty list or set)
127.0.0.1:7000> set name tom
-> Redirected to slot [5798] located at 127.0.0.1:7001
OK

此时redis集群功能可以正常使用

Linux系统 06 python环境配置04 之 python操作redis相关推荐

  1. linux服务器python环境配置+pycharm连接服务器操作

    普天同庆!!!从原来啥也不懂一直拖着想着等返校后问同学怎么操作,到现在迫于无奈需要训练只能自己配置,耗时半天终于搞明白了!!!(大神永远不懂小白的痛) 目录 1.linux服务器环境配置 1.1 安装 ...

  2. ubuntu使用python_Ubuntu+Python环境配置(III)—用Python

    Python具有丰富和强大的库.它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起.常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最 ...

  3. python环境配置opencv_【Python】python2.7 安装配置OpenCV2

    原博文 2017-05-23 22:28 − 环境:Ubuntu16.04 anaconda Python2.7 opencv2.4.13 安装opencv后 import cv2 遇到错误信息: N ...

  4. GEE入门【1】| Python环境配置

    GEE[1]| Python环境配置 GEE简介 python API配置相关 Colab环境配置 GEE开发环境配置 GEE的本地python环境搭建 相关网站 Python API相关资源 第一次 ...

  5. 超适合新手使用的教程:Python环境配置+Pycharm安装+扩展包安装(以Numpy+mkl为例)

    目录 一.Python环境配置 1.Python下载 2.python安装 3.Python验证安装 二.Pycharm环境配置 1.pycharm下载 2.pycharm配置python 3.pyc ...

  6. Linux系统 05 python环境配置02 之 virtualenv与virtualenvwrappe以及freeze

    思考:在使用 Python 开发的过程中,工程多了以后,会不会遇到如下问题: 不同的工程依赖不同版本的库的问题,如何让一台机器同时跑不同的python或django版本: 开发过程中不想让物理环境里充 ...

  7. Anaconda3 下载安装及不同python环境配置(Linux/Windows)

    Anaconda3 下载安装及不同python环境配置(Linux/Windows) 一.Anaconda3安装 Windows Linux(以ubuntu18.04为例) 二.配置虚拟环境 一.An ...

  8. docker mysql配置 丢失_Ubuntu16.04服务器环境配置 – Docker、MySQL、Redis

    Ubuntu16.04 服务器环境配置 – Docker.MySQL.Redis 安装Docker 1. 卸载旧版本 sudo apt-get remove docker docker-engine ...

  9. python 环境配置

    文章目录 一.python环境配置 1.官网下载python 安装包后安装 2.windows下python环境变量配置 3.Windows下虚拟环境创建 4.ubuntu 下虚拟环境搭建 5 .po ...

最新文章

  1. RNAseq-GO、biomaRt转换ID
  2. R中基本命名(未完)
  3. linux远程脚本事例,ssh远程执行命令方法和Shell脚本实例
  4. boost::mpi模块实现scan集合的测试
  5. 高 star 开源项目来实验楼啦,深度学习强推教材
  6. linux增加 inode空间,linux 增加inode 的方法
  7. *nix下部署第三方动态库文件
  8. 改进的冒泡排序算法一
  9. Android 完整地操作数据库--日记本实例
  10. Jsp简单入门与Jsp实用教程总结
  11. EditPlus批量转码
  12. 【图像去噪】基于马尔可夫随机场实现图像去噪附matlab代码
  13. 服务器非80端口无法访问网页,使用非80网站访问服务器web提示需要备案呢?
  14. 团队协作工具,如何加强团队协作能力
  15. 租客儿子高考608分,房东送上大礼“免租4年”
  16. c lua语言教程,Lua教程(三):C语言、C++中调用Lua的Table示例
  17. Flex富文本编辑器
  18. python安装方法32位_python安装教程
  19. tagcanvas.min.js 文字云
  20. 嵌入式linux华清远见考试,嵌入式Linux小测及答案

热门文章

  1. AD18设置菜单为中文
  2. es对已有的索引给主键_Elasticsearch(ES) 创建索引
  3. word修订显示修订人_在政治团体中使用修订控制的5大好处
  4. 如何做新车提车前的检测
  5. UTF-8编码规则解析
  6. oracle 文件头格式,ORACLE 11G 数据文件头格式
  7. 正点原子stm32f4 mpu6050外接方法
  8. Flutter项目快速搭建指南
  9. excel中去重计数_如何在Excel中计数
  10. UR机械臂学习(5-1):驱动真实机械臂准备工作——示教器配置