Redis--主从复制

redis的主从复制中主以写为主,从以读为主

一,Redis主从复制的使用

  1. 配从(库)不配主(库)
    • 从库配置命令:slaveof 主库IP 主库端口
    • 每次与master断开之后,都需要重新连接,
    • 除非在从机上到redis.fonf文件中配置
  2. 修改配置文件细节操作(主机中)
    • 拷贝多个redis.conf文件 :cp redis.conf redis001.conf …
    • 开启daemonize yes
    • Pid 文件名:pidfile /var/run/redis001.pid
    • 指定端口 :6380或者6382。。。
    • log文件名:001.log
    • Dump001.rdb名字
    • 命令:info replication查看自己角色,从机个数,激活状态,连通状态等信息
  3. 主从数据一致性保证
    min-slaves-to-write # 以及执行写操作所需的至少从服务器数量
    min-slaves-max-lag # 用户可以通过配置, 指定网络延迟的最大值
    
    • 这个特性的运作原理:
      • 从服务器以每秒一次的频率 PING 主服务器一次, 并报告复制流的处理情况。
      • 主服务器会记录各个从服务器最后一次向它发送 PING 的时间。

二,主从复制的三种方式

  1. 一主一从或者一主二从
    • 从机不管什么时候开始介入备份,都会从头开始保存数据

    • 主从复制是读写分离的,从机不能进行写操作的

    • 如果主机死了从机不会自动变成主机,主机重启服务数据会同步

    • 如果从机死掉,配置文件没有指定slaveof,从机重启会变master,设置slaveof数据会从头开始备份

  2. 去中心化,一个传一个
    • 解释:上一个从机可以是下一个从机的主机,从机同样可以接收其他从机的连接和同步请求,那么该从机作为了链条中下一个的主机,可以有效的减轻master的写压力
      • 不如 79 为主机,80为79的从机,81为80的从机,如果79不宕机的情况下80为从机,会标注81是80的从机
    • 中途发生变更转向:也就是重新建立了主从关系,会清除之前的数据,重新建立拷贝最新的
    • slaveof新主库ip 新主机库端口号
  3. 反客为主(主机挂掉,指定的从机为主机)
    • slaveof no one 使当前数据库停止与其他数据库的同步,将当前从机变为主数据库

三,复制的原理

  1. slave启动成功连接到master后会发送一个sync命令
  2. master接到SYN命令启动后台的存盘进程,调用BGSAVE命令收集所有接收到的用于修改数据集命令**,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令。在后台进程执行完毕后,master将传送整个RDB数据文件到slave,从服务器会接收并载入这个文件,已完成一次完全同步。(主服务器将缓冲区储存的所有写命令发送给从服务器执行)
  3. **全量复制:**slave服务在接收到数据库文件数据后,将其存盘并加载到内存中
  4. **增量复制:**master继续将新的所有收集到的修改命令依次传递给slave,完成同步
  5. 但是只要是重新连接master,一次完全同步(全量复制)将被自动执行

四,哨兵机制

  1. 什么是哨兵机制?
    • 反客为主的自动版,能够在后台监控主机是否故障,如果故障了根据投票数目自动将从库转为主库
  2. 哨兵机制投票原理
  3. 使用步骤
    • 调整主从结构:比如79为主机80,81为从机

    • 在自定义的/myredis目录下tuoch新建sentinel.conf文件,(名字不能写错)

    • 配置哨兵,填写内容

      #sentinel monitor 被监控主数据库名字(自己起名字)127.0.0.1:6379 1
      #上面最后一个数字1,表示主机挂掉后 slave投票看让谁接替成为主机,得票数多的成为主机
      #比如
      sentinel monitor host6379 127.0.0.1 6379 1
      
    • 启动哨兵

      • Redis-sentinel/myredis/sentinel.conf
      • 以上的目录按照工作实际情况配置
    • 正常主从演示

    • 如果原有的master挂了

    • 投票新选

    • 重新主从继续开工,info replication查看

    • 注意:如果之前的master重启回来,两个master不会冲突,会跟着新maser继续同步

    • 一组哨兵能同时监控多个master

    • Sentinel管理命令:

      redis-cli-p 26380
      
      PING :返回 PONG 。
      SENTINEL masters :列出所有被监视的主服务器
      SENTINEL slaves <master name> 
      SENTINEL get-master-addr-by-name <master name> : 返回给定名字的主服务器的 IP 地址和端口号。 
      SENTINEL reset <pattern> : 重置所有名字和给定模式 pattern 相匹配的主服务器。 
      SENTINEL failover <master name> : 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移。
      

五,哨兵机制复制缺点

  1. 复制延时
    • 由于所有的写操作都是先在master上操作,然后同步更新到slave上,所以从master同步到slave机器有一定的延迟,当系统很忙的时候,延迟问题会更加严重,slave机器数量的增加也会使这个问题更加严重。
Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。Redis是一个开源的内存数据结构存储系统,支持多种数据结构,如字符串、哈希、列表等。Redis主从复制是一种数据复制机制,用于将一个Redis服务器的数据复制到其他Redis服务器上。 下面是一个使用Docker Compose配置Redis主从复制的示例: 1. 首先,创建一个名为docker-compose.yml的文件,并在其中定义两个Redis服务,一个作为主服务器,另一个作为从服务器。示例配置如下: ```yaml version: '3' services: redis-master: image: redis ports: - "6379:6379" volumes: - ./redis-master-data:/data command: redis-server --appendonly yes redis-slave: image: redis volumes: - ./redis-slave-data:/data command: redis-server --slaveof redis-master 6379 ``` 2. 在上述配置中,我们定义了两个服务:redis-master和redis-slave。redis-master服务使用Redis官方镜像,并将主服务器的6379端口映射到主机的6379端口。同时,我们将主服务器的数据目录挂载到本地的redis-master-data目录。 3. redis-slave服务也使用Redis官方镜像,并将从服务器的数据目录挂载到本地的redis-slave-data目录。在command字段中,我们使用--slaveof参数指定redis-slave作为redis-master的从服务器,并指定主服务器的地址和端口。 4. 在终端中,进入包含docker-compose.yml文件的目录,并运行以下命令启动Redis主从复制: ```bash docker-compose up -d ``` 5. 等待一段时间,直到两个Redis服务器都成功启动。您可以使用以下命令检查容器的状态: ```bash docker-compose ps ``` 6. 现在,您可以通过连接到主服务器的6379端口来访问Redis主服务器,并将数据复制到从服务器。您可以使用以下命令连接到Redis服务器: ```bash redis-cli -h localhost -p 6379 ``` 7. 在连接到主服务器后,可以执行一些Redis命令来设置和检索数据。这些数据将自动复制到从服务器。 这就是使用Docker Compose配置Redis主从复制的基本步骤。您可以根据需要进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值