Redis for OPS 04:主从复制
写在前面的话
Redis 的主从其实和 MySQL 类似,更多的还是作为备份的功能存在,在复杂的 Rediis 集群架构中,主从也是不可或缺的。
主从复制
主从复制原理:
1. 从库通过命令连接到主库,并发送 SYNC 给主库。
2. 主库接受到从库的 SYNC 后触发 BGSAVE,后台持久化 RDB,并发送给从库。
3. 从库收到 RDB 后开始恢复其中的数据。
4. 主库陆续将新生成的数据发送给从库。
5. 当从库发生故障,但是未造成数据损坏,那么下去重启后会自动重连主库,主库陆续将从库缺失部分发送过来。
关于主从的配置项,有以下一些,一般选择默认的就足够我们使用:
# 从库配置主库的IP端口
# slaveof <masterip> <masterport> # 主库有密码的时候配置密码
# masterauth <master-password> # 当slave与master断开或者正在同步的时候,设置yes返回的数据可能是旧的,设置no直接返回正在同步的错误
slave-serve-stale-data yes # 设置从库只读
slave-read-only yes # 主从是否使用无硬盘复制,即主不通过RDB文件直接传数据给从
repl-diskless-sync no # 选择无硬盘备份时,需要等待多久才传数据
repl-diskless-sync-delay 5 # 从向主周期性发送ping包时间
# repl-ping-slave-period 10 # 备份超时时间
# repl-timeout 60 # 是否禁用从的CTP_NODELAY,如果yes主从会有一点延时
repl-disable-tcp-nodelay no # 备份缓冲区,从库失联后会短暂的帮从库接受数据
# repl-backlog-size 1mb # 主多长时间没有和从连接就释放缓冲区
# repl-backlog-ttl 3600 # 从优先级,用于sentinel选主时使用,数字越小越高,但是0就不参与选举
slave-priority 100 # 主停止接受写请求,当从在线小于3个,滞后10秒时
# min-slaves-to-write 3
# min-slaves-max-lag 10 # Redis master能够通过不通方式列出从的地址和端口
# slave-announce-ip 5.5.5.5
# slave-announce-port 1234
搭建主从环境
在日常工作中,如果是简单的应用不那么重要,可能这种服务就只有一个机器,但为了更好的使用,这里还是使用三个虚拟机来配合搭建:
192.168.200.101 / 17000 作为默认主
192.168.200.102 / 17000 作为默认从
192.168.200.103 / 17000 作为默认从
1. 给 101 / 102 / 103 安装 redis:
mkdir -p /data/{backup,data,logs,packages,services}
/data/packages
tar -zxf redis-4.0.14.tar.gz
cd redis-4.0.14/
make
make PREFIX=/data/services/redis-master-slave-17000 install
cd /data/services/redis-master-slave-17000
mkdir data logs conf
2. 添加配置文件 /data/services/redis-master-slave-17000/conf/redis-17000.conf:
#################################################################################################
# Redis 配置文件
################################################################################################# #################################################################################################
# 基础配置
#################################################################################################
protected-mode yes
bind 0.0.0.0
requirepass helloworld
port 17000
tcp-backlog 2048
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /data/services/redis-master-slave-17000/logs/redis-17000.pid
loglevel notice
logfile "/data/services/redis-master-slave-17000/logs/redis-17000.log"
databases 16
always-show-logo yes #################################################################################################
# RDB持久化配置
#################################################################################################
dbfilename dump-17000.rdb
dir "/data/services/redis-master-slave-17000/data"
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes #################################################################################################
# AOF持久化配置
#################################################################################################
appendonly yes
appendfilename "appendonly-17000.aof"
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no #################################################################################################
# 主从配置
#################################################################################################
# slaveof <masterip> <masterport>
masterauth helloworld
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-ping-slave-period 10
repl-timeout 60
repl-disable-tcp-nodelay no
repl-backlog-size 1mb
repl-backlog-ttl 3600
slave-priority 100
min-slaves-to-write 1
min-slaves-max-lag 10
# slave-announce-ip 5.5.5.5
# slave-announce-port 1234
注意红色部分的配置需要根据实际情况进行修改!
3. 启动 Redis:
/data/services/redis-master-slave-17000/bin/redis-server /data/services/redis-master-slave-17000/conf/redis-17000.conf
4. 在 102 / 103 上面指定主库:
/data/services/redis-master-slave-17000/bin/redis-cli -p 17000 -a helloworld slaveof 192.168.200.101 17000
会和 MySQL 一样提示你在命令行使用密码不安全:
5. 查看主从状态:
/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:主从复制的更多相关文章
- Redis高可用之主从复制实践(四)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
- 架构师养成记--32.Redis高级(安全 主从复制)
Redis高级命令及特性 keys * 返回满足的所有键值(*表示模糊匹配) exists 是否存在指定的key(返回1表示存在,0表示不存在) expire 设置某个key的过期时间,使用ttl查看 ...
- Redis实战 | 持久化、主从复制特性和故障处理思路
前言 前面两篇我们了解了Redis的安装.Redis最常用的5种数据类型.本篇总结下Redis的持久化.主从复制特性,以及Redis服务挂了之后的一些处理思路. 前期回顾传送门: Linux下安装Re ...
- Redis高可用之主从复制原理演进分析
Redis高可用之主从复制原理演进分析 在很久之前写过一篇 Redis 主从复制原理的简略分析,基本是一个笔记类文章. 一.什么是主从复制 1.1 什么是主从复制 主从复制,从名字可以看出,至少需要 ...
- redis之master.slave主从复制
简介 主机数据更新后根据配置和策略,自动同步到备机的master/slave机制,master以写为主,slave以读为主 从库配置 配置从库,不配主库 配置从库: 格式: slaveof 主库ip ...
- 解密Redis的持久化和主从复制机制
Redis持久化 Redis 提供了多种不同级别的持久化方式: RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AOF 持久化记录服务器执 ...
- Redis(4)---主从复制
Redis主从复制 一.环境搭建 既然是主从复制,那肯定需要多个redis服务器,下面我先创建3个服务器,™的端口号分别是:6379.6380.6381. 1.复制默认配置文件redis ...
- redis高可用(主从复制)
熟练掌握redis需要从 reids如何操作5种基本数据类型,redis如何集群,reids主从复制,redis哨兵机制redis持久化 reids主从复制 的作用可以:实现数据备份,读写分离,集群, ...
- 【Redis学习之八】Redis集群:主从复制
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 redis-2.8.18 Redis集群分类: 主从复制 R ...
随机推荐
- http并发访问模型(2)
目录 http并发 并发访问模型 响应流程 从IO的角度看待响应 从函数的角度看待响应 日志处理 我叫张贺,贪财好色.一名合格的LINUX运维工程师,专注于LINUX的学习和研究,曾负责某中型企业的网 ...
- Tensorflow常用算数操作
TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU.一般你不需要显式指定使用 CPU 还是 GPU, TensorFlow 能自动检测.如果检测 ...
- Python 分析到底是谁操纵《庆余年》上了热搜?
庆余年电视剧终于在前两天上了,这两天赶紧爬取数据看一下它的表现. 庆余年 <庆余年>是作家猫腻的小说.这部从2007年就开更的作品拥有固定的书迷群体,也在文学IP价值榜上有名. ...
- kettle抽取数据发送邮件Linux调度
kettle抽取数据发送邮件Linux调度 #1.进入kettle安装目录 然后执行sqoop.sh文件启动kettlecd /app/pdi-ce-7.1.0.0-12/data-integrati ...
- 05-文档编辑与yum命令
一.Linux vi/vim vi是所有的Unix系统都会有,但是目前我们使用最多的是vim编辑器.vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性. vim是从vi发展出来的一个文本编辑 ...
- 记一次Tomcat启动报错Failed to start component [StandardEngine[Catalina].Standard
今天启动项目的时候,发现tomcat一直报错,之前都一直没有问题的啊,提示 org.apache.catalina.LifecycleException: Failed to start ...
- C# 波浪线绘制
波浪线效果如上 界面绘制操作 private Point? _startPoint = null; private void ContainerCanvas_OnPreviewMouseLeftBut ...
- Web前端基础(14):jQuery基础(一)
1. jQuery概述 1.1 为什么要使用jQuery 在用js写代码时,会遇到一些问题: window.onload 事件有事件覆盖的问题,因此只能写一个事件. 代码容错性差. 浏览器兼容性问题. ...
- js鼠标滚轮事件上滚下滚判断
onmousewheel <script> var scrollFunc = function (e){ //其实我一开始也不知道用啥 //console.log(e)我们可以打印一下 / ...
- Java反射04 : 通过Array动态创建和访问Java数组
java.lang.reflect.Array类提供了通过静态方法来动态创建和访问Java数组的操作. 本文转载自:https://blog.csdn.net/hanchao5272/article/ ...