Redis高可用之主从复制实践(四)
0、Redis目录结构
5)Redis高可用之哨兵模式Sentinel配置与启动(五)
一、介绍
1、Redis的高可用有如下几个部分组成:
第一部分:redis主从复制
第二部分:Sentinel哨兵模式
第三部分:集群部署
本篇将介绍第一部分-redis 主从复制。那么问题来了,为什么需要主从复制呢?
2、为什么需要主从复制呢?
从以下三点说明:
A、redis单机一旦故障,可用通过从服务器上进行恢复数据;
B、redis要达到高可用、高并发,只有单个redis是不够的,单个redis也就只能支持几万的QPS,所以必须以集群的形式提供服务,而集群中又以多个主从组成。
C、主从是以多个redis集合在一起,以一个master多个slave为模式对外提供服务,master主要以写为主,slave提供读,即是读写分离的情况,以读多写少为准。比如电商网站中的商品,读的多,写的少。
如果上面三点还不懂,没关系,我说明一下 单机redis 的问题:
A、机器故障
B、容量瓶颈
C、QPS瓶颈
这个也是我们在互联网产品中经常会遇到的问题。
3、那么主从复制的原理是什么呢?
上面已经说明了为什么需要主从复制,那么其内部的原理是什么呢?我在最下面配置的时候也通过了日志来解释这一切
主要分为全量同步和增量同步

