Redis 主从复制

这篇具有很好参考价值的文章主要介绍了Redis 主从复制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、概念介绍
a. 工作流程

主库会基于 ping check 方式检查从库是否在线,如果在线则直接同步数据文件至从服务端,从服务端也可以主动发送同步请求到主服务端,主库如果是启动了持久化功能时,会不断的同步数据到磁盘上,主库一旦收到从库的同步请求时,主库会将内存中的数据做快照,然后把数据文件同步给从库,从库得到以后是保存在本地文件中(磁盘),而后则把该文件装载到内存中完成数据重建。

① 启动 redis slave

② slave 会向 master 发送同步命令,请求主库上的数据,不论从是第一次连接,还是非第一次连接,master 此时都会启动一个后台的子进程将数据快照保存在数据文件中,然后把数据文件发送给 slave。

③ slave 收到数据文件以后会保存到本地,而后把文件重载装入内存。

b. 特点

① 一个 Master 可以有多个 Slave;

② 支持链式复制(一个 slave 也可以是其他的 slave 的 slave);

③ Master 以非阻塞方式同步数据至 slave(master 可以同时处理多个 slave 的读写请求,salve 端在同步数据时也可以使用非阻塞方式);

2、一主一从
a. slave 安装 redis
# 主服务器拷贝redis到从服务器
scp -r /usr/local/redis 192.168.137.6:/usr/local

