基于Sentinel的Redis高可用方案.docx

上传人:b****8 文档编号:11399631 上传时间:2023-02-28 格式:DOCX 页数:16 大小:86.52KB
下载 相关 举报
基于Sentinel的Redis高可用方案.docx_第1页
第1页 / 共16页
基于Sentinel的Redis高可用方案.docx_第2页
第2页 / 共16页
基于Sentinel的Redis高可用方案.docx_第3页
第3页 / 共16页
基于Sentinel的Redis高可用方案.docx_第4页
第4页 / 共16页
基于Sentinel的Redis高可用方案.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

基于Sentinel的Redis高可用方案.docx

《基于Sentinel的Redis高可用方案.docx》由会员分享,可在线阅读,更多相关《基于Sentinel的Redis高可用方案.docx(16页珍藏版)》请在冰豆网上搜索。

基于Sentinel的Redis高可用方案.docx

基于Sentinel的Redis高可用方案

一、RedisSentinel是redis自带的集群管理工具,主要功能有

· 监控(Monitoring):

 RedisSentinel实时监控主服务器和从服务器运行状态。

· 提醒(Notification):

当被监控的某个 Redis 服务器出现问题时, RedisSentinel 可以向系统管理员发送通知,也可以通过 API 向其他程序发送通知。

· 自动故障转移(Automaticfailover):

当一个主服务器不能正常工作时,RedisSentinel 可以将一个从服务器升级为主服务器,并对其他从服务器进行配置,让它们使用新的主服务器。

当应用程序连接到Redis 服务器时, RedisSentinel会告之新的主服务器地址和端口。

RedisSentinel 是一个分布式系统,你可以在架构中运行多个 Sentinel 进程,这些进程通过相互通讯来判断一个主服务器是否断线,以及是否应该执行故障转移。

在配置RedisSentinel时,至少需要有1个Master和1个Slave。

当Master失效后,RedisSentinel会报出失效警告,并通过自动故障转移将Slave提升为Master,并提供读写服务;当失效的Master恢复后,RedisSentinel会自动识别,将Master自动转换为Slave并完成数据同步。

通过RedisSentinel可以实现Redis零手工干预并且短时间内进行M-S切换,减少业务影响时间。

二、拓扑结构

在两个服务器中分别都部署Redis和RedisSentinel。

当Master中的Redis出现故障时(Redis进程终止、服务器僵死、服务器断电等),由RedisSentinel将Master权限切换至SlaveRedis中,并将只读模式更改为可读可写模式。

应用程序通过RedisSentinal确定当前MasterRedis位置,进行重新连接。

根据业务模式,可以制定两种拓扑结构:

单M-S结构和双M-S结构。

如果有足够多的服务器,可以配置多M-S结构。

1、单M-S结构

单M-S结构特点是在Master服务器中配置MasterRedis(Redis-1M)和MasterSentinel(Sentinel-1M)。

Slave服务器中配置SlaveRedis(Redis-1S)和SlaveSentinel(Sentinel-1S)。

其中 MasterRedis可以提供读写服务,但是SlaveRedis只能提供只读服务。

因此,在业务压力比较大的情况下,可以选择将只读业务放在SlaveRedis中进行。

2、双M-S结构

双M-S结构的特点是在每台服务器上配置一个MasterRedis,同时部署一个SlaveRedis。

由两个RedisSentinel同时对4个Redis进行监控。

两个MasterRedis可以同时对应用程序提供读写服务,即便其中一个服务器出现故障,另一个服务器也可以同时运行两个MasterRedis提供读写服务。

缺点是两个Masterredis之间无法实现数据共享,不适合存在大量用户数据关联的应用使用。

3、优劣对比

两个结构各有优缺点,分别适用于不同的应用场景:

单M-S结构适用于不同用户数据存在关联,但应用可以实现读写分离的业务模式。

Master主要提供写操作,Slave主要提供读操作,充分利用硬件资源。

双(多)M-S结构适用于用户间不存在或者存在较少的数据关联的业务模式,读写效率是单M-S的两(多)倍,但要求故障时单台服务器能够承担两个MaterRedis的资源需求。

 