4、主从复制的特性是什么呢?
1) 一个master可以有多个slave;
2) 一个slave只能有一个master;
3) 数据流是单向的,master到slave;
4) 主从复制底层依赖与RDB方式进行全量复制。
注意说明:
针对与RDB方式保存有分为 save 和 bgsave 命令,两者的区别在于save为同步保存,即存在阻塞;而bgsave为异步保存,非阻塞。
在上面原理中有给出redis主从复制采用的是bgsave的方式,如若不清楚也可以看下面log日志中的内容。
二、Redis主从复制
1、环境配置
第一:准备3台服务器,一台master ,两台 slave
主机说明 | 主机IP | 端口 |
master |
192.168.250.132 |
7000 |
slave | 192.168.250.133 | 7001 |
slave |
192.168.250.134 |
7002 |
第二:每台服务器安装redis版本保持一致
安装教程传送门:《Redis介绍及部署在CentOS7上(一)》
环境都准备完毕,现在就可以开始配置啦。
2、Redis主从复制配置
第一:进入132 服务器的redis目录下
新建一个redis配置文件,以下内容大家可自行扩展,这边说明一点就是数据持久化我这边采用AOF,这也是官方推荐的,效率高,而且持久化是必须的,如果没有持久化则数据容易丢失。如果想了解redis的持久化,可以看我另外一篇文章《Redis客户端连接及持久化配置(三)》。
文件名 redis-7000.conf
daemonize yes
port
logfile .log
dir ./
requirepass 123
masterauth 123 # 132服务器配置masterauth作用主要是为了后期sentinel引入后重新选举master并且7000端口redis重新加入主从复制时必备的,否则会出现权限不足
bind 192.168.250.132 127.0.0.1
# AOF 数据持久化
appendonly yes
appendfilename aof-.aof
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage
auto-aof-rewrite-min-size 64mb
注意说明:为了安全
A、需要设置密码,密码必须复杂;
B、设置bind 的IP地址,此IP为redis服务器IP以及本地127,如果没有设置 127,会出现无法启动问题,没有设置服务器IP会出现slave服务器无法连接master服务器。
第二:进入 133和134的服务器的redis目录下
新建redis配置文件, 133服务器为 redis-7001.conf ,134 服务器为redis-7002.conf
port
daemonize yes
logfile .log
dir ./
requirepass
slaveof 192.168.250.132
masterauth
bind 192.168.250.133 127.0.0.1 # AOF 数据持久化
appendonly yes
appendfilename aof-.aof
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage
auto-aof-rewrite-min-size 64mb
注意说明:
A、slaveof 后面绑定的是master 服务器IP 和端口
B、需要设置master的密码,否则在连接的时候会报 权限不足
C、设置slave 服务器的密码强烈建议与master服务器上的密码一致,因为这样在后面的哨兵模式自动选出主服务器有很大的帮助,否则会报错。
D、134服务器跟上面的配置一致,只是端口号不一样。
配置完毕
第三:启动132、133、134的redis
./src/redis-server redis-.conf
./src/redis-server redis-7001.conf
./src/redis-server redis-7002.conf
我们来通过日志分析一下,redis主从复制启动的过程是怎么样的吧。
我们从132master服务器的 7000.log 日志来进行讲解。
说明:建议大家自行操作然后对照着下面的说明,有助于大家理解。
A、132启动,然后133redis启动会开始请求与133redis进行连接与数据同步,当134启动也会进行数据同步;
B、并且同步的数据会默认保存在 dump.rdb 这个文件中,建议自行配置持久化方式,传送门《Redis客户端连接及持久化配置(三)》此处文章预计本周五之前发布;
C、然后 把134 redis 关闭,又重新启动,然后132master服务器redis 关闭有启动的一系列操作。
==================132redis启动================================================
:C Jan ::20.481 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
:C Jan ::20.481 # Redis version=5.0., bits=, commit=, modified=, pid=, just started
:C Jan ::20.481 # Configuration loaded
:M Jan ::20.482 * Increased maximum number of open files to (it was originally set to ).
:M Jan ::20.483 * Running mode=standalone, port=.
:M Jan ::20.483 # WARNING: The TCP backlog setting of cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of .
:M Jan ::20.483 # Server initialized
:M Jan ::20.483 # WARNING overcommit_memory is set to ! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
:M Jan ::20.483 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
:M Jan ::20.483 * Ready to accept connections ==================133redis启动开始请求同步======================================
:M Jan ::56.213 * Replica 192.168.250.133: asks for synchronization
:M Jan ::56.213 * Full resync requested by replica 192.168.250.133: # 主从复制 默认 RDB 持久化
:M Jan ::56.213 * Starting BGSAVE for SYNC with target: disk
:M Jan ::56.214 * Background saving started by pid
:C Jan ::56.216 * DB saved on disk
:C Jan ::56.216 * RDB: MB of memory used by copy-on-write
:M Jan ::56.299 * Background saving terminated with success # 133 redis 数据同步成功
:M Jan ::56.299 * Synchronization with replica 192.168.250.133: succeeded ==================134redis启动开始请求同步=======================================
:M Jan ::25.389 * Replica 192.168.250.134: asks for synchronization
:M Jan ::25.389 * Full resync requested by replica 192.168.250.134: # 主从复制 默认 RDB 持久化
:M Jan ::25.389 * Starting BGSAVE for SYNC with target: disk
:M Jan ::25.390 * Background saving started by pid
:C Jan ::25.391 * DB saved on disk
:C Jan ::25.392 * RDB: MB of memory used by copy-on-write
:M Jan ::25.402 * Background saving terminated with success # 133 redis 数据同步成功
:M Jan ::25.402 * Synchronization with replica 192.168.250.134: succeeded ==================134redis关闭日志===============================================
:M Jan ::13.850 # Connection with replica 192.168.250.134: lost. ==================134redis重新启动日志============================================
:M Jan ::28.885 * Replica 192.168.250.134: asks for synchronization
:M Jan ::28.885 * Partial resynchronization request from 192.168.250.134: accepted. Sending bytes of backlog starting from offset . ==================132redis强制关闭================================================
:M Jan ::06.369 # User requested shutdown...
:M Jan ::06.369 * Removing the pid file.
:M Jan ::06.369 # Redis is now ready to exit, bye bye... ==================132redis 主服务器再次上线,同步数据以及连接slave服务器===============
:M Jan ::47.189 * Background saving terminated with success
:M Jan ::47.189 * Synchronization with replica 192.168.250.133: succeeded
:M Jan ::47.807 * Replica 192.168.250.134: asks for synchronization
:M Jan ::47.807 * Partial resynchronization not accepted: Replication ID mismatch (Replica asked for 'd0ff33789382fccfe621d9ad03c26cc545bda3fa', my replication IDs are '00591a20c6cafe8f906632746d514e99213ee121' and '')
:M Jan ::47.807 * Starting BGSAVE for SYNC with target: disk
:M Jan ::47.808 * Background saving started by pid
:C Jan ::47.809 * DB saved on disk
:C Jan ::47.809 * RDB: MB of memory used by copy-on-write
:M Jan ::47.894 * Background saving terminated with success
:M Jan ::47.894 * Synchronization with replica 192.168.250.134: succeeded
三、总结
1、slave服务器上面的数据都是从master服务器上同步的,一旦master挂掉,则slave服务器无法进行增量同步,假设某项目使用了slave服务器进行写的操作,当master服务器开启后,slave服务器会进行与master服务器进行
全量同步,这样导致原先保存在slave上的数据丢失,当然这个例子是假设,一般slave只当做读的操作。
2、如果master宕机后,如何保证redis还可以正常使用呢?则我们就需要引入Sentinel进行master的选择啦。
3、通过以上的日志分析,我们基本上已经明白redis的主从复制啦。那么下一篇将会介绍 当redis 挂掉后自动选举 主redis的哨兵模式Sentinel。
参考文章:
《Redis主从复制原理总结》:https://www.cnblogs.com/kevingrace/p/5685332.html
《Redis主从复制原理》:https://www.cnblogs.com/hepingqingfeng/p/7263782.html
asp.net core 交流群: 欢迎加群交流
如果您认为这篇文章还不错或者有所收获,您可以点击右下角的【推荐】按钮精神支持,因为这种支持是我继续写作,分享的最大动力!
微信公众号:欢迎关注 QQ技术交流群: 欢迎加群
Redis高可用之主从复制实践(四)的更多相关文章
- Redis高可用之主从复制原理演进分析
Redis高可用之主从复制原理演进分析 在很久之前写过一篇 Redis 主从复制原理的简略分析,基本是一个笔记类文章. 一.什么是主从复制 1.1 什么是主从复制 主从复制,从名字可以看出,至少需要 ...
- redis高可用(主从复制)
熟练掌握redis需要从 reids如何操作5种基本数据类型,redis如何集群,reids主从复制,redis哨兵机制redis持久化 reids主从复制 的作用可以:实现数据备份,读写分离,集群, ...
- Redis高可用之集群配置(六)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
- Redis高可用之哨兵模式Sentinel配置与启动(五)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
- Redis高可用(持久化、主从复制、哨兵、集群)
Redis高可用(持久化.主从复制.哨兵.集群) 目录 Redis高可用(持久化.主从复制.哨兵.集群) 一.Redis高可用 1. Redis高可用概述 2. Redis高可用策略 二.Redis持 ...
- Redis如何实现高可用【主从复制+哨兵机制+keepalived】
实现redis高可用机制的一些方法: 保证redis高可用机制需要redis主从复制.redis持久化机制.哨兵机制.keepalived等的支持. 主从复制的作用:数据备份.读写分离.分布式集群.实 ...
- redis如何实现高可用【主从复制、哨兵机制】
实现redis高可用机制的一些方法: 保证redis高可用机制需要redis主从复制.redis持久化机制.哨兵机制.keepalived等的支持. 主从复制的作用:数据备份.读写分离.分布式集群.实 ...
- Redis高可用详解:持久化技术及方案选择
文章摘自:https://www.cnblogs.com/kismetv/p/9137897.html 前言 在上一篇文章中,介绍了Redis的内存模型,从这篇文章开始,将依次介绍Redis高可用相关 ...
- Redis高可用详解:持久化技术及方案选择 (推荐)--转载自编程迷思博客www.cnblogs.com/kismetv/p/8654978.html
一.Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义. 我们知道,在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常 ...
随机推荐
- 「Vue」nrm
nrm使用只是单纯的提供了几个常用的下载包的URL地址,并能让我们在这几个地址之间很方便的切换,但是我们每次装包的时候,使用的装包工具都是npmnpm i nrm -g 安装nrmnrm ls 查看镜 ...
- 也谈创业企业CEO该拿多少工资
网上看到一篇文章,关于创业公司CEO要给自己开多少工资. 当然,原文中的一些创业公司例子都过于高大上,譬如一创业就拿到A轮B轮的融资.对于这样的案例我想说的是:“太脱离人民大众创业者”. 纵观我国的I ...
- Jquery 较好的效果
仿google图片效果图片展示相册(jquery)的演示页面 产品相册展示插件slideshow多图可翻页 懒人建站 Jquery分享A Jquery分享B Jquery分享C Jquery分享D
- HTML5 移动开发(CSS3设计移动页面样式)
1.如何创建CSS样式表 2.CSS3的卓越特性 3.基于设备属性改变样式的媒体查询 4.如何使用属性改变元标签创建更美观移动页面 层叠样式表是移动WEB开发中的一个重要组成部分,本次分享将学到如 ...
- 【转】用CornerStone配置SVN,HTTP及svn简单使用说明
已经安装了的小伙伴请直接看三步骤 一.下载地址 CornerStoneV2.6:http://pan.baidu.com/s/1qWEsEbM密码:www.macx.cn 二.安装破解方法 1.安装之 ...
- tclsh 用法
set foo "a bc" # 定义变量 set b {$a}; # 转义 b的值为" $a " ,而不是变量结果 ; incr a ; # 数字的自增. 将 ...
- 原生JS获取元素的位置与尺寸
1.内高度.内宽度: 内边距 + 内容框 element.clientWidth element.clientHeight 2.外高度,外宽度: 边框 + 内边距 + 内容框 element.offs ...
- FPGA学习笔记. 二分频和三分频
二分频和三分频 二分频:将输入频率CLK分为原来的 1/2 . 实现:在每次CLK的上升沿或下降沿将输出翻转. 三分频: 1/3占空比. 实现:可使用上升沿或下降沿计数生成输出.需要一个两位计数器. ...
- 【API】文件操作编程基础-CreateFile、WriteFile、SetFilePointer
1.说明 很多黑客工具的实现是通过对文件进行读写操作的,而文件读写操作实质也是对API函数的调用. 2.相关函数 CreateFile : 创建或打开文件或I/O设备.最常用的I/O设备如下:文件,文 ...
- 奈奎斯特定理 and 香农定理
-----------------------整理自<21ic电子网> 奈奎斯特定理(Nyquist's Theorem)和香农定理(Shannon's Theorem)是网络传输中的两个 ...