`

构建高性能数据库缓存之redis主从复制

阅读更多
一、什么是redis主从复制?

主从复制,当用户往Master端写入数据时,通过Redis Sync机制将数据文件发送至Slave,Slave也会执行相同的操作确保数据一致;且实现Redis的主从复制非常简单。
二、redis主从复制特点

1、同一个Master可以拥有多个Slaves。

2、Master下的Slave还可以接受同一架构中其它slave的链接与同步请求,实现数据的级联复制,即Master->Slave->Slave模式;

3、Master以非阻塞的方式同步数据至slave,这将意味着Master会继续处理一个或多个slave的读写请求;

4、Slave端同步数据也可以修改为非阻塞是的方式,当slave在执行新的同步时,它仍可以用旧的数据信息来提供查询;否则,当slave与master失去联系时,slave会返回一个错误给客户端;

5、主从复制具有可扩展性,即多个slave专门提供只读查询与数据的冗余,Master端专门提供写操作;

6、通过配置禁用Master数据持久化机制,将其数据持久化操作交给Slaves完成,避免在Master中要有独立的进程来完成此操作。
三、redis主从复制原理

wKiom1Ozz5OThc6NAAGUIzDDlQs366.jpg

当启动一个Slave进程后,它会向Master发送一个SYNC Command,请求同步连接。无论是第一次连接还是重新连接,Master都会启动一个后台进程,将数据快照保存到数据文件中,同时Master会记录所有修改数据的命令并缓存在数据文件中。后台进程完成缓存操作后,Master就发送数据文件给Slave,Slave端将数据文件保存到硬盘上,然后将其在加载到内存中,接着Master就会所有修改数据的操作,将其发送给Slave端。若Slave出现故障导致宕机,恢复正常后会自动重新连接,Master收到Slave的连接后,将其完整的数据文件发送给Slave,如果Mater同时收到多个Slave发来的同步请求,Master只会在后台启动一个进程保存数据文件,然后将其发送给所有的Slave,确保Slave正常。
四、服务器资源列表

wKiom1Ozz7PilaRGAAD2EbEmDy4850.jpg

五、配置过程

关于Redis的安装与配置这里便不操作,想了解的朋友请阅读:高性能数据库缓存之redis(一)http://cfwlxf.blog.51cto.com/3966339/1423106

3、1 Master端操作如下:
运行redis服务

    [root@redis_master sh]# redis-server/etc/redis/redis.conf

查询redis运行日志

wKioL1Ozz6bw05VBAAJdwyDX2eg504.jpg

##通过阅读日志文件输出的一些信息,可以看出Master与Slave建立连接时,需要执行的会话机制:加载数据文件至硬盘,用时0.012秒,可想而知速度是多么的快,当然得依据数据的大小去评测;服务连接至6379端口,收到Slave同步连接请求,开启“BGSAVE”同步等;


清除Master端数据库中所有Key

    [root@redis_master sh]# redis-cli  
    127.0.0.1:6379> FLUSHALL  
    OK  
    127.0.0.1:6379> keys *  
    (empty list or set)

3、2 Slave端操作如下:

[root@redis_slave ~]# vim/etc/redis/redis.conf

#添加Master端的IP与端口

    # slaveof <masterip><masterport>  
    slaveof 192.168.8.8 6379

运行redis

    [root@redis_slave ~]# redis-server/etc/redis/redis.conf

查询Slave运行日志

wKioL1Ozz7vRolYwAAOCbyhb-MU029.jpg

##分析redis日志,可以看出Slave与Master建立连接,数据同步的过程;如:发送SYNC命令,与Master端192.168.8.8:6379建立连接,然后Slave sync started;随后Master发送PING命令检查Slave的存活状态,复制被继续….
查询数据库中的所有key

    [root@redis_slave ~]# redis-cli                  
    127.0.0.1:6379> keys *  
    (empty list or set)

3、3 slave2端操作如下:

[root@redis_slave2 ~]# vim/etc/redis/redis.conf

#添加Slave端的IP与端口,实现级联复制;

    # slaveof <masterip><masterport>  
    slaveof 192.168.8.10 6379

#运行redis服务

    [root@redis_slave2 ~]# redis-server/etc/redis/redis.conf

查询redis运行日志

wKiom1Oz0AGRPpzyAAOAB3zsl1Q226.jpg

##结果与Slave1类似,只不过Slave2与Slave1(192.168.8.10:6379)建立连接,同步数据;MySQL的级联复制便是这样,Master->Slave1->Slave2;
#查询数据库的所有key

[root@redis_slave2 ~]# redis-cli

127.0.0.1:6379> keys *

(empty list or set)
3、4 master端操作如下:

    [root@redis_master sh]# redis-cli  
    127.0.0.1:6379> MSET ID 1005 NAMEMariaDB City BeiJing  
    OK  
    127.0.0.1:6379> MGET ID NAME City  
    1) "1005"
    2) "MariaDB"
    3) "BeiJing"
    127.0.0.1:6379> keys *  
    1) "NAME"
    2) "ID"
    3) "City"

3、5 客户端验证同步结果
slave1端验证

    [root@redis_slave ~]# redis-cli  
    127.0.0.1:6379> auth !@#aedf  
    127.0.0.1:6379> keys *  
    1) "City"
    2) "NAME"
    3) "ID"
    127.0.0.1:6379> MGET ID NAME City  
    1) "1005"
    2) "MariaDB"
    3) "BeiJing"

slave2端验证

    [root@redis_slave2 ~]# redis-cli  
    127.0.0.1:6379> keys *  
    1) "ID"
    2) "NAME"
    3) "City"
    127.0.0.1:6379> MGET ID NAME City  
    1) "1005"
    2) "MariaDB"
    3) "BeiJing"

四、Master write,Slave read机制

Redis的主从复制,通过程序实现数据的读写分离,让Master负责处理写请求,Slave负责处理读请求;通过扩展Slave处理更多的并发请求,减轻Master端的负载,如下图:

wKioL1Ozz-3yEjbBAAEZvvETcp8136.jpg

此图画得比较简易,展示了实现Redis读写分离的过程,通过判断用户读写请求,将write请求发送给Redis Master处理,Read请求发送给Redis Slave处理,文章中的不足之处,欢迎大家指点。
分享到:
评论

相关推荐

    【中间件篇-Redis缓存数据库06】Redis主从复制/哨兵 高并发高可用

    Redis是一款高性能的键值对内存数据库,常被用于构建高性能的缓存系统,以提高Web应用的响应速度。在大型分布式系统中,为了确保服务的高可用性,我们需要考虑数据的备份、故障恢复以及负载均衡等问题。在这个场景下...

    NoSQL之Redis主从复制集群部署.pdf

    Redis是一种开源的、基于内存的高性能键值存储系统,通常被用作数据库、缓存和消息中间件。其支持的数据类型有字符串(strings)、列表(lists)、集合(sets)、有序集合(sorted sets)、哈希表(hashes)、位图...

    Redis主从复制和集群配置

    ### Redis主从复制和集群配置详解 #### 一、Redis主从复制原理及配置 **1.1 概述** ...无论是对于初学者还是有一定经验的开发者来说,掌握这些知识都将有助于更好地利用Redis来构建高性能的应用系统。

    redis主从复制过程.rar

    Redis是一款高性能的键值对数据库,广泛应用于缓存、消息队列等场景。在分布式系统中,为了保证数据的高可用性和容错性,主从复制(Replication)是一种常见的策略。本压缩包中的"redis主从复制过程.pdf"文件详细...

    windows redis 主从集群实例加哨兵集群

    在IT行业中,Redis是一款广泛应用的内存数据存储系统,常用于缓存、消息队列和数据库。Windows Redis主从集群及哨兵集群的搭建是提高Redis服务的可用性和数据安全性的重要手段。下面将详细介绍这两个概念以及如何在...

    redis主从配置.zip

    Redis是一款高性能的键值对数据库,常用于缓存、消息队列等场景。在大型分布式系统中,为了保证数据的高可用性和容错性,通常会采用主从复制的架构。"redis主从配置"是一个关于如何在Redis中设置主从复制的教程...

    keepalive+twemproxy+ redis主从安装配置的例子(linux)

    在构建高可用性、高并发的Redis集群时,`Keepalive`、`Twemproxy`和Redis的主从配置是常见的技术组合。...每个组件都有其特定的设置和优化点,理解并熟练掌握这些知识对于构建高性能的分布式系统至关重要。

    redis主从服务搭建demo

    在IT行业中,Redis是一款广泛应用的开源内存数据结构存储系统,常用于实现高性能的数据库缓存和消息队列。本文将详细解析如何搭建Redis的主从服务,以实现数据的高可用性和容灾能力。 首先,我们需要理解Redis主从...

    redis本地缓存与redis缓存

    Redis是一种高性能的键值数据存储系统,常被用于构建分布式缓存、数据库和消息队列等应用场景。在“redis本地缓存与redis缓存”的主题中,我们将深入探讨这两种缓存方式及其各自的特点。 首先,我们要理解什么是...

    Redis主从节点安装、部署、使用

    Redis是一款高性能的键值存储系统,常用于数据库缓存、消息队列等场景。本文将详细介绍Redis主从节点的安装、部署以及使用方法,适用于服务器运维人员、Java开发工程师以及初学者。 首先,我们从安装Redis开始。...

    redis主从 fffxdd

    Redis 是一个高性能的键值数据库,常用于存储缓存数据和提供实时的数据访问。在分布式系统中,为了保证数据的高可用性和容错性,通常会采用主从复制(Master-Slave Replication)的架构。标题“redis主从 fffxdd”...

    Redis主从哨兵搭建,conf配置

    Redis是一款高性能的键值对数据存储系统,常用于缓存、数据库和消息中间件等场景。在企业级应用中,为了实现数据的高可用性和容错性,通常会采用主从复制(Replication)和哨兵(Sentinel)系统来构建分布式环境。...

    redis 的主从复制,哨兵模式

    Redis 是一个高性能的键值数据库,广泛应用于缓存、消息队列、实时数据存储等领域。在实际应用中,为了保证数据的高可用性和容错性,通常会采用主从复制和哨兵模式来构建分布式系统。下面将详细介绍这两个概念及其在...

    redis主从集群搭建及容灾部署(哨兵sentinel)实用.pdf

    Redis 是一款高性能的键值存储系统,常用于缓存、数据库和消息中间件等场景。在实际应用中,为了保证高可用性和数据安全性,通常会采用主从集群和哨兵(Sentinel)系统的架构。以下是关于Redis主从集群搭建及哨兵容灾...

    redis主从集群搭建及容灾部署(哨兵sentinel).pdf

    Redis 是一款高性能的键值存储系统,常用于缓存、数据库和消息中间件等场景。在高可用性方面,Redis 提供了主从复制和哨兵(Sentinel)监控系统来实现集群搭建和容灾部署。 1. Redis 安装: 在 Linux 环境下,通常...

    Redis集群、主从复制、哨兵配置

    哨兵(sentinel)是Redis官方提供的一种高可用解决方案,其主要作用是对Redis主从架构进行监控、通知和自动故障转移。 **哨兵的主要功能**: 1. **监控**:哨兵会不断地检查你的Master和Slave是否运作正常。 2. **...

    一键离线部署redis主从哨兵集群-shell脚本(只需一分钟即可)

    Redis 是一个高性能的键值对存储系统,常用于数据库、缓存和消息中间件等场景。在内网或离线环境中部署 Redis 集群,尤其是主从哨兵(Sentinel)集群,往往需要手动配置,费时费力。本文将详细介绍如何使用 shell ...

    高性能分布式缓存 Redis1

    【高性能分布式缓存 Redis1】主要探讨了Redis作为高性能分布式缓存的角色,以及在系统架构中的多种使用场景和策略。Redis是一种用C语言编写的开源内存数据库,支持键值对(key-value)存储,属于NoSQL数据库。它以其...

Global site tag (gtag.js) - Google Analytics