【Redis主从复制原理以及搭建一主master俩从slave集群实践】

Redis主从复制原理以及搭建一主俩从集群实践

知识回顾:

通过对Redis中的String的命令做了充分的讲解以及实践学习
通过对Redis中String类型之Bit命令的详解以及Bit命令的实践进行了学习
通过对Redis中的Hash类型以及Hash中常用命令的实践学习
通过对Redis之List类型的详解&List类型中常用命令的实践的学习
通过对Redis之Set类型的详解&Set类型中常用命令的实践的学习
通过对Redis之ZSet类型的详解&ZSet类型中常用命令的实践的学习
通过对Redis中消息的发布和订阅以及命令的实践学习
通过对Redis中事务Multi命令及监控键值Watch命令的实践学习
通过对Redis持久化原理之快照版本RDB的学习
通过对Redis持久化原理之AOF(Append Only File)的学习
接下来的学习任务:
接下来我们要学习的内容是:Redis主从复制原理以及搭建一主俩从集群实践。

Redis中String类型内容请看这里呦:
【Redis之String类型的详解&String类型中常用命令的实践】
Redis中String类型是Bit命令内容请看这里呦:
【Redis中String类型之Bit命令的详解&Bit命令的实践】
Redis之Hash类型的详解&Hash类型中常用命令的实践请看这里呦:
【Redis之Hash类型的详解&Hash类型中常用命令的实践】
Redis之List类型的详解&List类型中常用命令的实践请看这里呦:
【Redis之List类型的详解&List类型中常用命令的实践】
Redis之Set类型的详解&Set类型中常用命令的实践请看这里呦:
【Redis之Set类型的详解&Set类型中常用命令的实践】
Redis之Zset类型的详解&Zset类型中常用命令的实践请看这里呦:
【Redis之ZSet类型的详解&ZSet类型中常用命令的实践】
Redis中消息的发布和订阅以及命令的实践请看这里呦:
【Redis中消息的发布和订阅】
Redis中事务Multi命令及监控键值Watch命令的实践请看这里呦:
【Redis中事务Multi命令及监控键值Watch命令】
Redis持久化原理之快照版本RDB的学习请看这里呦:
【Redis持久化原理之快照版本RDB】
Redis持久化原理之AOF(Append Only File)的学习请看这里呦:
【Redis持久化原理之AOF(Append Only File)】

Linux上使用Docker安装Redis的教程已经在前面的文章详细讲解过了,本篇文章只简单的描述一下,不做过多的赘述,需要学习部署的教程点击下面的链接呦:

【Linux操作系统使用Docker部署Redis】

简单介绍一些基本的步骤
##  搜索redis镜像
docker search redis

##  拉取镜像
docker pull  redis

## 下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为redis
docker images redis

##运行容器
docker run -p 6379:6379 -v $PWD/data:/data  -d redis redis-server --appendonly yes

## 命令说明:
## -p 6379:6379 : 将容器的6379端口映射到主机的6379端口
## -v $PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data
## redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置

## 连接容器
docker exec -it redis redis-cli
## 查看容器的部分信息
info 
[root@VM-4-9-centos ~]# docker exec -it redis redis-cli
127.0.0.1:6379> info
# Server

redis_version:6.2.6
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:b61f37314a089f19
redis_mode:standalone
os:Linux 3.10.0-1160.71.1.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:10.2.1
process_id:1
process_supervised:no
run_id:78685a3619ee6e2d4c3b6347304aebb23a388131
tcp_port:6379
server_time_usec:1665962956766886
uptime_in_seconds:570355
uptime_in_days:6
hz:10
configured_hz:10
lru_clock:5018572
executable:/data/redis-server
config_file:/etc/redis/redis.conf
io_threads_active:0
## 之后省略了部分文件的信息
......
.....

主从复制的原理

基本概念

主从复制可以扩展Redis的性能,比单机版的Redis性能更加的稳定,Redis的主从复制和关系型数据库的主从复制差不多。从机能精确的从主机复制信息。
主从复制也可以算法Redis持久化的第三种方式。

主从复制之全量复制

Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下:

  1. 从服务器连接主服务器,发送SYNC命令;
  2. 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;
  3. 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
  4. 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
  5. 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
  6. 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;
  7. 完成上面几个步骤后就完成了从服务器数据初始化的所有操作,从服务器此时可以接收来自用户的读请求。
主从复制之增量复制

Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。 增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。

复制偏移量
执行复制的双方——主服务器和从服务器会分别维护一个复制偏移量:
主服务器每次向从服务器传播N个字节的数据时,就将自己的复制偏移量的值加上N;
从服务器每次收到主服务器传播来的N个字节的数据时,就将自己的复制偏移量的值加上N;

注意只要是slave重新连接master都会自动执行一个全量复制

主从复制的优点:

  1. 实现读写分离
  2. 降低master的压力
  3. 实现数据的备份

主从复制

1.运行redis镜像

首先使用docker启动3个redis容器服务,分别使用到6379、6380、6381端口

docker run --name redis -p 6379:6379 -d redis
docker run --name redis6380 -p 6380:6379 -d redis
docker run --name redis6381 -p 6381:6379 -d redis
2.配置redis集群
使用如下命令查看容器内网的ip地址等信息
docker inspect containerid(容器ID)
3个redis的内网ip地址为:
redis               172.17.0.3
redis6380	        172.17.0.7 
redis6381           172.17.0.8
分别进入docker容器内部,查看当前redis角色(主master还是从slave)
[root@localhost /]# docker exec -it redisredis-cli
127.0.0.1:6379> info replication
role:master
connected_slaves:0
master_repl_offset:3860
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:3859
可以看到当前3台redis都是master角色,同理通过命令进入redis6380、redis6381的容器内部,并设置redis6380、redis6381的主机为172.17.0.3:6379,执行命令如下:
# 设置当前节点的master是172.17.0.3 6379
SLAVEOF 172.17.0.3 6379
再次查看redis主机info,已经有两个从机了.

在这里插入图片描述

1个master,2个slave的主机测试

主机master测试

127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> set name master
OK
127.0.0.1:6379[1]> get name
"master"
127.0.0.1:6379[1]> 

在这里插入图片描述

从机slave1测试

在这里插入图片描述

从机slave2测试

在这里插入图片描述

主从复制需要注意的事项:

  1. 从节点只能读取主节点的数据,但是不能写
127.0.0.1:6379[1]> set name1 value
(error) READONLY You can't write against a read only replica.
127.0.0.1:6379[1]> 

在这里插入图片描述

  1. 如果想要将从节点移除,那么需要进入到想要被移除的容器中,执行如下的指令,之后查看是否移除成功即可。
127.0.0.1:6379[1]> slaveof no one
OK
127.0.0.1:6379[1]> 

去主节点查看一下信息,验证是否成功:

在这里插入图片描述

  1. 如果master已经运行了一段时间,slave才连上来,此时slave会对master的所有数据进行同步,而不是从连接上的时间点同步!
  2. master节点可读可写,但是slave节点只读不可写(如果非要写可以修改redis.conf文件中的slave-read-only的值来实现)
  3. 在当前的这个主从结构中,如果master挂点,重启后依然还是master,主从操作依然可用。

至此,使用docker在linux操作系统下对Redis的主从配置集群的实战学习就好了,快给优秀的你点个赞吧,为你点赞!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值