当前位置: 首页 > 编程日记 > 正文

Redis初学16:主从复制

主从复制

简介

主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主,如下图:
在这里插入图片描述
好处:
1.读写分离,性能扩展
2.容灾快速恢复

搭建

我这里准备了三台Linux设备(一台阿里云服务器,两台虚拟机),服务器当主机,两台虚拟机当从机。我在两台虚拟机上面也安装了Redis。

过程:

  1. 启动三台设备上的Redis服务

  2. 然后使用info replication命令查看主从复制的相关信息
    一般显示的信息都如下图所示:
    在这里插入图片描述
    我们可以看到,一开始,三台设备还没设置主从时都属于主机。

  3. 配置主机
    主机一定要修改bind 127.0.0.1 -::1,将127.0.0.1修改成自己主机的ip地址或者修改成0.0.0.0(表示所有主机都可以连接到redis),我这里因为设置了密码所以设置成所有主机都可以访问,如下图:
    在这里插入图片描述
    配置完之后重启Redis!!!

  4. 配置从机
    (1)关闭从机的防火墙;
    (2)修改从机的bind 127.0.0.1 -::1,将127.0.0.1修改成0.0.0.0;
    (3)如果redis的主机设置了密码,需要在从机的config文件中进行配置。对从机的redis.conf文件中的masterauth位置进行配置,如下图:
    在这里插入图片描述
    (4)重启Redis之后,使用slaveof命令配置从机

slaveof 主机的ip 主机redis运行使用的端口号

在两台虚拟机上面执行该命令之后,重新info replication命令查询状态,如下图:
在这里插入图片描述
我们可以看到,此时虚拟机的角色从主机变成了从机。
我们新增一个键进行测试,如下图:
在这里插入图片描述
这表明我们主从复制成功搭建起来了。

特点:
1.在主机上写,在从机上可以读取数据,在从机上写数据报错,如下图:

从机写数据报错
在这里插入图片描述
2.主机挂掉,重启就行,一切如初;从机挂掉之后要重新使用slaveof命令设置为从机

主从复制原理

全量复制:而从服务器(slave)在接收到rdb数据库文件数据后,将其存盘并加载到内存中
全量复制过程:

  1. 当从服务器(slave)启动成功连接到主服务器(master)后会发送一个进行数据同步的消息;
  2. 主服务器(master)接到消息之后会启动后台的存盘进程(把主服务器数据进行持久化),同时收集所有接收到的用于修改数据集命令, 在后台进程执行完毕之后,主服务器(master)将传送整个rdb数据文件到从服务器(slave),完成一次完全同步;

增量复制:主服务器(master)继续将新的所有收集到的修改命令依次传给从服务器(slave),完成同步。
注意:这个过程是主服务器(master)主动去做的,不需要从服务器(slave)发出消息申请进行。

只要是从服务器(slave)重新连接主服务器(master),一次完全同步(全量复制)将被自动执行
在这里插入图片描述

主从复制常用操作

“薪火相传”

上一个从服务器(slave)可以是下一个从服务器(slave)的主服务器(master),slave同样可以接收其他 slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻master的写压力,去中心化降低风险,如下图:
在这里插入图片描述
用法:

slaveof ip 端口号(port)

中途变更转向:会清除之前的数据,重新建立拷贝最新的
风险:
1.一旦某个slave宕机,后面的slave都没法备份;
2.主机挂了,从机还是从机,无法写数据了;

“反客为主”

当一个master宕机后,后面的slave可以立刻升为master,其后面的slave不用做任何修改。
用法:

slaveof  no one

用 slaveof no one 将从机变为主机。

哨兵模式

简介

反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库,如下图:
在这里插入图片描述

使用步骤

配置哨兵

1.在主机配置文件目录下新建sentinel.conf文件。名字绝不能错
2.配置哨兵,填写内容
在sentinel.conf文件里面填写,
sentinel monitor mymaster 主机ip 6379 1
sentinel auth-pass mymaster 密码
其中mymaster为监控对象起的服务器名称, 1 为至少有多少个哨兵同意迁移的数量(意为有多少个哨兵认为主机挂掉了才同意迁移,1是一个哨兵认为主机挂掉了就迁移,2是得两个哨兵都认为主机挂掉了才可以迁移)
注意:sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同。
3.启动哨兵
在sentinel.conf文件目录底下执行 redis-sentinel sentinel.conf 命令,启动哨兵,如下图:
在这里插入图片描述
上面红框中就是从机的信息,正好和master的slave信息对应着,如下图:
在这里插入图片描述
配置哨兵这里有个坑要说一下:
哨兵启动后找不到slave
原因:
1.没有在服务器开放26379端口,阿里云服务器的还要在阿里云安全组也开放这个端口;
2.slave挂掉了…

