独写分离,保证高并发场景下性能不会下降
图解主从模式如下图所示,除了master以外,其他的redis示例不可进行写操作,但所有redis实例都可以进行读操作。
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 63796381.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身份加入集群。
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 mm55d2d712b1f3f312b637f9b546f00cdcedc787sentinel-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 mm55d2d712b1f3f312b637f9b546f00cdcedc788sentinel-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实例中
图解如下图所示,三组主从复制组成一个集群,保证健壮性以及解决大数据写存储的问题
# 指定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挂掉master查看效果,15s后会诞生新的master 参考文献
Redis 单例、主从模式、sentinel 以及集群的配置方式及优缺点对比
Redis集群搭建很easy



