redis高可用主从复制,哨兵模式,cluster集群模式

redis高可用(主从复制,哨兵模式,cluster集群模式)

哨兵模式:只能恢复简单的,无法对从节点进行自动故障转移,在读写分离场景下。从节点故行会导致读服务不可用,需要对从节点做额外的监控,切换操作。

#主从复制的作用:

数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

故障恢复,当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复,实际上是一种服务的冗余。

负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写redis数据时应用连接主节点,读Redis数母时应用连接及节占),个相服条器负载,尤工是在写少远多的场是下,通过多个从节占分相速负载,可以大大提高Redts那各器的并发量。

高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

#主从复制流程:

(1) 若启动一个slave机器进程,则它会向Master机器发送一个"sync command"命令,请求同步连接。

(2)无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作),同Master还会记录改数据的所有命令并缓存在数据文件中。

(3)后台进程完成缓存快作之后,Master机器就会向slave机器发送数据文件,slave洲机器将数据文件保在到使盘上,然后将其加载到内存中,按着Master机器就会将修改数据的所有换作一并发送给Slave端机器。若slave出现故障导致宕机,则恢复正常后会自动重新连接。

(4)Master机器收到slave端机器的连接后,将其完整的数据文件发送给slave端机器,如果aster同时收到多个slave发来的同步请求,则haster会在后台启动一个进程以保存数据文件,然后将其发送给所有的slave端机器,确保所有的slave端机器都正常。

如何判断主从数据不一致,通过命令查看偏移量,保持一致重新连接一次(手动的话:主也可以bgsave创建rdb传给从还可以

,把从原来的rdb文件删除,再与主对接一次,主持久化会自动将rdb自己会传给从。)

从服务器repliicaof 主的地址

vim /usr/local/redis/log/6379_log

info replication查看状态

sismember class

哨兵作用

监控:哨兵会不断地检查主节点和从节点是否运作正常

自动故障转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效的主节点的其中一个从节点升级为主节点,并让其他从节点改为复制新的主节点

通知:哨兵可以将故障转移的结果发送给客户端

哨兵奇数台,三个起步

#故障转移机制:

1.由哨兵节点定期监控发现主节点是否出现了故障每个哨兵节点每隔1秒会向主节点、从节点及其它哨兵节点发送一次ping命令做一次心跳检测。如果主节点在一定时间范围内不回复或者是回复一个错误消息,那么这个哨兵就会认为这个主节点主观下线了 (单方面的)。当超过半数哨兵节点认为该主节点主观下线了,这样就客观下线了。

2,当主节点出现故障,此时哨兵节点会通过Rat算法 (选举算法)实现选举机制共同选举出一个哨兵节点为leader,来负责处理主节点的故障转移通知。所以整个运行哨兵的集群的数量不得少于3个节点。

3.由leader哨兵节点执行故障转移,过程如下:。将某一个从节点升级为新的主节点,让其它从节点指向新的主节点;·若原主节点恢复也变成从节点,并指向新的主节点;·通知客户端主节点已经更换。

需要特别注意的是,客观下线是主节点才有的概念:如果从节点和哨兵节点发生故障,被哨兵主观下线后,不会再有后续的客观下线和故障转移操

#主节点的选举:

1.过滤掉不健康的(已下线的) ,没有回复哨兵 ping 响应的从节点

2.选择配置文件中从节点优先级配置最高的。 (replica-priority,默认值为100)

3.选择复制偏移量最大,也就是复制最完整的从节点。

setinel.cnf文件

哨兵节点的端口号26376

设置master地址最小下线数量

sentinel monitor mymaster 192.168.232.27 6379 2

vim /usr/local/redis/conf/sentinel.conf
protected-mode no                                    #6行,关闭保护模式
port 26379                                            #10行,Redis哨兵默认的监听端口
daemonize yes                                        #15行,指定sentinel为后台启动
pidfile /usr/local/redis/log/redis-sentinel.pid        #20行,指定 PID 文件
logfile "/usr/local/redis/log/sentinel.log"            #25行,指定日志存放路径
dir /usr/local/redis/data                            #54行,指定数据库存放路径
sentinel monitor mymaster 192.168.80.10 6379 2        #73行,修改 指定该哨兵节点监控192.168.80.10:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
#sentinel auth-pass mymaster abc123                    #76行,可选,指定Master节点的密码,仅在Master节点设置了requirepass
sentinel down-after-milliseconds mymaster 3000        #114行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000            #214行,同一个sentinel对同一个master两次failover之间的间隔时间(180秒)

运行哨兵

redis-sentinel sentinel.conf &

info sentinel

模拟故障

killall redis-server

redis集群

集群由多组节点node组成,redis的数据分布在这些节点中。集群的节点分布为主节点负责读写请求和集群信息维护;从节点只进行主节点数据和状态的复制

集群的作用

1)数据分区,解决写操作无法负载均衡,

2)高可用

redis hash槽0~16383

cd /usr/local/redis/
mkdir -p redis-cluster/redis600{1..6}

cd /usr/local/redis/
mkdir -p redis-cluster/redis600{1..6}
for i in {1..6}

do

cp /opt/redis-7.0.9/redis.conf /usr/local/redis/redis-cluster/redis600$1

cp /opt/redis-7.0.9/src/{redis-server,redis-cli} /usr/local/redis/redis-cluster/redis600$1

done

#开启群集功能:
#其他5个文件夹的配置文件以此类推修改,注意6个端口都要不一样。
cd /usr/local/redis/redis-cluster/redis6001
vim redis.conf
#bind 127.0.0.1                                    #87行,注释掉bind项,默认监听所有网卡
protected-mode no                                #111行,关闭保护模式
port 6001                                        #138行,修改redis监听端口
daemonize yes                                    #309行,设置为守护进程,后台启动
pidfile /usr/local/redis/log/redis_6001.pid        #341行,指定 PID 文件
logfile "/usr/local/redis/log/redis_6001.log"    #354行,指定日志文件
dir ./                                            #504行,指定持久化文件所在目录
appendonly yes                                    #1379行,开启AOF
cluster-enabled yes                                #1576行,取消注释,开启群集功能
cluster-config-file nodes-6001.conf                #1584行,取消注释,群集名称文件设置
cluster-node-timeout 15000                        #1590行,取消注释群集超时时间设置

#启动redis节点

分别进入那六个文件夹,执行命令:redis-server redis.conf ,来启动redis节点
cd /usr/local/redis/redis-cluster/redis6001
redis-server redis.conf

for d in {1..6}
do
cd /usr/local/redis/redis-cluster/redis600$d
./redis-server redis.conf
done

ps -ef | grep redis
节点扩容

创建节点:

redis-cli -p 6001
cluster meet 127.0.0.1 6007
cluster meet 127.0.0.1 6008

#查看集群节点

redis-cli -c -p 6008 cluster nodes

将127.0.0.1:6008创建为127.0.0.1:6007的从节点。命令里需要指定一个已有节点以便于获取集群信息和主节点的node ID

redis-cli -p 6008
cluster replicate e44678abed249e22482559136bf45280fd3ac281

查看哈希槽并添加

clustor slots

redis-cli -p 6007 --cluster reshard 127.0.0.1:6001

集群总线16379

数据节点6379

步骤:添加新节点,主从对接,转移其他组的hash槽给新节点

查看集群状态
redis-cli -p 6001 cluster nodes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值