redis主从复制

主从复制:是指将一台redis服务器的数据,复制到其他的redis服务器,前者称为主节点(master/leader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。Master以写为主,Lave以读为主

默认情况下,每台redis的服务器都是主节点;且一个主节点可以有多个从节点(或者美哦有从节点),但一个从节点只能有一个主节点

主从复制的作用主要包括:

1.数据冗余:主从复制实现了数据的热备份,是持久化之外的一种冗余方式

2.故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余

3.负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供服务,由从节点提供读服务(即写redis数据时应用连接主节点,读redis数据时应用从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读操作,可以大大提高redis服务的并发量

4高可用(集群)基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制时redis高可用的基础

一般来说,要将redis‘运用于工程项目中,只使用依一台redis时万万不能的,原因如下:

1.从结构上,单个redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大;

2.从容量上,单个redis服务器内存容量有限,就算一台redis服务器内存容量为256G,也不能将所有内存用作redis存储内存,一般来说,单台reids最大使用内存不应超过20G。

电商网站上的商品,一般都是一次上传,无数次浏览的,说专业点也就是‘多读少写”。

对于这种场景,我们可以使用如下这种架构

 

复制三个配置文件,然后修改对应的信息

1.端口,2.pid名字,3.log文件名字,4.dump.rdb名字

修改完毕之后,启动我们的3个redis服务器(指定不同的配置文件即可),可以通过进程信息查看!锁:我本地端口改的分别是6379,6380,6381

 一主二从

默认情况下,每台redis服务器都是主节点:我们一般情况下只用配置从机就好了!

认老大!一主(79)二从(80,81)

[root@centos7964 bin]# redis-cli -p 6380 
127.0.0.1:6380> slaveof 127.0.0.1 6379 #slaveof host 6379 找谁当自己的老大
OK
127.0.0.1:6380> info replication
# Replication
role:slave  #当前角色是从机
master_host:127.0.0.1 #可以看到主机的信息
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:28
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:c879c019b1be1a4fe4f62a12b3b291bc52f1e0cf
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:28
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:28

在主机中查看

127.0.0.1:6379> info replication
# Replication
role:master  #master表示主机
connected_slaves:1  #多了从机的配置
slave0:ip=127.0.0.1,port=6380,state=online,offset=672,lag=0  #多了从机的配置
master_replid:c879c019b1be1a4fe4f62a12b3b291bc52f1e0cf
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:672
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:672

如果两个都配置完了,就是有两个从机的

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=1064,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=1064,lag=0
master_replid:c879c019b1be1a4fe4f62a12b3b291bc52f1e0cf
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1064
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1064

细节:主机可以写,从机不能写只能读!主机中所有信息和数据,都会自动被从机保存

主机写:

127.0.0.1:6379> set name "huangzheng"
OK

从机只能读取:

127.0.0.1:6380> get name
"huangzheng"
127.0.0.1:6380> set k1 v1
(error) READONLY You can't write against a read only replica.

测试:主机断开连接,从机依旧连接到主机的,但是没有写操作,这个时候,主机回来可,从机依然可以直接获取信息!

如果是使用命令行,来配置的主从,这个时候如果重启了,就会变成主机!只要变成从机,立马就会从主机中获取值

复制原理

Slave启动成功连接到master后会发送一个sync同步命令

master接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行进程之后,master将传送整个数据文件到slave,并完成一次完全同步

全量复制:slave服务在接受到数据库文件数据后,将其存盘贝宁加载到内存中

增量复制:Master继续将新的所有收集到的修改命令一次传给slave,完成同步

但是只要是重新连接master,一次完全同步(全量复制)将被完全执行!我们的数据一定可以在从机中看到!

层层链路

 如果没有老大了,这个时候能不能选择一个老大出来呢?手动!

谋朝篡位

入宫主机断开了连接,我们可以使用slaveof no one 让自己变成主机!其他的节点就可以手动连接到最新的这个主节点(手动)!如果这个时候老大修复了,那就重新连接!此时重新进来主机不是他,重新连才可以变成主机,负责就被谋朝篡位了

127.0.0.1:6380> SLAVEOF no one
OK
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:0
master_replid:1f3f16110a484b3560d66dd08384fed0099b8228
master_replid2:c879c019b1be1a4fe4f62a12b3b291bc52f1e0cf
master_repl_offset:3241
second_repl_offset:3242
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:3241

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值