集群
-
Redis有三种集群模式
-
主从模式
-
Sentinel模式
-
Cluster模式
-
主从复制缺点
一旦主节点宕机,写服务无法使用,就需要手动去切换,重新选取主节点,手动设置主从关系。
-
哨兵模式的缺点
-
当master挂掉的时候,sentinel 会选举出来一个 master,选举的时候是没有办法去访问Redis的,会存在访问瞬断的情况;
-
哨兵模式,对外只有master节点可以写,slave节点只能用于读。尽管Redis单节点最多支持10W的QPS,但是在电商大促的时候,写数据的压力全部在master上。
-
Redis的单节点内存不能设置过大,若数据过大在主从同步将会很慢;在节点启动的时候,时间特别长;
①、Redis主从复制
- 什么是主从复制
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能由主节点到从节点。
- 主从复制的作用
- 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
- 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
- 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
- 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
- 主从复制可以分为3个阶段
- 连接建立阶段(即准备阶段)
- 数据同步阶段
- 命令传播阶段
- 主从同步策略
主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。
单机配置
①、编写配置文件
新建redis6379.conf
# 修改配置文件
vim redis6379.conf
# 修改内容
include /usr/local/redis-6.2.6/redis.conf
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb
新建redis6380.conf
# 修改配置文件
vim redis6379.conf
# 修改内容
include /usr/local/redis-6.2.6/redis.conf
pidfile /var/run/redis_6380.pid
port 6380
dbfilename dump6380.rdb
新建redis6381.conf
# 修改配置文件
vim redis6379.conf
# 修改内容
include /usr/local/redis-6.2.6/redis.conf
pidfile /var/run/redis_6381.pid
port 6381
dbfilename dump6381.rdb
②、启动
# 分别启动三台redis
./redis-server ../redis6379.conf
./redis-server ../redis6380.conf
./redis-server ../redis6381.conf
③、从库设置
配从库不配主库
# slaveof <ip> <port> - ip: 主库地址,port: 主库端口
SLAVEOF 127.0.0.1 6379
④、查看主从状态
执行 slaveof 后 查看状态信息
# 查看连接信息
info replication
②、Redis哨兵模式
- 主从切换技术
当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。
- 哨兵概述
哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。
- 哨兵作用
- 集群监控:负责监控redis master和slave进程是否正常工作
- 消息通知:如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员
- 故障转移:如果master node挂掉了,会自动转移到slave node上
- 配置中心:如果故障转移发生了,通知client客户端新的master地址
哨兵搭建
①、创建哨兵
新建sentinel-26379.conf文件
其他客户端也需要配置
- 参数:
-
sentinel monitor mymaster 192.168.92.128 6379 2 配置的含义是:该哨兵节点监控192.168.92.128:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移。
修改文件
vim sentinel-26379.conf
修改内容
端口
port 26379
守护进程运行
daemonize yes
日志文件
logfile “26379.log”
监控的 主节点名称(mymaster) 主节点ip(192.168.66.11) 主节点端口(6379) 总节点的一半+1(2)
sentinel monitor mymaster 192.168.66.11 6379 2
②、启动哨兵
# 启动哨兵
cd /.../src
./redis-sentinel ../sentinel-26379.conf
# 查看状态
./redis-cli -p 26379
info sentinel
③、Cluster模式
Redis集群是一个由多个主从节点群组成的分布式服务集群,它具有复制、高可用和分片特性。Redis的集群搭建最少需要3个master节点,我们这里搭建3个master,每个下面挂一个slave节点,总共6个Redis节点;
Cluster配置
①、配置Cluster文件
-
修改redis.conf文件以下内容【所有客户端都要配置】
修改redis.conf文件以下内容
vim /…/redis.conf
修改内容
port 8001
daemonize yes
pidfile “/var/run/redis_8001.pid”指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据
dir /usr/local/redis/redis-cluster/8001/
启动集群模式
cluster-enabled yes
集群节点信息文件,这里800x最好和port对应上
cluster-config-file nodes-8001.conf
节点离线的超时时间
cluster-node-timeout 5000
去掉bind绑定访问ip信息
bind 127.0.0.1
关闭保护模式
protected-mode no
启动AOF文件
appendonly yes
如果要设置密码需要增加如下配置:
设置redis访问密码
requirepass itxiong
设置集群节点间访问密码,跟上面一致
masterauth itxiong
②、创建集群
- 参数:
-
-a:密码
-
–cluster-replicas:
- –cluster-replicas 1:表示1个master下挂1个slave;
- –cluster-replicas 2:表示1个master下挂2个slave。
启动
/usr/local/redis/src/redis-cli -a redis-pw –
cluster create --cluster-replicas 1 192.168.66.101:8001 192.168.66.101:8002 192.168.66.102:8001 192.168.66.102:8002 192.168.66.103:8001 192.168.66.103:8002
③、查看帮助命令
- 参数:
-
create:创建一个集群环境host1:port1 … hostN:portN
-
call:可以执行redis命令
-
add-node:将一个节点添加到集群里,第一个参数为新节点的ip:port,第二个参数为集群中任意一个已经存在的节点的ip:port
-
del-node:移除一个节点
-
reshard:重新分片
-
check:检查集群状态
查看帮助
src/redis‐cli --cluster help
④、验证集群
连接任意一个客户端
- 参数:
-
‐a表示服务端密码
-
‐c表示集群模式
-
-h指定ip地址
-
-p表示端口号
连接客户端
/usr/local/redisd/src/redis-cli -a redis-pw -c -h 192.168.66.101 -p 8001
⑤、查看集群的信息
cluster info