Redis集群之主从模式

Redis的定位还是分布式缓存,关于分布式的特点和挑战这里不再介绍。

一、 Redis主从模式的必要性

  • 备份数据:当一个节点损坏时,数据因为有备份,可以方便恢复。
  • 负载均衡:避免所有客户端都访问一个节点,有了主从模式后,查询操作就可以通过查询从节点来完成。

二、Redis主从模式的特点:

  1. 一个Master可以有多个Slaves
  2. 默认配置下,master节点可以进行读和写,slave节点只能进行读操作,写操作被禁止
  3. 不要修改配置让slave节点支持写操作,没有意义,因为,首先写入的数据不会被同步到其他节点,其次,当master节点修改同一条数据后,slave节点的数据会被覆盖掉
  4. slave节点挂了不影响其他slave节点的读和master节点的读和写,重新启动后会将数据从master节点同步过来
  5. master节点挂了以后,不影响slave节点的读,Redis将不再提供写服务,master节点启动后Redis将重新对外提供写服务。
  6. master节点过了以后,不会从slave节点中重新选一个master。
  7. 对由密码的情况说明:当master节点设置密码时:
    * 客户端访问master需要密码;
    * 启动slave需要密码,在配置中进行配置即可;
    * 客户端访问slave不需要密码

三、Redis主从模式的缺点:

  1. master节点挂了以后,redis就不会对外提供写服务了,因为剩下的slave节点不会成为master
  • 所以生产环境不会单单只有主从模式。

四、 搭建Redis主从模式:

1. 准备本机redis集群环境

参看:https://blog.youkuaiyun.com/xiaoxiaoyusheng2012/article/details/82051744
假设这一步已经配置了3个Redis服务,redis6380、redis6381、redis6382,对应的配置文件分别是redis.windows.6380.conf、redis.windows.6381.conf、redis.windows.6382.conf

2. 配置master节点、slave节点

我们让redis6380为master节点,redis6381、redis6382为slave节点,步骤如下:

(1). 修改redis.window.6380.conf的内容,改为redis单实例安装时的原始配置:

bind 127.0.0.1
protected-mode yes
port 6380
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel notice
logfile "C:/RedisLogs/redis6380_log.txt"
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

(2). 修改redis.window.6381.conf和redis.window.6382.conf,在配置文件去除cluster相关配置,添加slaveof:内容如下(以redis6382为例):

port 6382       
loglevel notice    
logfile "C:/RedisLogs/redis6382_log.txt"         
appendonly yes
appendfilename "appendonly.6382.aof"    

slaveof 127.0.0.1 6380

(3). 启动redis6380、redis6381、redis6382服务

redis-server.exe --service-start --service-name redis6380
redis-server.exe --service-start --service-name redis6381
redis-server.exe --service-start --service-name redis6382

(4). WIN+R启动三个命令行窗口,通过redis-cli -h -p 命令 启动客户端,查看服务信息

窗口1:命令1:redis-cli -h 127.0.0.1 -p 6380, 命令2:info Replication
窗口2:命令1:redis-cli -h 127.0.0.1 -p 6381, 命令2:info Replication
窗口2:命令1:redis-cli -h 127.0.0.1 -p 6382, 命令2: info Replication

则会看到如下信息:

窗口1:

窗口2:

窗口3:

四、验证Redis主从模式特性:

1、验证:slaves节点不可写:

slaves节点6381客户端(窗口2):输入->set mykey6381_1 myvalue6381_1 提示:(error) READONLY You can't write against a read only slave.
slaves节点6382客户端(窗口3):输入->set mykey6382_1 myvalue6382_1 提示:(error) READONLY You can't write against a read only slave.

2、验证master节点写,slaves节点可读

写:master节点6380客户端(窗口1):输入->set mykey6380_1 myvalue6380_1 提示:OK
读:master节点6380客户端(窗口1):输入->get mykey6380_1 提示:“myvalue6380_1”
读:slaves节点6381客户端(窗口2):输入->get mykey6380_1 提示:“myvalue6380_1”
读:slaves节点6382客户端(窗口3):输入->get mykey6380_1 提示:“myvalue6380_1”

3、验证一个slaves节点挂了,不影响其他slaves节点和master节点

停止:slaves节点6381服务,命令行:redis-server.exe --service-stop --service-name Redis6381
写:master节点6380客户端(窗口1):输入->set mykey6380_2 myvalue6380_2 提示:OK
读:master节点6380客户端(窗口1):输入->get mykey6380_2 提示:“myvalue6380_2”
读:slaves节点6382客户端(窗口3):输入->get mykey6380_2 提示:“myvalue6380_2”

4、验证slaves重启后数据会从master节点同步过来

启动:slaves节点6381服务,命令行:redis-server.exe --service-start --service-name Redis6381
读:slaves节点6381客户端:输入->get mykey6380_2 提示:“myvalue6380_2”

5、验证master节点挂掉后,slaves节点不会变成master节点(不能写操作)

停止:master节点6380服务,命令行:redis-server.exe --service-stop --service-name Redis6380
读:slaves节点6382客户端(窗口3):输入->get mykey6380_2 提示:“myvalue6380_2”
写:slaves节点6381客户端(窗口2):输入->set mykey6381_1 myvalue6381_1 提示:(error) READONLY You can't write against a read only slave.

6、重启master节点,恢复写操作

启动:master节点6380服务,命令行:redis-server.exe --service-start --service-name Redis6380
写:master节点6380客户端(窗口1):输入->set mykey6380_3 myvalue6380_3 提示:OK
读:slaves节点6382客户端(窗口3):输入->get mykey6380_3 提示:“myvalue6380_3”

参看:https://www.cnblogs.com/yiwangzhibujian/p/7047458.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值