Redis集群中的数据库复制是通过主从同步来实现的

主节点(Master)把数据分发给从节点(Slave)

主从同步的好处在于高可用,Redis节点有冗余设计

主从复制的原理:
1. 从服务器向主服务器发送 SYNC 命令。
2. 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令。
3. 当主服务器执行完 BGSAVE 命令时,它会向从服务器发送 RDB 文件,而从服务器则会接收并载入这个文件。
4. 主服务器将缓冲区储存的所有写命令发送给从服务器执行。
-------------
1、在开启主从复制的时候,使用的是RDB方式的,同步主从数据的
2、同步开始之后,通过主库命令传播的方式,主动的复制方式实现
3、2.8以后实现PSYNC的机制,实现断线重连

一.实现一主两从的redis主从同步

1.环境准备

首先两台服务器都已经编译安装好redis了(由于开的是虚拟机开不了那么多,所有将一个从库部署在主库同个服务器上,注意生产中主从不会在同一台服务器的)

ip:192.168.1.209

一台服务器上做一主一从的redis配置

ip:192.168.1.208

一台服务器上做一个从redis配置

2.主库从库配置

(1)192.168.1.209 主库配置

首先创建一个主库端口6379的redis配置文件

配置文件redis-6379.conf 内容为:

# 声明端口
port
# 表示后台启动
daemonize yes
# 将pid文件放到某目录下
pidfile /data//redis.pid
# 日志级别和日志目录
loglevel notice
logfile "/data/6379/redis.log"
# 持久化相关
# dir /data/
# 安全模式
protected-mode no

# 密码设置,redis一般不要密码

# requirepass hsz

配置完成后,创建一个这个redis的数据存放目录(数据包括日志,pid)

# mkdir /data/6379/

启动redis服务

# redis-server redis-6379.conf

# 查看是否有进程

下截图说明程序已经启动:

进入redis中

# redis-cli -p 6379

(2)192.168.1.209 从库配置

首先创建一个主库端口6380的redis配置文件

配置文件redis-6380.conf 内容为:

port 

daemonize yes

pidfile /data//redis.pid

loglevel notice

logfile "/data/6380/redis.log"

dbfilename dump.rdb

dir /data/

protected-mode no

配置完成后,创建一个这个redis的数据存放目录(数据包括日志,pid)

# mkdir /data/6380/

启动redis服务

# redis-server redis-6380.conf

# 查看是否有进程

下截图说明程序已经启动:

进入redis中

# redis-cli -p 6380

因为是从库在配置文件上加一台配置:

#     主库ip      主库端口

slaveof 192.168.1.209 6379

添加后重启数据库

kill -9 从库进程号

redis-server /opt/redis_conf/redis-6379.conf

(3)192.168.1.208 从库配置

与(2)192.168.1.209 从库配置配置相同,就端口不一样

直到进入redis中:

# ps aux|grep redis

#redis-cli -p 6381

因为是从库在配置文件上加一台配置:

#     主库ip      主库端口

slaveof 192.168.1.209 6379

添加后重启数据库

pkill redis

redis-server /opt/redis_conf/redis-6381.conf

3.查看主从数据库状态

# 主服务上运行

redis-cli -p 6379 info

redis-cli -p 6381 info replication

以下截图分别为两台服务器的ip,端口,状态等

# 从服务器上运行

# 下面端口为从数据库自己的端口

# redis-cli -p 6380 info replication

截图参数分别表示:role为角色,redis主库ip,主库端口,已经连接主库状态

4.验证从库只读

数据写不进去,如下图

主库写入数据验证从库是同步验证

从库数据查询,可以查到数据

5.手动进行主从复制故障切换

现在将主库关闭,一主两从现在只有两个主库,都写入不了

这样的话,redis就写入不了

所有这时候需要将一个从库升级为主库(一般是自动升级,但是我们现在来学习手动设置一个)

将一个从库取消从库身份,这时候从库变为主库

127.0.0.1:6381> slaveof no one

127.0.0.1:6381> info replication

但是呢,别的从库不知道,此库变为主库,所以需要将另外一个从库认定这个库为主库,才能进行主从复制的功能

127.0.0.1:6380> slaveof no one

127.0.0.1:6380> slaveof 192.168.1.208 6381

查看主库与从库状态:

127.0.0.1:6380> info replication

在从库查看来看,已经有新的主库了,而且连接状态正常,下面是主库的信息

这样的修改只能实现临时主从状态,如果要将永久设置需要将配置文件中的主从修改为现在的主库的ip的端口

原来的主库作为从库操作

指定现在从库的信息,在数据库设置只是临时的

127.0.0.1:6379> slaveof 192.168.1.208 6381

127.0.0.1:6379> info replication

如果这时候将主库关闭,再起来,从库不会识别,所有这时候我们就引出一个哨兵模式,可以解决主库挂掉,数据还能正常存储的问题解决==>请见redis-sentinel主从复制高可用

