Redis——主从复制

一、概念
 主从复制,主机数据更新后根据配置和策略,自动同步到从机的master/slaver机制,Master以写为主,Slaver以读为主。这么做的好处:
 ①读写分离,提高性能
 ②容灾恢复,提升安全

二、配置
 原则:配从不配主,修改从机的配置文件,使用slaveof命令指定从属关系。步骤如下:
 ①复制redis.conf配置文件,同时修改配置文件名,在启动的时候是根据配置文件名启动的,同时启动该文件的时候会根据该文件中的配置启动,有几份就可以启动几个Redis服务
 ②修改配置文件内容
  a、开启daemonize yes
  b、Pid文件名字最好和端口一致
  c、指定端口,端口不能相同
  d、Log文件名字
  e、Dump.rdb名字,最好和端口一致
 ③启动多个Redis服务
在这里插入图片描述
 ④启动多个客户端,启动客户端的时候指定端口
在这里插入图片描述
 ⑤查看每个客户端的信息:使用info replication命令,在不指定从属关系的时候都是master
在这里插入图片描述
 ⑥使用slaveof ip 端口:指定从属关系,注意每次与master断开之后,都需要重新设置从属关系,除非你配置进redis.conf文件
在这里插入图片描述
  设置了从属关系之后,就变成了从机slaver,这时在主机中写入的数据会立即同步到从机,可以从从机获取到主机的数据
在这里插入图片描述
  一个主机可以有多个从机,主机中的数据会同步到所有的从机

三、常用的主从机设置模式
 1、一主多仆:一个主机,其他服务器都是该主机的从机,主机写为主,从机读为主
  几个问题:
   ①切入点问题:slave1、slave2是从头开始复制还是从切入点开始复制?答案是从头开始复制,从机中的数据总会保持和主机一致
   ②从机是否可以写(set可否):默认不可写,可以配置为可写

在这里插入图片描述
   ③主机shutdown后从机是上位还是原地待命:原地待命
   ④主机又回来了后,主机新增记录,从机还能否顺利复制:可以
   ⑤其中一台从机宕掉后再恢复它能跟上大部队吗?可以

 2、薪火相传:第一个从机slaveof主机,第二个从机slaveof第一个从机,第三个slaveof第二个从机…,就是说上一个slave可以是下一个slave的Master,Slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻master的写压力(因为主机不必同时向多个从机写数据,只需要向一个从机写数据),但如果中途变更转向(Slaveof 新主库IP 新主库端口),会清除之前的数据,重新建立拷贝最新的,其后续从机都会数据跟着改变,如果中途一个宕掉,后续的都会危险。

 3、反客为主:SLAVEOF no one,使当前数据库停止与其他数据库的同步,转成主数据库,当采用一主多仆时,主机宕掉时,可以修改从机执行slaveof no one将该从机变成主机

四、主从复制的原理
 ①Slave启动成功连接到master后会发送一个sync命令
 ②Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令
 ③在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
 ④全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中
 ⑤增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
但是只要是重新连接master,一次完全同步(全量复制)将被自动执行

五、哨兵模式
 反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库,这应该是最好的方式。
 ①在一个目录(比如/usr/local/bin)中创建配置文件sentinel.conf,注意该文件的名字不能错
 ②在sentinel.conf中配置哨兵:sentinel monitor 被监控数据库名字(自己起名字) 127.0.0.1 6379 1,上面最后一个数字1,表示主机挂掉后salve投票看让谁接替成为主机,得票数多少后成为主机
在这里插入图片描述
 ③启动哨兵:Redis-sentinel /usr/local/bin/sentinel.conf,具体和配置文件的路径有关
 ④启动哨兵后如果主机挂了,会从各个从机中投票选举新的主机,投票过程:可以在启动了sentinel.conf的终端上看到
在这里插入图片描述
 ⑤投票结束,选出新的主机,数据就可以写入到新的主机了,之前的从机也都从属于新的主机
 ⑥如果之前的主机又重新启动,会自动变为新选出的主机的从机

注意:一组sentinel能同时监控多个Master

 主从复制的缺点:由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加会使这个问题更加严重。

### Redis主从复制配置方法 #### Docker环境下的Redis主从复制设置 为了在Docker环境中成功配置Redis主从复制,需先理解基本概念以及具体的操作流程。 #### 基本概念解释 主从复制意味着将一台Redis服务器的数据同步至其他Redis实例。此过程涉及两个角色:一个是作为数据源的主节点(master),另一个是从主节点接收更新副本的从节点(slave)。这种架构允许读取负载均衡,并提供了一定程度上的冗余保障[^2]。 #### 创建网络连接以便容器间通信 确保所有参与复制的Redis服务能够相互通信至关重要。为此,建议创建专用的Docker网络来促进这些交互: ```bash docker network create redis-network ``` #### 启动主服务器 启动一个名为`redis-master`的服务端口映射到主机6379端口上,并将其加入之前建立好的自定义网络中去: ```bash docker run -d --name redis-master -p 6379:6379 --network redis-network redis ``` 这一步骤建立了整个集群的核心——即存储实际键值对的地方[^3]。 #### 修改配置文件支持远程访问 为了让后续添加的从机可以正常连通主机,需要调整默认不允许外部链接的安全策略。可以通过编辑已有的配置文件或者挂载新的配置文件方式完成这项工作。这里给出一种基于后者的方法示例: ```bash vim /home/docker/redis6379/conf/redis.conf ``` 在此文件内部找到有关绑定地址的部分(`bind`)取消其注释状态并将值设为空白表示接受来自任何地方请求;另外还需开启认证机制以增强安全性(如果适用的话)[^4]。 #### 添加并初始化第一个从属节点 现在准备就绪向系统引入首个辅助成员了。执行如下指令部署新实例同时指定它所依赖的目标对象名称为先前提到过的那个“master”。 ```bash docker run -d --name redis-slave1 --link redis-master:master \ --network redis-network \ -e REDIS_MASTER_HOST=master \ -e REDIS_MASTER_PORT=6379 \ -p 6380:6379 \ redis redis-server --slaveof master 6379 ``` 上述命令不仅完成了容器本身的创建工作还指定了必要的环境变量用于告知子进程应当追随哪台机器成为自己的上级领导单位。 #### 扩展更多跟随者 如果有需求进一步扩大规模只需重复上面的过程更改相应参数比如暴露不同对外监听接口即可轻松达成目的。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值