主从模式
作用
独写分离,保证高并发场景下性能不会下降
图解主从模式
如下图所示,除了master以外,其他的redis示例不可进行写操作,但所有redis实例都可以进行读操作。
部署步骤
创建conf文件并加以配置
6379.conf
bind 127.0.0.1
port 6379
logfile "6379.log"
dbfilename "dump-6379.rdb"
6380.conf
bind 127.0.0.1
port 6380
logfile "6380.log"
dbfilename "dump-6380.rdb"
slaveof 127.0.0.1 6379
6381.conf
bind 127.0.0.1
port 6381
logfile "6381.log"
dbfilename "dump-6381.rdb"
slaveof 127.0.0.1 6379
启动
/usr/local/bin/redis-server 6379.conf &
/usr/local/bin/redis-server 6380.conf &
/usr/local/bin/redis-server 6381.conf &
尝试slave写操作会报READONLY You can’t write against a read only replica.
set aa "1"
(error) READONLY You can't write against a read only replica.
master进行写操作并查看slave是否会同步该数据
master写
set aa "123"
slave查看
get aa
"123"
sentinel
作用
主从复制保证了高并发访问下,性能不会下降,但master随时都有宕机的可能,一旦宕机,就无法进行写操作,两个slave就一无是处,所以我们需要在主从复制基础上增加哨兵保证当master宕机后从slave中选举心的master
图解
如下图所示,该示例笔者使用三个哨兵,只要半数以上的哨兵认为master挂了,那么就会从slave中选举新的master,即使原master复活也只能以slave身份加入集群。
部署步骤
创建sentinel-26379.conf,sentinel-26380.conf和sentinel-26381.conf
sentinel-26379.conf
port 26379
daemonize yes
logfile "26379.log"
dir /opt/soft/redis/data
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
sentinel myid mm55d2d712b1f3f312b637f9b546f00cdcedc787
sentinel-26380.conf
port 26380
daemonize yes
logfile "26380.log"
dir /opt/soft/redis/data
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
sentinel myid mm55d2d712b1f3f312b637f9b546f00cdcedc788
sentinel-26381.conf
port 26381
daemonize yes
logfile "26381.log"
dir /opt/soft/redis/data
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
sentinel myid mm55d2d712b1f3f312b637f9b546f00cdcedc789
启动
/usr/local/bin/redis-sentinel sentinel-26379.conf
/usr/local/bin/redis-sentinel sentinel-26380.conf
/usr/local/bin/redis-sentinel sentinel-26381.conf
查看哨兵搭建是否成功
如下所示,连接客户端后查看哨兵状态
/usr/local/bin/redis-cli -p 26379
127.0.0.1:26379> info sentinel
若sentinels=3则说明哨兵部署成功了
# 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=odown,address=127.0.0.1:6379,slaves=0,sentinels=3
查看当前master为79
[root@VM-0-13-centos myredis]# /usr/local/bin/redis-cli -p 638179
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=700,lag=1
slave1:ip=127.0.0.1,port=6379,state=online,offset=700,lag=1
master_failover_state:no-failover
master_replid:bdedf5e127208fafedf2fd67939884de2325c089
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:700
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:700
杀死master查看哨兵是否会选举新的master
如下所示,之后通过其他客户端查看会发现新的master
127.0.0.1:6381> SHUTDOWN
集群
作用
解决读写分离,和避免单体故障,接下来就是解决高并发大数据存储问题,集群的道理很简单,即增加大量redis实例,通过均匀分配槽赖保证大数据均匀存储在各个redis实例中
图解
如下图所示,三组主从复制组成一个集群,保证健壮性以及解决大数据写存储的问题
部署步骤
创建6个配置文件
# 指定Redis节点端口
port 6370
# 指定对应进程文件
pidfile /var/run/redis_6370.pid
# 每个节点的rdb持久化文件
dbfilename dump6370.rdb
# 开启集群,这个比较重要
cluster-enabled yes
#指定每个节点的集群配置文件,这个比较重要
cluster-config-file nodes-6370.conf
启动
/usr/local/bin/redis-server cluster-6379.conf
/usr/local/bin/redis-server cluster-6379.conf &
/usr/local/bin/redis-server cluster-6380.conf &
/usr/local/bin/redis-server cluster-6381.conf &
/usr/local/bin/redis-server cluster-6390.conf &
/usr/local/bin/redis-server cluster-6391.conf &
创建集群
/usr/local/bin/redis-cli --cluster create --cluster-replicas 1 127.0.0.1:6370 127.0.0.1:6380 127.0.0.1:6390 127.0.0.1:6371 127.0.0.1:6381 127.0.0.1:6391
进入任意一台客户端使用命令查看当前集群是否起来
若
cluster info
存储数据
如下所示,由于创建了集群,所以需要加 -c
,保证存储数据时,保证对应数据不属于当前的槽会跳转到别的槽
/usr/local/bin/redis-cli -c -p 6370