哨兵监控

当主机挂掉后,从机选举会产生新的主机
我们人为地把主机的进程 kill 掉,
(大概10秒左右可以看到哨兵窗口日志,切换了新的主机)
哪个从机会被选举为主机呢?根据优先级别:slave-priority
原主机重启后会变为从机。

我这里一直出问题…主服务器挂掉之后一直启用不了从服务器作为master😭

复制延时

由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。

故障恢复

在这里插入图片描述
关于选择条件的解释:
优先级在redis.conf中默认:slave-priority 100,值越小优先级越高
偏移量是指获得原主机数据最全的
每个redis实例启动后都会随机生成一个40位的runid

相关文章:

UITableView数据的添加、删除、移动

数据的添加、删除4个步骤:1、现在导航视图上面添加一个按钮,可以是系统自带的编辑按钮editButtonItem2、实现方法让将要执行删除添加操作的表视图处于编辑状态3、指定表视图中哪些行可以处于编辑状态,默认所有行都可以进行编辑4、指定编辑样式…

Saltstack 用户管理

最近测试组来了一大波,最为公司测试那必须要有qa环境,测试组老大跟我关系很好,他们组不少人对Linux也很了解,平时弄个东西啥的也能自己搞定,软磨硬泡加上最近真的很忙给他们配置了jenkins和开了qa环境用户权限&#xf…

ubuntu 14.04 双显卡安装NVIDIA GPU驱动+CUDA+编译配置caffe

******************************** 安装ubuntu************************* 1.在bios里设置使用集成显卡 2.安装ubuntu 14.04,不要联网安装,否则很慢 *********************************安装 GPU驱动********************** 3.去NVIDIA官网下载run格式…

虚幻引擎虚拟现实开发基础学习教程

流派:电子学习| MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz 语言:英语中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.93 GB |时长:5h 15m 了解如何使用Oculus Quest 2的蓝图在虚幻引擎4中从头开始构建基本的虚拟…

更换AppleWWDRCA.cer证书

从2月14号开始,上传AppStore时可能会碰到这个问题: Failed to locate or generate matching signing assets Xcode attempted to locate or generate matching signing assets and failed to do so because of the following issues. Missing iOS Distri…

Redis初学17:集群