三、配置部署

单M-S结构和双M-S结构配置相差无几,下面以双M-S结构配置为例。

1、Redis配置

1)MasterRedis配置

在Server-1M上配置Redis-1M

#viredis-1M.conf

##masterredis-1M

##daemonize默认为no,修改为yes,启用后台运行

daemonize yes

#Redis 默认pid 文件位置redis.pid

#当运行多个 redis 服务时,需要指定不同的 pid 文件和端口

pidfileredis-1M.pid

##端口号

port6379

##验证口令   

requirepass************* 

masterauth************* 

#绑定可连接Redis的IP地址,不设置将处理所有请求

#bind127.0.0.1

#客户端连接的超时时间,单位为秒,超时后会关闭连接(0为不设置)

timeout0

#日志记录等级

loglevelnotice

#设置数据库的个数

databases16

#日志刷新策略(Master禁用)

#save9001

#save30010

#save6010000

#是否使用压缩镜像备份

rdbcompressionyes

#镜像备份文件的文件名

dbfilenameredis-1M_dump.rdb

#镜像备份路径,默认值为 ./

dir/redis/backup

#设置该数据库为其他数据库的从数据库,主库无需设置

#slaveof

#slaveof

#指定与主数据库连接时需要的密码验证,主库无需设置

#masterauth

#masterauth

#如果 slave-serve-stale-data 设置成 'no',slave会返回"SYNCwithmasterin#progress"错误信息,但 INFO和SLAVEOF命令除外。

slave-serve-stale-datayes

#客户端连接访问口令

#requirepassfoobared

#限制同时连接的客户数量,防止过多的client导致内存耗尽。

如果有足够内存可以不进行#设置

#maxclients10000

#设置redis能够使用的最大内存。

#maxmemory

##启用增量(Master禁用) 

appendonlyno

#增量日志文件名,默认值为appendonly.aof

appendfilenameappendonly.aof

#设置对 appendonly.aof 文件进行同步的频率

#always 表示每次有写操作都进行同步,everysec 表示对写操作进行累积,每秒同步一次。

#no表示等操作系统进行数据缓存同步到磁盘,都进行同步,everysec 表示对写操作进行累#积,每秒同步一次

appendfsynceverysec

#是否重置Hash表

#设置成yes后redis将每100毫秒使用1毫秒CPU时间来对redis的hash表重新hash,##可降低内存的使用。

当使用场景有较为严格的实时性需求,不能接受Redis时不时的对请##求有2毫秒的延迟的话,把这项配置为no。

如果没有这么严格的实时性要求,可以设置为 #yes,能够尽可能快的释放内存。

activerehashingyes

##Slave开启只读模式

slave-read-onlyyes

 

在Server-1S上配置Redis-2M

#viredis-2M.conf

##masterredis-2M

#Redis 默认pid 文件位置redis.pid

#当运行多个 redis 服务时,需要指定不同的 pid 文件和端口

pidfileredis-2M.pid

#镜像备份文件的文件名

dbfilenameredis-1M_dump.rdb

#日志刷新策略(Slave启用)

save9001

save30010

save6010000

#-----------------其他参数与redis-1M保持一致-----------------

daemonizeyes

#……

 

2)SlaveRedis配置

在Server-1S上配置Redis-1S

#Redis 默认pid 文件位置redis.pid

#当运行多个 redis 服务时,需要指定不同的 pid 文件和端口

pidfileredis-1S.pid

##端口号

port7379

#镜像备份文件的文件名

dbfilenameredis-1S_dump.rdb

#设置该数据库为其他数据库的从数据库,主库无需设置

Slaveofserver-1M6379

##启用增量(Master禁用) 

appendonlyyes

#-----------------其他参数与redis-1M保持一致-----------------

daemonizeyes

#…… 

 

在Server-1M上配置Redis-2S

#Redis 默认pid 文件位置redis.pid

#当运行多个 redis 服务时,需要指定不同的 pid 文件和端口

pidfileredis-2S.pid

##端口号

port7379

#镜像备份文件的文件名