redis 之 redis主从复制的更多相关文章

  1. nginx+tomcat+redis sesson id主从复制

       Redis与Memcached的区别:     内存利用率:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储, ...

  2. redis数据库安装 redis持久化及主从复制

    ----------------------------------------安装redis-5.0.4---------------------------------------- wget h ...

  3. 【中间件】Redis 实战之主从复制、高可用、分布式

    目录 简介 持久化 主从复制 高可用 Redis-Sentinel .NET Core开发 分布式 Redis-Cluster 配置说明 常见问题 简介 本节内容基于 CentOS 7.4.1708, ...

  4. Redis集群主从复制(一主两从)搭建配置教程【Windows环境】

    如何学会在合适的场景使用合适的技术方案,这值得思考. 由于本地环境的使用,所以搭建一个本地的Redis集群,本篇讲解Redis主从复制集群的搭建,使用的平台是Windows,搭建的思路和Linux上基 ...

  5. Redis全方位讲解--主从复制

    前言 前面介绍了redis持久化和容灾备份,这篇会介绍redis主从复制和redis持久化在主从复制中的一些应用.因为本人没有那么多服务器或机器,所以这里主要介绍下如何在docker容器中搭建主从复制 ...

  6. Redis全方位讲解--主从复制(转载)

    前言 前面介绍了redis持久化和容灾备份,这篇会介绍redis主从复制和redis持久化在主从复制中的一些应用.因为本人没有那么多服务器或机器,所以这里主要介绍下如何在docker容器中搭建主从复制 ...

  7. Redis 学习之主从复制

    该文使用centos6.5 64位    redis3.2.8 主从复制 Redis的复制功能是支持多个数据库之间的数据同步.一类是主数据库(master)一类是从数据库(slave),主数据库可以进 ...

  8. 10分钟彻底理解Redis持久化和主从复制

    在这篇文章,我们一起了解 Redis 使用中非常重要的两个机制:Reids 持久化和主从复制. 什么是 Redis 持久化? Redis 作为一个键值对内存数据库(NoSQL),数据都存储在内存当中, ...

  9. Redis 实战之主从复制、高可用、分布式

      目录 简介 持久化 主从复制 高可用 Redis-Sentinel .NET Core开发 分布式 Redis-Cluster 配置说明 常见问题 简介 本节内容基于 CentOS 7.4.170 ...

  10. Redis进阶:Redis的主从复制机制

    Redis进阶:Redis的主从复制机制 主从复制机制介绍 单机版的Redis存在性能瓶颈,Redis通过提高主从复制实现读写分离,提高了了Redis的可用性,另一方便也能实现数据在多个Redis直接 ...

随机推荐

  1. python 读取一个文件夹下的所jpg文件保存到txt中

    最近需要使用统计一个目录下的所有文件,使用python比较方便,就整理了一下代码. import os def gci(filepath): files = os.listdir(filepath) ...

  2. cmake 单个目录多个文件的情况

    参考:https://www.hahack.com/codes/cmake/# 源文件一共有三个:main.cpp.MathFunctions.h.MathFunctions.cpp 文件内容分别如下 ...

  3. CSS3实现魔方动画

    本文将借助css3实现魔方动画效果,设计思路如下: HTML方面采用六个div容器形成六个立方面: CSS方面采用transform-style: preserve-3d;形成三维场景:transfo ...

  4. python练习:编写一个程序,要求用户输入一个整数,然后输出两个整数root和pwr,满足0<pwr<6,并且root**pwr等于用户输入的整数。如果不存在这样一对整数,则输入一条消息进行说明。

    python练习:编写一个程序,要求用户输入一个整数,然后输出两个整数root和pwr,满足0<pwr<6,并且root**pwr等于用户输入的整数.如果不存在这样一对整数,则输入一条消息 ...

  5. unittest和unittest2的区别差异、unittest2框架------执行原理

    unittest和unittest2的区别差异 参考:https://pypi.org/project/unittest2/ unittest2是Python 2.7及更高版本中添加到unittest ...

  6. 加密设备NAT对IPSec的影响

    加密设备NAT对IPSec VPN的影响:我们先配置好经典的IPSec VPN,然后在R3上做PAT看会对IPSec VPN产生什么影响(不会对有隧道的IPSec VPN技术产生影响). 现在默认配置 ...

  7. Codeforces Round #611 (Div. 3) D

    There are nn Christmas trees on an infinite number line. The ii -th tree grows at the position xixi ...

  8. C++11特性中的stoi、stod

    本文摘录柳神笔记:   使⽤ stoi . stod 可以将字符串 string 转化为对应的 int 型. double 型变量,这在字符串处理的很 多问题中很有帮助-以下是示例代码和⾮法输⼊的处理 ...

  9. NLP直播-1 词向量与ELMo模型

    翻车2次,试水2次,今天在B站终于成功直播了. 人气11万. 主要讲了语言模型.词向量的训练.ELMo模型(深度.双向的LSTM模型) 预训练与词向量 词向量的常见训练方法 深度学习与层次表示 LST ...

  10. dp求解各种子串子序列

    目录 概念 最长上升子序列 最长连续子串 最长公共子序列 最长公共上升子序列 注:dp可能并不是求解该这些问题的最优算法,这里只是做一个dp 算法的简介. 概念 定义:假设现有一个 string = ...