写在前面的话

Redis 的主从其实和 MySQL 类似,更多的还是作为备份的功能存在,在复杂的 Rediis 集群架构中,主从也是不可或缺的。

主从复制

主从复制原理:

1. 从库通过命令连接到主库,并发送 SYNC 给主库。

2. 主库接受到从库的 SYNC 后触发 BGSAVE,后台持久化 RDB,并发送给从库。

3. 从库收到 RDB 后开始恢复其中的数据。

4. 主库陆续将新生成的数据发送给从库。

5. 当从库发生故障,但是未造成数据损坏,那么下去重启后会自动重连主库,主库陆续将从库缺失部分发送过来。

关于主从的配置项,有以下一些,一般选择默认的就足够我们使用:

  1. # 从库配置主库的IP端口
  2. # slaveof <masterip> <masterport>
  3.  
  4. # 主库有密码的时候配置密码
  5. # masterauth <master-password>
  6.  
  7. # 当slave与master断开或者正在同步的时候,设置yes返回的数据可能是旧的,设置no直接返回正在同步的错误
  8. slave-serve-stale-data yes
  9.  
  10. # 设置从库只读
  11. slave-read-only yes
  12.  
  13. # 主从是否使用无硬盘复制,即主不通过RDB文件直接传数据给从
  14. repl-diskless-sync no
  15.  
  16. # 选择无硬盘备份时,需要等待多久才传数据
  17. repl-diskless-sync-delay 5
  18.  
  19. # 从向主周期性发送ping包时间
  20. # repl-ping-slave-period 10
  21.  
  22. # 备份超时时间
  23. # repl-timeout 60
  24.  
  25. # 是否禁用从的CTP_NODELAY,如果yes主从会有一点延时
  26. repl-disable-tcp-nodelay no
  27.  
  28. # 备份缓冲区,从库失联后会短暂的帮从库接受数据
  29. # repl-backlog-size 1mb
  30.  
  31. # 主多长时间没有和从连接就释放缓冲区
  32. # repl-backlog-ttl 3600
  33.  
  34. # 从优先级,用于sentinel选主时使用,数字越小越高,但是0就不参与选举
  35. slave-priority 100
  36.  
  37. # 主停止接受写请求,当从在线小于3个,滞后10秒时
  38. # min-slaves-to-write 3
  39. # min-slaves-max-lag 10
  40.  
  41. # Redis master能够通过不通方式列出从的地址和端口
  42. # slave-announce-ip 5.5.5.5
  43. # slave-announce-port 1234

搭建主从环境

在日常工作中,如果是简单的应用不那么重要,可能这种服务就只有一个机器,但为了更好的使用,这里还是使用三个虚拟机来配合搭建:

192.168.200.101 / 17000 作为默认主

192.168.200.102 / 17000 作为默认从

192.168.200.103 / 17000 作为默认从

1. 给 101 / 102 / 103 安装 redis:

  1. mkdir -p /data/{backup,data,logs,packages,services}
  2. /data/packages
  3. tar -zxf redis-4.0.14.tar.gz
  4. cd redis-4.0.14/
  5. make
  6. make PREFIX=/data/services/redis-master-slave-17000 install
  7. cd /data/services/redis-master-slave-17000
  8. mkdir data logs conf

2. 添加配置文件 /data/services/redis-master-slave-17000/conf/redis-17000.conf:

  1. #################################################################################################
  2. # Redis 配置文件
  3. #################################################################################################
  4.  
  5. #################################################################################################
  6. # 基础配置
  7. #################################################################################################
  8. protected-mode yes
  9. bind 0.0.0.0
  10. requirepass helloworld
  11. port 17000
  12. tcp-backlog 2048
  13. timeout 0
  14. tcp-keepalive 300
  15. daemonize yes
  16. supervised no
  17. pidfile /data/services/redis-master-slave-17000/logs/redis-17000.pid
  18. loglevel notice
  19. logfile "/data/services/redis-master-slave-17000/logs/redis-17000.log"
  20. databases 16
  21. always-show-logo yes
  22.  
  23. #################################################################################################
  24. # RDB持久化配置
  25. #################################################################################################
  26. dbfilename dump-17000.rdb
  27. dir "/data/services/redis-master-slave-17000/data"
  28. save 900 1
  29. save 300 10
  30. save 60 10000
  31. stop-writes-on-bgsave-error yes
  32. rdbcompression yes
  33. rdbchecksum yes
  34.  
  35. #################################################################################################
  36. # AOF持久化配置
  37. #################################################################################################
  38. appendonly yes
  39. appendfilename "appendonly-17000.aof"
  40. appendfsync everysec
  41. no-appendfsync-on-rewrite yes
  42. auto-aof-rewrite-percentage 100
  43. auto-aof-rewrite-min-size 64mb
  44. aof-load-truncated yes
  45. aof-use-rdb-preamble no
  46.  
  47. #################################################################################################
  48. # 主从配置
  49. #################################################################################################
  50. # slaveof <masterip> <masterport>
  51. masterauth helloworld
  52. slave-serve-stale-data yes
  53. slave-read-only yes
  54. repl-diskless-sync no
  55. repl-diskless-sync-delay 5
  56. repl-ping-slave-period 10
  57. repl-timeout 60
  58. repl-disable-tcp-nodelay no
  59. repl-backlog-size 1mb
  60. repl-backlog-ttl 3600
  61. slave-priority 100
  62. min-slaves-to-write 1
  63. min-slaves-max-lag 10
  64. # slave-announce-ip 5.5.5.5
  65. # slave-announce-port 1234