集群 简介 Redis 集群实现了对Redis的水平扩容,即启动 N 个 redis 节点,将整个数据库分布存储在这 N 个节点中,每个节点存储总数据的 1/N 。 Redis 集群通过分区(partition)来提供一定程度的可用性(avail…

怒刷web前端笔试面试题(一)

2019独角兽企业重金招聘Python工程师标准>>> 1.有这么一段HTML&#xff0c;请挑毛病&#xff1a; <P> 哥写的不是HTML&#xff0c;是寂寞。<br><br> 我说&#xff1a;<br>不要迷恋哥&#xff0c;哥只是一个传说 考点1&#xff1a;html和 …

libcudart.so.6.5 cannot open shared object file: no such file or directory

在matlab中运行程序是可能出现libcudart.so.6.5 libcublas.so.6.5 libcurand.so.6.5 等一系列libcu*.so.版本号 找不到的问题。 解决方案是在/usr/local/cuda-版本号/ 目录下搜索到程序找不到的那个文件&#xff0c;然后做一个软连接到matlab目录。 以找不到libcudart.so.6.…

Python中完整的机器学习数据科学课程

学习每个机器学习模型背后的数学&#xff0c;然后用Python实现它 你会学到: 开发机器学习模型 创建机器学习模型的模板 学习每个机器学习模型背后的数学 要求: Python或任何编程语言的基础 时长:8h 15m |视频:. MP4&#xff0c;1280720 30 fps |音频:AAC&#xff0c;44.1 kHz…

Android 高清加载巨图方案 拒绝压缩图片

Android 高清加载巨图方案 拒绝压缩图片 转载请标明出处&#xff1a; http://blog.csdn.net/lmj623565791/article/details/49300989&#xff1b; 本文出自:【张鸿洋的博客】 一、概述 距离上一篇博客有段时间没更新了&#xff0c;主要是最近有些私事导致的&#xff0c;那么就先…

Docker初学1:初识Docker

前言&#xff1a;本博客内容是对【狂神说Java】中的Docker教程学习过程中的记录与总结 Docker的历史 Docker公司 Docker 公司位于旧金山&#xff0c;由法裔美籍开发者和企业家 Solumon Hykes 创立&#xff0c;其标志如下图所示。 Docker 公司起初是一家名为 dotCloud 的平台即…

Cstring的使用

https://msdn.microsoft.com/zh-cn/aa315043 1、字符串提取函数&#xff0c;CString::Left、CString::Mid 、CString::Right CString::Mid CString Mid( int nFirst ) const; throw( CMemoryException ); CString Mid( int nFirst, int nCount ) const; throw( CMemoryExcepti…

facebook maskrcnn 安装笔记

当前版本的maskrcnn严重依赖pythorch_nightly 1.0.0, 安装过程中一不留神会由于各个包之间不兼容导致no module named maskrcnn_benchmark. 注意以下三点即可&#xff1a; 1. 先安装ipython 2. 再单独安装torchvision。 conda install torchvision 3. 最后本地安装pytorch-…

Python完全学习大师班

面向所有人的Python:基础、中级和高级概念学习制作游戏和实时应用程序 你会学到: 从头开始学习Python 学习中级和高级概念 学习用Python制作实时应用程序 学习用Python制作游戏 要求 不需要编程经验:你将从头开始学习课程中的所有内容 MP4 |视频:h264&#xff0c;1280720 |音…

Docker初学2:Docker的安装

Docker的安装 Docker的架构图 我们先来介绍一下上面这张Docker架构图 镜像&#xff08;image&#xff09;&#xff1a; Docker 镜像&#xff08;Image&#xff09;就是一个只读的模板。镜像可以用来创建 Docker 容器&#xff0c;一个镜像可以创建很多容器。 就好似 Java 中的…

[ME]不知道第几次学c语言,仍觉得水深莫测

首先声明这篇东西是个人的碎碎念&#xff0c;没有任何干货。 接下c语言课助教的活儿时还没什么感觉&#xff0c;快要开学了&#xff0c;才感觉到紧张&#xff0c;逼着自己开始看老师发来的课件&#xff0c;说是查错&#xff0c;其实算是自己再好好学一遍&#xff0c;免得到时候…

MYSQL 主从复制 --- binlog

在 Master 端并不 Care 有多少个 Slave 连上了自己,只要有 Slave 的 IO 线程通过了连接认证,向他请求指定位置之后的 Binary Log 信息,他就会按照该 IO 线程的要求,读取自己的 Binary Log 信息,返回给 Slave 的 IO 线程。默认MySQL是未开启该日志的。如果读压力加大,就需要更多的 slave 来解决,但是如果slave的复制全部从 master 复制,势必会加大 master 的复制IO的压力,所以就出现了级联复制,减轻 master 压力。

深入理解Oracle RAC 12c 笔记

深入理解Oracle RAC 12c 跳转至&#xff1a; 导航、 搜索文件夹 1 概述2 集群件管理和故障诊断3 执行实践4 新特性5 存储和ASM6 应用设计上的问题7 管理和调优一个复杂的RAC环境8 备份与恢复9 网络实践10 优化RAC数据库11 锁与死锁12 并行查询13 集群件和数据库升级14 RAC One …

MySQL 中 is null 和 =null 的区别

如果 set ANSI_NULLS为 ON 时,表示SQL语句遵循SQL-92标准;如果 set ANSI_NULLS 为 OFF 时,表示不遵从 SQL-92 标准。但SQL-92 标准要求对null的 = 或不等于 (!= ,) 比较取值都为 false,也就是 =null 或者 null,返回的都是false。null 在MySQL中不代表任何值,通过运算符是得不到任何结果的,因此只能用 is null(默认情况)MySQL 中 null 不代表任务实际的值,类似于一个未知数。

Back Propagation Nerual Networks

1 BP神经网络的优缺点及优化 1.1 BP神经网络的优点 由于预测的随机性和不确定性&#xff0c;传统的回归分析、数理统计等方法往往难以达到理想的预测效果。BP神经网络(Back一Propagation Network&#xff0c;BP)是人工神经网络(Artificial Neural Network&#xff0c;ANN)中应…

OpenCV和Python动手操作计算机视觉学习教程

使用OpenCV和Python进行实际操作 面向初学者的OpenCV Python动手操作计算机视觉 你会学到: NumPy基础知识 基于OpenCV的人脸检测 使用OpenCV在图像和视频上绘制形状 使用OpenCV进行平滑、模糊、阈值和形态学操作 基于OpenCV的目标跟踪 带有OpenCV的直方图 使用OpenCV查找车道线…

Docker初学3:Docker的常用命令

Docker的常用命令 帮助命令 帮助命令可以在我们遇到不懂的命令时帮助我们去了解它们怎么使用。 docker version # 显示 Docker 版本信息。 docker info # 显示 Docker 系统信息&#xff0c;包括镜像和容器数。。 docker --help # 帮助镜像命令 docker images doc…

fastJson的使用

Movie MovieJSON.parseObject(result, Movie.class); Toast.makeText(MainActivity.this, Movie.getDir()Movie.getNm()Movie.getPhotos().size(), 0).show(); 对于jsonArray,也就是先得到具体的某一个jsonarray,然后parseArray. JSONObject object new JSONObject(arg0); …

【C#】ASP.NET网页中添加单点登录功能

背景 首先&#xff0c;要说明的是&#xff0c;原先需求定义的是&#xff0c;同一个账号只能同时有一个人来登录&#xff0c;如果另外一个登录的话&#xff0c;前一个登陆者就自动被踢掉。本来原先要做成存储到服务器的数据库中&#xff0c;但是后来如果是非正常退出的话 下次就…

基于Python和OpenCV的目标跟踪学习教程 Object Tracking using Python and OpenCV

实现12种不同的算法来跟踪视频和网络摄像头中的对象&#xff01; 你会学到: 使用Python和OpenCV跟踪视频和网络摄像头中的对象 理解跟踪算法的基本直觉 实现12种跟踪算法 了解对象检测和对象跟踪之间的区别 要求 程序设计逻辑 基本Python编程 MP4 |视频:h264&#xff0c;128…

【12】AngularJS 事件

AngularJS 事件 AngularJS 有自己的 HTML 事件指令。 ng-click 指令 ng-click 指令定义了 AngularJS 点击事件。 <div ng-app"" ng-controller"myCtrl"><button ng-click"count count 1">点我&#xff01;</button><p>…

Docker初学4:下载运行一些必要的镜像

下载运行一些必要的镜像 下载运行nginx # 下载命令 docker pull nginx# 试运行 # -d 后台运行 # --name 设置容器名称 # -p 设置开放的端口号&#xff0c;宿主机端口端口号、容器端口号 [rootiZh40ti53pk77iZ blog]# docker run -d --name nginx01 -p 8083:80 nginx be2700af…

实验1 命令解释程序的编写

实验1 命令解释程序的编写 一、 实验目的 &#xff08;1&#xff09;掌握命令解释程序的原理&#xff1b; &#xff08;2&#xff09;掌握简单的DOS调用方法&#xff1b; &#xff08;3&#xff09;掌握C语言编程初步。 二、 实验内容和要求 1、实验内容&#xff1a;根据教师指…

人工神经网络:感知器

人工神经网络&#xff1a;感知器 1.1 基本概念 1、输入节点&#xff1a;X1{x1,x2,x3,...,xi,...xn},for example&#xff0c;X1[1 2]; 2、输出节点&#xff1a;y{y1,y2},for example,y[0 1]; 3、权值&#xff1a;W{w1,w2,w3,...,wi,...,wn},for example,W[1 1];感知器学习规则…

基于Python的完全监督机器学习教程 Complete Supervised Machine Learning With Python

这门由行业和学术领袖开设的课程是为那些希望在数据科学领域建立有价值的职业生涯的人开设的 你会学到: 监督学习和非监督学习的原理及其区别。 线性和逻辑回归&#xff0c;决策树&#xff0c;回归树&#xff0c;随机森林&#xff0c;判别分析&#xff0c;支持向量机&#xff…