Redis 部署模式

192 阅读4分钟

Redis 支持多种部署模式,单机模式、主从模式、哨兵模式、集群模式

单机模式

最简单的部署模式,编译之后,启动即可

make && cd src && make install

后台启动,配置 redis.conf 文件

daemonize yes
主从模式

主从模式设置一台主库,一台或多台从库,主库进行读写操作,从库进行备份操作,主库的写操作会同步到从库。还可以实现读写分离,主库用于写数据,从库用于读数据。 如果从库宕机,不影响其他的从库和主库;如果主库宕机,集群不能执行写操作,但可以正常读。

从库启动时,会向主库发送一个 SYNC 命令,这样主库会暂停执行客户端的命令,并缓存下来,然后主库进行一次快照保存操作,保存执行完成之后,会将RDB文件和缓存的命令一并发送到从库,从库执行一次恢复操作,同时执行主库发送来的命令。之后,主库每接受到写命令,都会同步到从库。

相关配置 主库:

### redis.conf
bind 192.168.1.1
daemonize yes
appendonly yes
masterauth 123456
requirepass 123456

从库:

### redis.conf
bind 192.168.1.2
daemonize yes
appendonly yes
masterauth 123456
requirepass 123456
replicaof 192.168.1.1 6379
哨兵模式

可以使用主从模式进行备份,也可以实现读写分离,但是简单的主从模式并不能满足高可用。因为只有一台主库,主库宕机之后,将不再支持写操作。

因此可以使用哨兵模式,监控 redis 的运行情况,实现主从互换,保证集群的可用性

哨兵模式中每个哨兵会以一定的频率向设定的主库、从库以及其他哨兵发送ping 命令,如果其中一个哨兵,发现主库距离上一次有效回复的时间过长,大于等于设定的时长,就会认为该主库主观下线,然后其他哨兵会每秒向该主库发送ping命令,如果有足够数量的哨兵发现该主库主观下线,则该主库会被标记为客观下线状态。然后选择其他从库中的一个作为主库,同时修改响应的配置文件。

相关配置 主从相关配置查看主从模式 哨兵配置

### sentinel.conf
daemonize yes
# 主库别名 主库IP 主库端口 触发故障切换的最少哨兵数
sentinel monitor mymaster 192.168.30.128 6379 2
sentinel auth-pass mymaster 123456
# 设置距上一次有效回复多长时间会认为主观下线,默认30s
sentinel down-after-milliseconds mymaster 30000

启动哨兵

redis-sentinel sentinel.conf
集群模式

Redis 将数据存储到内存中,内存是有限的,当一台服务器不能存储所有数据的情况下,上述模式就不能满足需求了。

这是可以采用集群模式,水平扩展,将数据分片,分散到多个机器上。

集群模式拥有多个redis 节点,集群模式可以说是哨兵模式+主从模式的结合体,但是集群的故障转移功能是由集群中的主库完成的,所以并不需要哨兵配置。集群模式支持在线增加、删除节点,不支持同时处理多个 key。

集群需要至少三个主库才可以正常运行。

相关配置

  1. 每个节点的做如下配置
### redis.conf
daemonize yes
appendonly yes
masterauth 123456
requirepass 123456
cluster-enabled yes
cluster-config-file nodes.conf # 自动生成
cluster-node-timeout 15000 # 节点之间连接的超时时间,ms
  1. 然后启动每个节点
  2. 创建集群 如果使用的 Redis 版本是5.0以上,使用以下方式创建集群:
redis-cli --cluster create ip1:port1 ip2:port2 ip3:port3 ip4:port4 ip5:port5 ip6:port6 --cluster-replicas 1

如果使用低版本,需要用以下方式创建集群:

Redis 的集群脚本需要 Ruby 环境,所以需要首先确认并安装 Ruby 环境

yum -y install ruby

yum -y install rubygems

gem install redis

redis-trib.rb create --replicas 1 ip1:port1 ip2:port2 ip3:port3 ip4:port4 ip5:port5 ip6:port6

其中 --replicas 指从库的个数

也可以使用 utils/create-cluster 脚本去创建集群

create-cluster create # 创建
create-cluter start # 启动
create-cluster stop # 停止