redis高可用

在Redis中,实现高可用的技术主要包括持久化、主从复制、哨兵和 Cluster集群。

持久化

Redis是内存数据库,数据都是存储在内存中,为了避免服务器断电等原因导致Redis进程异常退出后数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘;当下次Redis重启时,利用持久化文件实现数据恢复。

持久化的分类

rdb

原理:周期性的把内存中的数据保存在磁盘中。

rdb的分类

1、手动触发:

2、自动触发:save m n(假设 900 10 则表示900秒内或者10次语句执行,则触发RDB持久化)

3、特殊触发:当手动关闭时redis时,会进行RDB方式持久化,关闭时shutdown

注: kill 删除进程不会触发RDB。

工作流程

redis高可用_第1张图片

rdb的优缺点

缺点:

1、数据完整性不如AOE。

2、RDB类似于快照(完备)。

3、在进行备份时会阻塞进程。

优点:

1、持久化的速度比较快(因为保存的是数据结果),在写入到*.rcb持久化文件,会进行压缩,来减小自身的体积。

2、在集群中,redis主从复制 从-》主服务器进行同步,默认先用RDB文件进行恢复操作,所以同步性能较高。

aof

原理:从redis的操作日志记录中将执行的过程同步到磁盘中。

aof 的分类

1、手动触发

2、自动触发:

1、 always 每条语句,同步执行持久化有强一致性的要求的场景。

2)、No 不进行持久化。

3、every second 每秒进行一次AOE持久化 (建议使用,均衡性场景)。

AOF触发规则

1、always一直触发aof 的持久化

2、everysecond 每秒触发一次持久化

3、no 不进行持久化

出现 在 1s 内执行20条语句

1、always: 每执行一条语句就出发一次aof持久化

2、everysecond:每秒出发执行一次aof持久化操作

3、no: 从不进行持久化

工作流程

redis高可用_第2张图片

aof 优缺点

缺点

1、执行语句一致的情况下,aof备份的内容更大。因为RDB备份的是结果,而AOE备份的是语句。

2、AOF消耗性能更大,占用磁盘越来越大。(类似于mysql增量备份)

优点

1、支持秒级持久化、兼容性好。

主从复制

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。

主从复制的作用

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

2、故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复。

3、负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务,分担服务器负载,可以提高Redis服务器的并发量。

4、高可用基石:主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

主从复制的工作流程

redis高可用_第3张图片

(1)若启动一个Slave节点,则它会向Master节点发送sync命令,请求同步连接。

(2)收到连接后,Master节点都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中。

(3)后台进程完成缓存操作之后,Master节点就会向Slave节点发送数据文件,Slave节点将数据文件保存到硬盘上,然后将其加载到内存中,接着Master节点就会将修改数据的所有操作一并发送给Slave端节点。

(4)复制完成之后,从节点会持续接收主节点发送的新的操作命令

总的来说 通过主从复制,redis 能够实现数据的备份 (master产生的数据能slave备份),负责均衡 (读操作可以分摊到slave上去) 和高可用 (maste宕机后,可以由slave进行故障切换)。

命令

1、修改 Redis 配置文件

主节点

vim /etc/redis/6379.conf
bind 0.0.0.0						#70行,修改监听地址为0.0.0.0
daemonize yes						#137行,开启守护进程
logfile /var/log/redis_6379.log		#172行,指定日志文件目录
dir /var/lib/redis/6379				#264行,指定工作目录
appendonly yes						#700行,开启AOF持久化功能

/etc/init.d/redis_6379 restart

从节点

vim /etc/redis/6379.conf
bind 0.0.0.0						#70行,修改监听地址为0.0.0.0
daemonize yes						#137行,开启守护进程
logfile /var/log/redis_6379.log		#172行,指定日志文件目录
dir /var/lib/redis/6379				#264行,指定工作目录		
replicaof 192.168.11.22 6379        #288行,指定要同步的Master节点IP和端口
appendonly yes						#700行,开启AOF持久化功能

/etc/init.d/redis_6379 restart

2、 验证主从效果

在Master节点上验证从节点
redis-cli info replication

redis高可用_第4张图片

哨兵

哨兵是一个用于管理多个reids服务的系统,它提供监控、通知、自动故障转移、配置提供服务的功能,以实现redis高可用性。

哨兵的核心功能

在主从复制的基础上,哨兵引入了主节点的自动故障转移。

工作原理

redis高可用_第5张图片

 

哨兵模式的作用

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

通知(提醒):某个redis实例有问题,哨兵可以通过API向管理员或者其他应用发信通知。

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

配置提供服务:客户端可以使用哨兵来查询被认证的master节点及所有slave节点。

命令

1、修改 Redis 哨兵模式的配置文件

vim /opt/redis-5.0.7/sentinel.conf
protected-mode no								#17行,关闭保护模式
port 26379										#21行,Redis哨兵默认的监听端口
daemonize yes									#26行,指定sentinel为后台启动
logfile "/var/log/sentinel.log"					#36行,指定日志存放路径
dir "/var/lib/redis/6379"						#65行,指定数据库存放路径
sentinel monitor mymaster 192.168.11.22 6379 2	#84行,修改 指定该哨兵节点监控192.168.10.22:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel down-after-milliseconds mymaster 30000	#113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000		#146行,故障节点的最大超时时间为180000(180秒)

2、启动哨兵模式,先启master,再启slave

cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &

 3、查看哨兵信息

redis-cli -p 26379 info Sentinel

redis高可用_第6张图片

Cluster集群

redis cluster 是一个分布式数据库解决方案,提供一组redis服务之间的网络接口。

redis 集群 是一个提供高性能、高可用、数据分片、故障转移特性的分布式数据解决方案。

cluster集群的主要功能

数据分片:redis cluster 实现了数据自动分片,每个节点都会保存一份数据。Redis集群有16384个哈希槽(编号0-16383)

故障转移: 若个某个节点发生故障,cluster会自动将其上的分片迁移个其他节点。

高性能:由于数据分片和网络,redis cluster提供高性能的数据操作。

高可用:如果单个节点挂掉了,那么redis cluster 内部会自动进行故障恢复。

命令

1、搭建Redis 群集模式

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

for i in {1..6}
do
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$i
done

2、开启群集功能

#其他5个文件夹的配置文件以此类推修改,注意6个端口都要不一样。
cd /etc/redis/redis-cluster/redis6001
vim redis.conf
#bind 127.0.0.1							#69行,注释掉bind 项,默认监听所有网卡
protected-mode no						#88行,修改,关闭保护模式
port 6001								#92行,修改,redis监听端口,
daemonize yes							#136行,开启守护进程,以独立进程启动
cluster-enabled yes						#832行,取消注释,开启群集功能
cluster-config-file nodes-6001.conf		#840行,取消注释,群集名称文件设置
cluster-node-timeout 15000				#846行,取消注释群集超时时间设置
appendonly yes							#700行,修改,开启AOF持久化

3、启动redis节点

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

ps -ef | grep redis

redis高可用_第7张图片

redis高可用_第8张图片4、启动集群 

redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1

redis高可用_第9张图片

 5、测试群集

redis-cli -p 6001 -c	
cluster slots	        #查看节点的哈希槽编号范围

redis高可用_第10张图片

你可能感兴趣的:(redis,java,数据库)