Redis之主从复制(Master/Slave)案例分析

Redis的主从复制(Master/Slave)

  1. 主从复制:主机数据更新后根据配置和策略,
    自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主,可以进行读写分离、容灾恢复。

  2. 配置主从数据库:

    1. 配从(库)不配主(库)

    2. 修改配置文件:

      1. 拷贝三份redis.conf,分别为6379.conf6380.conf6381.conf,并修改各配置文件的pidfile "/var/run/redis63**.pid"port 63**logfile "63**.log"dbfilename "dump63**.rdb"的**为79、80、81。
    3. 各redis服务器和客户端以不同端口启动

      [root@iz2zeewd5q2wfzj9hhfyntz bin]# redis-server /myredis/redis6379.conf 
      [root@iz2zeewd5q2wfzj9hhfyntz bin]# redis-cli -p 6379
      
  3. 常见组合:

    1. 一主二从:
      1. 一个Master两个Slave,Slave启动成功连接到master后可以共享Master的数据(复制原理);
      2. Master可以写数据读数据,Slave不可以写数据只能读数据;
        在这里插入图片描述
      3. 可以通过info replication查看当前状态;
        在这里插入图片描述
      4. Master挂了之后,各个Slave原地待命,仍然可以使用原数据
        在这里插入图片描述
      5. Master重新开启之后还原为Master
        在这里插入图片描述
    2. 主—从主—从
      1. Slaveof 新主库IP 新主库端口
      2. 上一个Slave可以是下一个slave的Master,Slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻master的写压力;
      3. 中途变更转向:会清除之前的数据,重新建立拷贝最新的;
    3. 自己做主库
      1. SLAVEOF no one
      2. 使当前数据库停止与其他数据库的同步,转成主数据库
  4. 复制原理:

    1. Slave启动成功连接到master后会发送一个sync命令;
    2. Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步;
    3. 全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中;
    4. 增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步;
    5. 但是只要是重新连接master,一次完全同步(全量复制)将被自动执行;
  5. 哨兵模式(sentinel)

    1. 自动将自己作为主库:能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库;
    2. 配置过程:
      1. /myredis/下创建sentinel.conf文件;
      2. 配置哨兵: sentinel monitor host6379 127.0.0.1 6379 1(host6379为哨兵名,可任意;1表示大于这个票数且票数最多的可以当Master)
      3. 启动哨兵:在/usr/local/bin下执行Redis-sentinel /myredis/sentinel.conf
      4. 当master挂了之后,投票选举:
        在这里插入图片描述
        在这里插入图片描述
    3. 一组sentinel能同时监控多个Master
  • 复制延时问题:
    由于所有的写操作都是先在Master上,再同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章