redis教程篇(七)-redis主从模式、sentinel、集群部署教程

主从模式

作用

独写分离,保证高并发场景下性能不会下降

图解主从模式

如下图所示,除了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

挂掉master查看效果,15s后会诞生新的master

参考文献

Redis 单例、主从模式、sentinel 以及集群的配置方式及优缺点对比
Redis集群搭建很easy

猜你喜欢

转载自blog.csdn.net/shark_chili3007/article/details/121025754