dbfilenameredis-2S_dump.rdb

#设置该数据库为其他数据库的从数据库,主库无需设置

Slaveofserver-1S6379

#-----------------其他参数与redis-2M保持一致-----------------

daemonizeyes

#……

2、RedisSentinel配置

在Server-1M上配置Sentinel-1M

visentinel-1M.conf

#Masterredis-1M

#hostnameserver-1M

#ip192.168.84.129

#端口号

port26379

sentinelmonitorserver-1M192.168.84.12963791

sentineldown-after-millisecondsserver-1M5000

sentinelfailover-timeoutserver-1M900000

sentinelcan-failoverserver-1Myes

sentinelparallel-syncsserver-1M1

#Masterredis-1S

#hostnameserver-1S

#ip192.168.84.128

sentinelmonitorserver-1S192.168.84.12863791

sentineldown-after-millisecondsserver-1S5000

sentinelfailover-timeoutserver-1S900000

sentinelcan-failoverserver-1Syes

sentinelparallel-syncsserver-1S1

 

在Server-1S上配置Sentinel-1S

#Masterredis-1M

#hostnameserver-1M

#ip192.168.84.128

#端口号

port27379

sentinelmonitorserver-1M192.168.84.12963791

sentineldown-after-millisecondsserver-1M5000

sentinelfailover-timeoutserver-1M900000

sentinelcan-failoverserver-1Myes

sentinelparallel-syncsserver-1M1

 

#Masterredis-1S

#hostnameserver-1S

#ip192.168.84.128

sentinelmonitorserver-1S192.168.84.12863791

sentineldown-after-millisecondsserver-1S5000

sentinelfailover-timeoutserver-1S900000

sentinelcan-failoverserver-1Syes

sentinelparallel-syncsserver-1S1

3、启动服务

Server-1M启动redis

redis-serverredis-1M.conf

redis-serverredis-2S.conf

 

Server-1S启动redis

redis-serverredis-1S.conf

redis-serverredis-2M.conf

 

检测同步

Master日志检查:

[28162]10Nov23:

32:

11.810*DBloadedfromappendonlyfile:

0.000seconds

[28162]10Nov23:

32:

11.810*Theserverisnowreadytoacceptconnectionsonport6379

[28162]10Nov23:

32:

35.360*Slaveaskforsynchronization

[28162]10Nov23:

32:

35.360*StartingBGSAVEforSYNC

[28162]10Nov23:

32:

35.361*Backgroundsavingstartedbypid28170

[28170]10Nov23:

32:

35.373*DBsavedondisk

[28170]10Nov23:

32:

35.375*RDB:

0MBofmemoryusedbycopy-on-write

[28162]10Nov23:

32:

35.437*Backgroundsavingterminatedwithsuccess

[28162]10Nov23:

32:

35.438*Synchronizationwithslavesucceeded

 

Slave日志检查:

[28091]10Nov23:

27:

15.908*DBloadedfromappendonlyfile:

0.001seconds

[28091]10Nov23:

27:

15.908*Theserverisnowreadytoacceptconnectionsonport6389

[28091]10Nov23:

27:

15.944*ConnectingtoMASTER...

[28091]10Nov23:

27:

15.947*MASTER<->SLAVEsyncstarted

[28091]10Nov23:

27:

15.951*NonblockingconnectforSYNCfiredtheevent.

[28091]10Nov23:

27:

15.952*MasterrepliedtoPING,replicationcancontinue...

[28091]10Nov23:

27:

15.990*MASTER<->SLAVEsync:

receiving50bytesfrommaster

[28091]10Nov23:

27:

15.990*MASTER<->SLAVEsync:

LoadingDBinmemory

[28091]10Nov23:

27:

15.991*MASTER<->SLAVEsync:

Finishedwithsuccess

[28091]10Nov23:

27:

15.993*Backgroundappendonlyfilerewritingstartedbypid28094

[28094]10Nov23:

27:

15.998*SYNCappendonlyfilerewriteperformed

[28094]10Nov23:

27:

15.998*AOFrewrite:

0MBofmemoryusedbycopy-on-write

