本节来介绍Redis的集群,也就是Redis的主从复制。
1.Redis集群
在Redis的实际业务中,读的量要远远大于写的量。这就对单点Redis的性能产生很大的压力。因此可以使用Redis集群将读业务和写业务分离开来,在主节点上写入数据,在从节点上读出数据,主节点的数据会自动同步到从节点。这就是Redis集群,也就是Redis的主从复制。
Redis的主从复制可以实现:1.数据备份,防止主节点宕机;2.读写分离,分担主节点压力;3.任务分离,比如一部分从节点担任数据备份任务,另一部分从节点担任数据计算任务;
2.Redis集群的架构

星型模型:以master为中心,周围直接连接多个slave节点。优点:效率高,只需要在master上插入数据,就可以同时同步给所有的slave。缺点:master宕机后,会从slave中选出一个新的master,其他slave将重新连接到该新的master上,配置HA比较麻烦。
线型模型:以master节点开始,后面依次连接多个slave,后一个slave连接到前一个slave,形成一条线。优点:master宕机后,只需要将紧挨着master的slave变成新的master即可,后面的slave不用变。缺点:效率低,master上写入数据,要一个接一个同步到后面所有slave节点。
在实际工作中,星型模型使用的比较多。
3.Redis主从复制的原理

4.Redis集群的实现(星型模型)
可以在同一台机器上启动三个redis实例,每个实例使用不同的端口号和不同的配置文件。
主节点:只负责写入数据,关闭RDB和AOF。
主节点master:bigdata:6379
vim redis6379.conf
# 关闭RDB
# save 900 1
# save 300 10
# save 60 10000
# 关闭AOF
appendonly no
# 指定端口号
port 6379
从节点:负责读出数据,开启RDB和AOF,并指定主节点。
# 从节点slave1:bigdata:6380
vim redis6380.conf
# 开启RDB
save 900 1
save 300 10
save 60 10000
# 指定RDB文件的名字
dbfilename dump6380.rdb
# 开启AOF
appendonly yes
# 指定AOF文件的名字
appendfilename "appendonly6380.aof"
# 指定端口号
port 6380
# 指定master的主机名和端口号
slaveof bigdata 6379
# 指定slave为只读
slave-read-only yes
# 从节点slave2:bigdata:6381
vim redis6381.conf
# 开启RDB
save 900 1
save 300 10
save 60 10000
# 指定RDB文件的名字
dbfilename dump6381.rdb
# 开启AOF
appendonly yes
# 指定AOF文件的名字
appendfilename "appendonly6381.aof"
# 指定端口号
port 6381
# 指定master的主机名和端口号
slaveof bigdata 6379
# 指定slave为只读
slave-read-only yes
5.启动Redis集群
# 进入Redis家目录
cd $REDIS_HOME
# 启动master
bin/redis-server conf/redis6379.conf
# 启动slave1
bin/redis-server conf/redis6380.conf
# 启动slave2
bin/redis-server conf/redis6381.conf
# 查看Redis进程
ps -ef | grep redis
6.使用Redis集群
示例1:在主节点上写入数据,在从节点上读出数据。
# 连接到主节点:6379
bin/redis-cli -p 6379
127.0.0.1:6379> set tom 1000
# 连接到从节点1:6380
bin/redis-cli -p 6380
127.0.0.1:6380> get tom
"1000"
# 连接到从节点2:6381
bin/redis-cli -p 6381
127.0.0.1:6381> get tom
"1000"
示例2:验证slave的只读特性。
127.0.0.1:6380> get tom
"1000"
127.0.0.1:6380> set mike 1234
(error) READONLY You can't write against a read only slave.
网友评论