redis如果只有一个服务,当服务出现问题时,就无法使用了。使用集群,就可以避免这类问题。哨兵模式是集群的一种,目前比较流行的方式。
哨兵模式的机制就是,一个redis服务(master或者slaver)启动时,随之启动一个哨兵(sentinel)。这个哨兵就用来监测这个服务的。
集群中所有的数据服务(master或者slaver)互相通信,共享数据,但是只有一个主服务master,其他都是从服务slave。哨兵们也互相通信,用来交流各个slaver和master是否正常。当master异常时,哨兵会选举一个最佳的slaver作为新的master。当原先的master恢复以后,会变成一个slaver。
客户端取数据可以从任意一个数据服务中获取,可以做成就近原则获取。而写入时,只有master可以被写入。
以下是配置两台机器的一主五从六哨兵的配置。其中也解决了各个出现的状况,比如密码等问题。需要注意的是,实际生产也不会这么用,因为我的机器有限,只有两台机器,各个机器有三个服务。
1.223服务器总启动脚本:(startupAll.bat)
start %~dp0Redis-x64-3.2.100_16379\startup.bat
start %~dp0Redis-x64-3.2.100_16380\startup.bat
start %~dp0Redis-x64-3.2.100_16381\startup.bat
start %~dp0Redis-x64-3.2.100_26379\startup_sentinel.bat
start %~dp0Redis-x64-3.2.100_26380\startup_sentinel.bat
start %~dp0Redis-x64-3.2.100_26381\startup_sentinel.bat
2.223机器的数据服务:(startup.bat)
title master_16379
%~dp0redis-server.exe %~dp0redis.windows.conf
3.223机器数据服务的配置:(redis.windows.conf)
# 绑定所有网卡
bind 0.0.0.0
# 保护模式关闭,防止外部机器无法访问,开启时无法使用192的网卡地址telnet,只能用127回环地址访问
protected-mode no
# 绑定端口
port 16379
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel notice
logfile ""
# 数据库数量,相当于表数量
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
# 配置密码
masterauth "1234"
# 缓存路径
dir "E:\\myrun\\Redis-x64-3.2.100_16379"
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
# 访问其他机器时使用的密码
requirepass "1234"
appendonly yes
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
# Generated by CONFIG REWRITE
# 当前服务是隶属于192.168.0.126 16379的一个从服务
slaveof 192.168.0.126 16379
4.223第一个哨兵的启动脚本(startup_sentinel.bat)
title sentinel_16379
%~dp0redis-server.exe %~dp0sentinel.conf --sentinel
5.223第一个哨兵的配置文件(sentinel.conf)
port 26379
#sentinel
# 外网访问
protected-mode no
sentinel myid 64f3efc620882f9b78a4e86e551bd39ec0084dbc
# 四个哨兵认为master掉线时会重新选举
sentinel monitor mymaster 192.168.0.126 16379 4
# 哨兵心跳检测间隔为5秒
sentinel down-after-milliseconds mymaster 5000
# 哨兵心跳检测超时时间为15秒
sentinel failover-timeout mymaster 15000
# 设置访问master的密码
sentinel auth-pass mymaster 1234
sentinel config-epoch mymaster 54
# Generated by CONFIG REWRITE
dir "E:\\myrun"
sentinel leader-epoch mymaster 54
sentinel known-slave mymaster 192.168.0.223 16380
sentinel known-slave mymaster 192.168.0.223 16379
sentinel known-slave mymaster 192.168.0.126 16381
sentinel known-slave mymaster 192.168.0.223 16381
sentinel known-slave mymaster 192.168.0.126 16380
sentinel known-sentinel mymaster 192.168.0.223 26380 b56c86047b8c11419528f94870f1db52b5c33733
sentinel known-sentinel mymaster 192.168.0.126 26381 14275e52d290da84451c6c523e4bd95c16368662
sentinel known-sentinel mymaster 192.168.0.126 26379 a07d4dbf388c50746fb49e9cd3cbc03e0eba3686
sentinel known-sentinel mymaster 192.168.0.126 26380 59bcb77faea57639b27173bd0e059447467122e9
sentinel known-sentinel mymaster 192.168.0.223 26381 1d0c22c6cc3a5ee6bdef7ec0479282fc1e53bf4b
sentinel current-epoch 54
6.启动效果:
启动了一主五从六哨兵。此时关闭master,则哨兵会推举一个新的master替代原先的master
7.配置的时候有一些注意点:
7.1比如需要本机使用ip访问而不是127.0.0.1访问,以及跨机器访问等,都按照我上边3当中的配置来,就可以规避。
7.2访问需要密码而不是随意访问,同样在上边也规避掉了。注意其中有汉字注释的部分。无论是数据服务还是哨兵。