注意红色部分的配置需要根据实际情况进行修改!

3. 启动 Redis:

  1. /data/services/redis-master-slave-17000/bin/redis-server /data/services/redis-master-slave-17000/conf/redis-17000.conf

4. 在 102 / 103 上面指定主库:

  1. /data/services/redis-master-slave-17000/bin/redis-cli -p 17000 -a helloworld slaveof 192.168.200.101 17000

会和 MySQL 一样提示你在命令行使用密码不安全:

5. 查看主从状态:

  1. /data/services/redis-master-slave-17000/bin/redis-cli -p 17000 -a helloworld info replication

主库查看到结果:

从库上查看结果:

6. 测试,所有节点都连接上:

在主上面 set key:

在从上面 get key:

7. 至此,简单的主从搭建完成,但是在日常工作中,主从只是基础,一般不会单独使用,更多的还是后面根据主从演变出来的环境。

Redis for OPS 04:主从复制的更多相关文章

  1. Redis高可用之主从复制实践(四)

    0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...

  2. 架构师养成记--32.Redis高级(安全 主从复制)

    Redis高级命令及特性 keys * 返回满足的所有键值(*表示模糊匹配) exists 是否存在指定的key(返回1表示存在,0表示不存在) expire 设置某个key的过期时间,使用ttl查看 ...

  3. Redis实战 | 持久化、主从复制特性和故障处理思路

    前言 前面两篇我们了解了Redis的安装.Redis最常用的5种数据类型.本篇总结下Redis的持久化.主从复制特性,以及Redis服务挂了之后的一些处理思路. 前期回顾传送门: Linux下安装Re ...

  4. Redis高可用之主从复制原理演进分析

    Redis高可用之主从复制原理演进分析 在很久之前写过一篇 Redis 主从复制原理的简略分析,基本是一个笔记类文章. 一.什么是主从复制 1.1 什么是主从复制 主从复制,从名字可以看出,至少需要 ...

  5. redis之master.slave主从复制

    简介 主机数据更新后根据配置和策略,自动同步到备机的master/slave机制,master以写为主,slave以读为主 从库配置 配置从库,不配主库 配置从库: 格式: slaveof 主库ip ...

  6. 解密Redis的持久化和主从复制机制

    Redis持久化 Redis 提供了多种不同级别的持久化方式: RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AOF 持久化记录服务器执 ...

  7. Redis(4)---主从复制

    Redis主从复制 一.环境搭建      既然是主从复制,那肯定需要多个redis服务器,下面我先创建3个服务器,™的端口号分别是:6379.6380.6381.   1.复制默认配置文件redis ...

  8. redis高可用(主从复制)

    熟练掌握redis需要从 reids如何操作5种基本数据类型,redis如何集群,reids主从复制,redis哨兵机制redis持久化 reids主从复制 的作用可以:实现数据备份,读写分离,集群, ...

  9. 【Redis学习之八】Redis集群:主从复制

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 redis-2.8.18 Redis集群分类: 主从复制 R ...

随机推荐

  1. 电竞行业年轻新潮流yabo055解读亚博电竞3.0时代

    据相关统计,目前我国电竞行业yabo055点康姆的电竞竞菜市场规模最少在百亿级别以上,这是在以前完全不能想象的.2018年,中国正式开始进入Gaming 3.0时代.想要投入电竞行业的人员越来越多,不 ...

  2. git 分布式控制版本管理器(上)

    git的作用: 1.更方便的存储版本 2.恢复之前的版本 3.更方便的对比 4.协同合作 下载地址git官网: https://git-scm.com/ 可自选自己电脑的操作系统 安装: 一路next ...

  3. Spring 中的观察者模式

    一.Spring 中观察者模式的四个角色 1. 事件(ApplicationEvent) ApplicationEvent 是所有事件对象的父类.ApplicationEvent 继承自 jdk 的 ...

  4. 使用fidder对安卓模拟器进行抓包

    本文主要介绍fiddler4对安卓模拟器的抓包设置 首先在官网下载fiddler4进行安装,然后下载安卓模拟器,这里使用网易的MuMu模拟器. 1.fiddler4的设置对于fiddler4的设置,首 ...

  5. shiro实战(2)--ssm

    一.web.xml的配置 <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi=& ...

  6. opencv与mfc显示图片操作,MFC的鼠标响应在opencv图片上失效,opencv滚轮事件没有响应问题描述解决。

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11588758.html 用mfc 与OPENCV编写成. 出了很多冲突异常事件导致鼠标操作没有 ...

  7. 动态SQL与变量绑定

    有时候动态sql需要进行变量的赋值,这个时候就需要调用系统的存储过程sp_executesql了.使用中还是有些注意事项,代码如下: --字符型字段需声明为NVARCHAR类型 ),) --动态SQL ...

  8. Git - Git分支管理策略

    前言 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的c ...

  9. 36-Docker 的两类存储资源

    我们从本章开始讨论 Docker 存储. Docker 为容器提供了两种存放数据的资源: 由 storage driver 管理的镜像层和容器层. Data Volume. 我们会详细讨论它们的原理和 ...

  10. bay——linux6.5-PV-LV-VG扩容.txt

    [root@rac2 cdrom]# export LANG=en_US[root@rac2 cdrom]# lsblk[root@rac2 cdrom]# lvscan --- 查看系统PV LV ...