ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Redis主从复制与哨兵机制

2020-06-29 20:58:49  阅读:250  来源: 互联网

标签:mymaster 主从复制 Redis redis 哨兵 sentinel 服务器


主从复制

  通过持久化功能,Redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,

但是由于数据是存储在一台服务器上的,如果这台服务器出现故障,比如硬盘坏了,也会导致数据丢失。

  为了避免单点故障,我们需要将数据复制多份部署在多台不同的服务器上,

即使有一台服务器出现故障其他服务器依然可以继续提供服务。

这就要求当一台服务器上的数据更新后,自动将更新的数据同步到其他服务器上,这时候就用到了Redis的主从复制。

   Redis提供了复制(replication)功能来自动实现多台redis服务器的数据同步,

我们可以通过部署多台redis,并在配置文件中指定这几台redis之间的主从关系,主负责写入数据,同时把写入的数据实时同步到从机器,

这种模式叫做主从复制,即master(主服务器)/slave(从服务器),并且redis默认master用于写,slave用于读,向slave写数据会导致错误。

Redis的主从复制的配置

第一种方式: 修改配置文件

  启动时,服务器读取配置文件,并自动成为指定服务器的从服务器,从而构成主从复制的关系.

# slaveof <masterip> <masterport>
slaveof 127.0.0.1 6379

第二种方式: 在启动redis服务器时(cmd中)

  使用 redis-server.exe  redis-server --slaveof <master-ip> <master-port>, 在启动的时候,指定当前redis服务器成为某个主redis服务器的从服务器.

redis-server.exe  redis.windows.conf --slaveof 127.0.0.1 6379

启动成功

 登录到redis, 使用info replication可以查看主从复制的服务器的信息

//cmd中
info replication

 

容灾处理

  当Master服务出现故障,需手动将slave中的一个提升为master, 剩下的slave挂至新的master上(冷处理:机器挂掉了,再处理)

命令(cmd):

slaveof no one,将一台slave服务器提升为Master (提升某slave为master)
slaveof 主服务器ip 主服务器端口号(将slave挂至新的master上)

哨兵机制

  前面我们使用主从复制,解决了单点故障问题,从而提高了redis服务器的稳定性, 但是当redis主服务器出现故障了, 我们采用的是手动来进行故障的迁移,也就是前面说的,手动把某个从服务器提升为主服务器,再把其他从服务器重新作为新主服务器的从机,但是这种手动不够智能, 需要工作人员每时每分盯着,哨兵机制自动处理服务器故障.

  Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务:

  • 监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。
  • 提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。
  • 自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master; 当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。

sdown(主观认为宕机 Subjective Down:每个哨兵(sentinel) 会向其它哨兵(sentinel)、master、slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂。

odown(客观上的真正宕机 Objective Down):若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master"彻底死亡

它们会选举出一个 Sentinel 节点来完成自动故障转移的工作(通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置),同时会将这个变化实时通知给 Redis 应用方。整个过程完全是自动的,不需要人工来介入,所以这套方案很有效地解决了 Redis 的高可用问题。

  虽然哨兵(sentinel) 释出为一个单独的可执行文件 redis-sentinel ,但实际上它只是一个运行在特殊模式下的 Redis 服务器,你可以在启动一个普通 Redis 服务器时通过给定 --sentinel 选项来启动哨兵(sentinel)。

 本机配置redis集群,模拟主从复制,哨兵机制

1、创建三个redis服务器(因为本机ip只有一个,只能通过改端口,或者通过局域网来实现案例)

 2、在每一个redis中更改配置文件redis.windows.conf改为(redis6379.conf、redis6380.conf、redis6381.conf)方便区分

将6379设置为主服务器,6380、6381为从服务器

1、主服务器中的配置不做改变
2、从服务器(6380、6381)添加如下配置
# slaveof <masterip> <masterport>
slaveof 127.0.0.1 6379

3、创建服务器快捷启动方式(cmd命名:方便快速启动)--start.bat

//title为窗口名
//三台redis配置文件名填对应的
title redis6379
redis-server.exe redis6379.conf

4、创建客户端快捷启动方式(cmd命名:方便快速启动)--startClient.bat

//窗口文件名
title redisCilent6379
//客户端配置文件名  -h ip -p 端口
redis-cli.exe -h 127.0.0.1 -p 6379

以上配置就完成了主从复制

哨兵机制

5、在redis6379文件夹中创建三个哨兵配置文件(任意redis服务器都可以,或者创建一/三个新的redis)

//文件名 startsentinel-10001.bat
port 10001
sentinel monitor mymaster 127.0.0.1 6379 1
sentinel down-after-milliseconds mymaster 5000 
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 15000
sentinel monitor mymaster 127.0.0.1 6379 1 最后的1表示有几个哨兵服务器监控sdown,
如果放在一个redis服务器中设置为1,如果放在三个redis,设置为2
//文件名 startsentinel-10002.bat
port 10002
sentinel monitor mymaster 127.0.0.1 6380 1
sentinel down-after-milliseconds mymaster 5000 
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 15000
//文件名 startsentinel-10003.bat
port 10003
sentinel monitor mymaster 127.0.0.1 6381 1
sentinel down-after-milliseconds mymaster 5000 
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 15000

6、哨兵的快捷启动方式(.bat文件)

//文件名:startsentinel-10001.bat
title sentinel1001
redis-server sentinel-10001.conf --sentinel
//文件名:startsentinel-10002.bat
title sentinel1002
redis-server sentinel-10002.conf --sentinel
//文件名:startsentinel-10003.bat
title sentinel1003
redis-server sentinel-10003.conf --sentinel

7、最后开启服务器

分别点击三个redis服务器的start文件

 8、分别开启哨兵

 验证哨兵自动处理容灾(关闭主服务器)

当原来的主服务器修好,重启,默认当成从服务器 

此时redis中的配置文件,此时的主服务器中(原来的从服务器)的

# slaveof <masterip> <masterport>  配置文件被删除

从服务器被修改为此时主服务器的端口,原来的主服务器(现在的从服务器)被默认加上主服务器的slaveof

 

 

哨兵的配置文件说明:

1. port :当前Sentinel服务运行的端口 

2.sentinel monitor mymaster 127.0.0.1 6379 2: Sentinel去监视一个名为mymaster的主redis实例,这个主实例的IP地址为本机地址127.0.0.1,端口号为6379,而将这个主实例判断为失效至少需要2个 Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行 

3.sentinel down-after-milliseconds mymaster 5000:指定了Sentinel认为Redis实例已经失效所需的毫秒数。当实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行 

4.sentinel parallel-syncs mymaster 1:指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长 

5.sentinel failover-timeout mymaster 15000:如果在该时间(ms)内未能完成failover操作,则认为该failover失败 

 

标签:mymaster,主从复制,Redis,redis,哨兵,sentinel,服务器
来源: https://www.cnblogs.com/64Byte/p/13210195.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有