[28091]10Nov23:

27:

16.047*BackgroundAOFrewriteterminatedwithsuccess

[28091]10Nov23:

27:

16.047*ParentdiffsuccessfullyflushedtotherewrittenAOF(0bytes)

[28091]10Nov23:

27:

16.048*BackgroundAOFrewritefinishedsuccessfully

 

启动sentinel服务

redis-serversentinel-1M.conf--sentinel

[28156]10Nov23:

33:

22.337*+slaveslave192.168.84.129:

6389192.168.84.1296389@server-1S192.168.84.1286379

[28156]10Nov23:

39:

37.071#+sdownsentinel192.168.84.128:

26389192.168.84.12826389@server-1S192.168.84.1286379

[28156]10Nov23:

39:

37.072#+sdownsentinel192.168.84.128:

26389192.168.84.12826389@server-1M192.168.84.1296379

[28156]10Nov23:

40:

05.438#-sdownsentinel192.168.84.128:

26389192.168.84.12826389@server-1S192.168.84.1286379

[28156]10Nov23:

40:

05.438#-sdownsentinel192.168.84.128:

26389192.168.84.12826389@server-1M192.168.84.1296379

[28156]10Nov23:

40:

10.262*-dup-sentinelmasterserver-1S192.168.84.1286379#duplicateof192.168.84.128:

26389ore453a45a5e1421519dcbe00a199f203579b27b0f

[28156]10Nov23:

40:

10.263*+sentinelsentinel192.168.84.128:

26389192.168.84.12826389@server-1S192.168.84.1286379

[28156]10Nov23:

40:

10.263*-dup-sentinelmasterserver-1M192.168.84.1296379#duplicateof192.168.84.128:

26389ore453a45a5e1421519dcbe00a199f203579b27b0f

[28156]10Nov23:

40:

10.263*+sentinelsentinel192.168.84.128:

26389192.168.84.12826389@server-1M192.168.84.1296379

redis-serversentinel-1S.conf--sentinel

[16383]10Nov23:

40:

05.499*+slaveslave192.168.84.129:

6389192.168.84.1296389@server-1S192.168.84.1286379

[16383]10Nov23:

40:

05.500*+slaveslave192.168.84.128:

6389192.168.84.1286389@server-1M192.168.84.1296379

[16383]10Nov23:

40:

06.098*+sentinelsentinel192.168.84.129:

26379192.168.84.12926379@server-1S192.168.84.1286379

[16383]10Nov23:

40:

08.404*+sentinelsentinel192.168.84.129:

26379192.168.84.12926379@server-1M192.168.84.1296379

 

4、故障模拟检测

模拟redis-1M(Master192.168.84.1296379)故障,sentinel自动检测状态,然后切换至redis-1S(Slave192.168.84.1286389),并将redis-1M转移为redis-1S的slave,状态为+sdown。

[28156]11Nov00:

42:

48.431#+sdownmasterserver-1M192.168.84.1296379

[28156]11Nov00:

42:

48.431#+odownmasterserver-1M192.168.84.1296379#quorum1/1

[28156]11Nov00:

42:

56.570#+failover-detectedmasterserver-1M192.168.84.1296379

[28156]11Nov00:

42:

56.670#+failover-endmasterserver-1M192.168.84.1296379

[28156]11Nov00:

42:

56.670#+switch-masterserver-1M192.168.84.1296379192.168.84.1286389

[28156]11Nov00:

42:

57.055*+sentinelsentinel192.168.84.128:

26389192.168.84.12826389@server-1M192.168.84.1286389

[28156]11Nov00:

43:

01.688#+sdownslave192.168.84.129:

6379192.168.84.1296379@server-1M192.168.84.1286389

 

四、备份恢复

1、备份策略

Redis提供两种相对有效的备份方法:

RDB和AOF。

RDB是在某个时间点将内存中的所有数据的快照保存到磁盘上,在数据恢复时,可以恢复备份时间以前的所有数据,但无法恢复备份时间点后面的数据。

AOF是以协议文本的方式,将所有对数据库进行过写入的命令(及其参数)记录到 A

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动物植物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1