# 从服务器操作
# 创建软连接
ln -s /usr/local/redis/bin/* /usr/local/bin

# 修改配置文件中的ip地址
sed -i 's/192.168.137.253/192.168.137.6/g' /usr/local/redis/etc/redis.conf 

# 创建日志目录
mkdir /var/log/redis

# 创建数据目录
mkdir /usr/local/redis/data
b. 配置salve的 master
#指定 master IP,端口,也可将 replicaof masterip masterport 替换为 slaveof masterip masterport
sed -i '/# replicaof/c replicaof 192.168.1.11 6379' /usr/local/redis/etc/redis.conf 

#指定主 redis 连接认证密码(操作失败),主服务器必须配置requirepass 123456
sed -i '/masterauth/a masterauth 123456' /usr/local/redis/etc/redis.conf 

注意:从服务器配置masterauth 123456时,主服务器必须配置 requirepass 123456

c. 启动服务并测试
# 启动redis服务
redis-server /usr/local/redis/etc/redis.conf 

# 将redis设置开机自启动
echo "redis-server /usr/local/redis/etc/redis.conf" >> /etc/rc.local

# 查看主从信息
redis-cli -h 192.168.137.6
192.168.137.6:6379> info replication

Redis 主从复制,Redis,redis

测试:在master中插入数据,在slave中查询

3、sentinel 主从架构

redis 主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换 为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。

a. sentinel 简介

① 用于管理多个 redis 服务实现 HA;

② 监控多个 redis 服务节点

③ 自动故障转移

Redis 主从复制,Redis,redis

sentinel 是一个分布式系统,可以在一个架构中运行多个 sentinel 进程,多个进程之间使用“流言协议”接收 redis 主节点是否离线,并使用“投票协议”是否实现故障转移,选择哪一个 redis 的从服务器成为主服务器。

该方案有个缺陷:因为主从实例地址(IP,PORT)是不同的,当故障发生进行主从切换后,应用程序无法知道新地址,在 Jedis2.2.2 中新增了对 Sentinel 的支持,应用通过redis.clients.jedis.JedisSentinelPool.getResource()取得的 Jedis 实例会及时更新到新的主实例地址。

Jedis 是 Redis 官方推荐的 Java 连接开发工具。要在 Java 开发中使用好 Redis 中间件,必须对 Jedis 熟悉才能写成漂亮的代码。运维人员不下需要关心 redis 集群连接接,这个是开发人员作的工作。如果要提供统一访问出口。可以使用 Twemproxy 中间件部署集群。

b. sentinel 工作流程

sentinel 可以部署在另外的主机上也可以部署在 redis 主机上,sentinel 既能监控又能提供配置功能,向 sentinel 指明主 redis 服务器即可(仅监控主服务器), sentinel 可以从主服务中获取主从架构信息,并分辨从节点。sentinel 可以监控当前整个主从服务器架构的工作状态,一旦发现 master 离线的情况,sentinel 会从多个从服务器中选择并提升一个从节点成为主节点,当主节点被从节点取代以后,那么 IP 地址则发生了变化,客户之前连接的主节点 IP 无法连接,此时可以向 sentinel 发起查询请求,sentinel 会告知客户端新的主节点的 IP,所以 sentinel 是 redis 在主从架构中实现高可用的解决方案。

为了防止 sentinel 误判和单点故障,sentinel 也应该部署为集群,sentinel 多个节点同时监控 redis 主从架构,一旦有一个 sentinel 节点发现 redis 的主节点不在线时的情况,sentinel 会与其他的 sentinel 节点协商,看其他的 sentinel 节点是否也同样发现 redis 的主节点不在线,如果 sentinel 的多个点节点都发现 redis 的主节点都为离线,那么则判定 redis 主节点为离线状态,以此方式避免误判,同样也避免了单点故障。

4、sentinel 搭建

Reids 可以在一台机器上启动多个进程,即在一台主机上开启 3 个 redis 进程,相 当于 3 台 redis 服务器。也可以在 3 台不同的服务器上进行搭建 redis。

实验拓扑

服务类型

Is master server?

IP 地址

端口

redis

y

192.168.137.253

6379

redis

n

192.168.137.252

6379

redis

n

192.168.137.6

6379

sentinel

-

192.168.137.253

26379

sentinel

-

192.168.137.252

26379

sentinel

-

192.168.137.6

26379

a. 搭建从服务器
# 主服务器拷贝redis到从服务器
scp -r /usr/local/redis 192.168.137.6:/usr/local

# 从服务器操作
# 创建软连接
ln -s /usr/local/redis/bin/* /usr/local/bin

# 修改配置文件中的ip地址
sed -i 's/192.168.137.253/192.168.137.6/g' /usr/local/redis/etc/redis.conf 

# 创建日志目录
mkdir /var/log/redis

# 创建数据目录
mkdir /usr/local/redis/data

#指定 master IP,端口,也可将 replicaof masterip masterport 替换为 slaveof masterip masterport
sed -i '/# replicaof/c replicaof 192.168.1.11 6379' /usr/local/redis/etc/redis.conf 

#指定主 redis 连接认证密码(操作失败),主服务器必须配置requirepass 123456
sed -i '/masterauth/a masterauth 123456' /usr/local/redis/etc/redis.conf

# 启动redis服务
redis-server /usr/local/redis/etc/redis.conf 

# 将redis设置开机自启动
echo "redis-server /usr/local/redis/etc/redis.conf" >> /etc/rc.local

# 查看主从信息
redis-cli -h 192.168.137.6
192.168.137.6:6379> info replication
b. 部署sentinel

三个 sentinel 节点的 sentinel.conf 文件配置一样,如果是在同一个主机上,则需要使用不同的端口号。

① 生成sentinel.conf

# 将redis解压目录中的sentinel.conf 复制到/usr/local/redis/etc/中
cp /usr/local/src/redis-6.2.6/sentinel.conf /usr/local/redis/etc/

# 编辑sentinel.conf文件
vim /usr/local/redis/etc/sentinel.conf

#----------------------------------------配置文件-----------------------------------
daemonize yes 
#添加监控 IP,一定要写 0.0.0.0,不然主从切换不了
bind 0.0.0.0 
logfile "/var/log/redis/sentinel_26379.log"

# sentinel monitor <master-name> <ip> <redis-port> <quorum>
#此项可以出现多次,可以监控多组 redis 主从架构,此项用于监控主节点 
#<master-name> 自定义的主节点名称,<ip> 主节点的 IP 地址,<redis-port>主节点的端口号,
#<quorum>主节点对应的 quorum 法定数量,是一个大于 sentinel 数量一半的值,
#所以 sentinel 数量尽量为奇数个,如果 sentinel 有 3 个,则指定为 2 即可,
#如果有 4 个,不能够指定为2,避免导致集群分裂,
#<master-name>为集群名称,可以自定义,如果同时监控有多组 redis 集群时,<master-name>不能相同
#注:最后数字 2 表示如果有两个 sentinel 认为 master 挂了,则这个 master 即认为不可用;
sentinel monitor mymaster 192.168.1.11 6379 2 


# sentinel auth-pass <master-name> <password> 
# sentinel author-pass 定义服务的密码,mymaster 是服务名称,123456 是 Redis 服务器密码
sentinel auth-pass mymaster 123456 

#sentinel down-after-milliseconds <master-name> <milliseconds>
#默认 30 秒,sentinel 会通过 ping 来判断 master 是否存活
#如果在 30 秒内 master 返回 pong 给sentinel,
#则认为 master 是好的,否则 sentinel 认为 master 不可用。
sentinel down-after-milliseconds mymaster 30000 

#sentinel parallel-syncs <master-name> <numslaves> 
#当 Sentinel 节点集合对主节点故障判定达成一致时,Sentinel 领导者节点会做故障转移操作,
#选出新的主节点,原来的从节点会向新的主节点发起复制操作,
#限制每次向新的主节点发起复制操作的从节点个数为 1 
sentinel parallel-syncs mymaster 1 

#sentinel failover-timeout <master-name> <milliseconds>
#故障转移超时时间,在指定时间没能完成则判定为失败,单位为毫秒(默认为 180 秒)
sentinel failover-timeout mymaster 180000
#----------------------------------------配置文件-----------------------------------

# 将sentinel.conf拷贝到其他从服务器
scp /usr/local/src/redis-6.2.6/sentinel.conf 192.168.137.252:/usr/local/redis/etc
scp /usr/local/src/redis-6.2.6/sentinel.conf 192.168.137.6:/usr/local/redis/etc

注意:Redis Sentinel 中的身份验证,

  • 当一个 master 配置为需要密码才能连接时,客户端和 slave 在连接时都需要提供密码; master 通过 requirepass 设置自身的密码,不提供密码无法连接到这个 master; slave 通过 masterauth 来设置访问 master 时的密码;
  • 但是当使用了 sentinel 时,由于一个 master 可能会变成一个 slave,一个 slave 也 可能会变成 master,所以需要同时设置上述两个配置项

② 启动服务

# 启动三台服务器的sentinel
redis-sentinel /usr/local/redis/etc/sentinel.conf

# 添加开机自启动
echo "redis-sentinel /usr/local/redis/etc/sentinel.conf" >> /etc/rc.local

# 查看进程
ps -ef | grep redis

Redis 主从复制,Redis,redis

③ 查看集群状态

redis-cli -h 192.168.137.253 -p 26379
192.168.137.253:26379>info sentinel

Redis 主从复制,Redis,redis

192.168.137.253:26379>client list

Redis 主从复制,Redis,redis

注意:当我们启动主从节点和 sentinel 节点后,sentinel.conf 配置文件会自动添加或修改参数。

c. 测试sentinel

测试自动 failover:可以通过跟踪 sentinel 的日志文件查看 failover 切换

① 关闭master: redis-cli -a 123456 shutdown

② 查看主从状态:

redis-cli -h 192.168.137.253 -p 26379
192.168.137.253:26379> info sentinel

Redis 主从复制,Redis,redis

192.168.137.253:26379> sentinel masters

Redis 主从复制,Redis,redis

③ 启动主服务器(旧master)

注意:重启修复好的旧 master 之后,会自动成为新master的从库。JClouds上没有添加连接主服务器密码

#注意 JClouds 上没有添加连接主服务器密码
sed -i '/masterauth/a masterauth 123456' /usr/local/redis/etc/redis.conf 
redis-server /usr/local/redis/etc/redis.conf

# 查看主从状态
redis-cli -h 192.168.137.253 -p 6379
192.168.137.253:6379> auth 123456
192.168.137.253:6379> info replication

Redis 主从复制,Redis,redis

④ 在新的主 redis 上查看主从信息

[root@Book etc] redis-cli -a 123456
127.0.0.1:6379> info replication

Redis 主从复制,Redis,redis

结论:由以上测试可见,主的故障离线后,sentinel 重新选了其一个从 reids 成为了新的主节点,在原来的主节点重新上线后,仍然不会恢复为主节点。文章来源地址https://www.toymoban.com/news/detail-794060.html

到了这里,关于Redis 主从复制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【征服Redis12】redis的主从复制问题

    从现在开始,我们来讨论redis集群的问题,在前面我们介绍了RDB和AOF两种同步机制,那你是否考虑过这两个机制有什么用呢?其中的一个重要作用就是为了集群同步设计的。 Redis是一个高性能的键值存储系统,广泛应用于Web应用、缓存、消息队列等领域。在实际应用中,为了

    2024年01月21日
    浏览(35)
  • Redis主从复制基础概念

    Redis主从复制:提高数据可用性和性能的策略 Redis主从复制是一种常用的高可用性策略,通过将数据从一个Redis服务器复制到另一个或多个Redis服务器上,以提高数据的可用性和读取性能。当主服务器出现故障时,可以快速地切换到从服务器,保证服务的连续性和稳定性。同时

    2024年02月05日
    浏览(107)
  • Redis 主从复制 哨兵 集群

    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能

    2024年02月11日
    浏览(49)
  • Redis主从复制模式4

    有个哨兵一直在巡逻,突然发现。老大挂了,小弟们会自动投票,从众小弟中选出新的老大。即自动版的谋权篡位。我们把这个过程称为哨兵模式 设置哨兵模式语法格式: sentinel monitor 被监控主机名/IP Redis服务端口 票数  关闭三台Redis服务器: shutdown exit  进入/usr/local/bin的目

    2024年02月12日
    浏览(36)
  • Redis主从复制、哨兵实战

    环境:linux centos7.x ,虚拟机3台 版本:redis-6.2.6 1.下载安转redis 下载地址 wget https://download.redis.io/releases/redis-6.2.6.tar.gz 解压 tar -zxvf redis-6.2.6.tar.gz 移动目录 mv redis-6.2.6 /usr/local/redis 编译   cd /usr/local/redis         make install PREFIX=/usr/local/redis 2.修改配置文件 redis.conf  修改为

    2024年02月03日
    浏览(34)
  • Redis---主从复制 & 哨兵

    目录 一、主从复制 1、什么是主从复制呢? 2、案例演示  2.1  配置文件   2.2   一主二仆 2.2.1 相关题目: 2.3  薪火相传    反客为主 3、复制原理和工作流程 3.1、slave启动,同步清初 3.2  首次连接,全量复制 3.3  心跳持续,保持通信(和TCP的心跳数据包很像)  3.4  进入

    2024年02月05日
    浏览(35)
  • 图解-Redis主从复制原理

    大家好,我是「云舒编程」,今天我们来Redis主从复制原理。 文章首发于微信公众号: 云舒编程 关注公众号获取: 1、大厂项目分享 2、各种技术原理分享 3、部门内推 主从复制是指用户可以搭建多个服务器,其中几个服务器当做主服务器,提供写功能。其余的服务器当做从

    2024年01月25日
    浏览(39)
  • Redis 主从复制

    1、概念介绍 a. 工作流程 主库会基于 ping check 方式检查从库是否在线,如果在线则直接同步数据文件至从服务端,从服务端也可以主动发送同步请求到主服务端,主库如果是启动了持久化功能时,会不断的同步数据到磁盘上,主库一旦收到从库的同步请求时,主库会将内存中

    2024年01月16日
    浏览(29)
  • Redis的主从复制模式

    主从复制就是Redis集群的策略 配从库不配主库:小弟可以选择谁是大哥,但大哥没有权利去选择小弟 读写分离:主机写,从机读 集群配置和搭建      1.将虚拟机中的CentOS(192.168.40.100)重新复制两份      2.将新复制的静态ip改一下,192.168.40.101,192.168.40.102,改完后重新启动配置文

    2024年02月11日
    浏览(50)
  • Redis_主从复制

    主从库采用读写分离的方式 读操作:主库、从库都可以处理 写操作:首先写到主库执行,然后再将主库同步给从库。 实现读写分离,性能扩展 容灾快速恢复 创建一个目录 ,在root下创建一个myredis的目录 关闭aof 使用vi编辑三个conf文件,redis_6379.conf,redis_6380.conf,redis_6381.conf做为

    2024年02月13日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包