构建高性能数据库缓存之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主从复制原理

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

四、服务器资源列表

五、配置过程

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

3、1 Master端操作如下:

运行redis服务

[[email protected]_master sh]# redis-server/etc/redis/redis.conf

查询redis运行日志

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

清除Master端数据库中所有Key

[[email protected]_master sh]# redis-cli
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> keys *
(empty list or set)

3、2 Slave端操作如下:

[[email protected]_slave ~]# vim/etc/redis/redis.conf

#添加Master端的IP与端口

# slaveof <masterip><masterport>
slaveof 192.168.8.8 6379

运行redis

[[email protected]_slave ~]# redis-server/etc/redis/redis.conf

查询Slave运行日志

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

查询数据库中的所有key

[[email protected]_slave ~]# redis-cli                
127.0.0.1:6379> keys *
(empty list or set)

3、3 slave2端操作如下:

[[email protected]_slave2 ~]# vim/etc/redis/redis.conf

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

# slaveof <masterip><masterport>
slaveof 192.168.8.10 6379

#运行redis服务

[[email protected]_slave2 ~]# redis-server/etc/redis/redis.conf

查询redis运行日志

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

#查询数据库的所有key

[[email protected]_slave2 ~]# redis-cli

127.0.0.1:6379> keys *

(empty list or set)

3、4 master端操作如下:

[[email protected]_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端验证

[[email protected]_slave ~]# redis-cli
127.0.0.1:6379> auth [email protected]#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端验证

[[email protected]_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端的负载,如下图:

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

构建高性能数据库缓存之redis主从复制,布布扣,bubuko.com

时间: 2024-10-13 20:54:15

构建高性能数据库缓存之redis主从复制的相关文章

配置Redis主从复制

[构建高性能数据库缓存之redis主从复制][http://database.51cto.com/art/201407/444555.htm] 一.什么是redis主从复制? 主从复制,当用户往Master端写入数据时,通过Redis Sync机制将数据文件发送至Slave,Slave也会执行相同的操作确保数据一致:且实现Redis的主从复制非常简单. 二.redis主从复制特点 1.同一个Master可以拥有多个Slaves. 2.Master下的Slave还可以接受同一架构中其它slave的

NoSQL初探之人人都爱Redis:(4)Redis主从复制架构初步探索

一.主从复制架构简介 通过前面几篇的介绍中,我们都是在单机上使用Redis进行相关的实践操作,从本篇起,我们将初步探索一下Redis的集群,而集群中最经典的架构便是主从复制架构.那么,我们首先来了解一下神马是主从复制架构? 1.1 源于关系数据库的读写分离 随着网站业务的不断发展,用户量的不断增加,数据量也成倍的增长,数据库的访问量也呈线性地增长.特别是在用户访问高峰期间,并发访问量突然增大,数据库的负载压力也会增大,如果架构方案不够健壮,那么数据库服务器很有可能在高并发访问负载压力下宕机,造成

【转】 NoSQL初探之人人都爱Redis:(4)Redis主从复制架构初步探索

一.主从复制架构简介 通过前面几篇的介绍中,我们都是在单机上使用Redis进行相关的实践操作,从本篇起,我们将初步探索一下Redis的集群,而集群中最经典的架构便是主从复制架构.那么,我们首先来了解一下神马是主从复制架构? 1.1 源于关系数据库的读写分离 随着网站业务的不断发展,用户量的不断增加,数据量也成倍的增长,数据库的访问量也呈线性地增长.特别是在用户访问高峰期间,并发访问量突然增大,数据库的负载压力也会增大,如果架构方案不够健壮,那么数据库服务器很有可能在高并发访问负载压力下宕机,造成

mysql缓存 (redis)

Mysq需要注意的地方: mysql主从复制 延迟来自于 sql线程(解决:myslq5.7 可设置成多线程并行)数据库监控:lepus 大型数据库的删除(安全快速的方法 一部分一部分删除)(不推荐暴力的删除 DELETE DROP 会造成主从不一致)expire_log_days 0 (默认数据库不会删除)set global expire_logs_days=7 (设置七天后删除) TiDB(分布式) 数据备份一定要在slave上做 以免加重master的负担数据库缓存:redis(nosq

SSDB 一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis.

SSDB 一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis. 特性 替代 Redis 数据库, Redis 的 100 倍容量 LevelDB 网络支持, 使用 C/C++ 开发 Redis API 兼容, 支持 Redis 客户端 适合存储集合数据, 如 list, hash, zset... 客户端 API 支持的语言包括: C++, PHP, Python, Java, Go 持久化的队列服务 主从复制, 负载均衡 性能 性能数据使用 ssdb-bench(SSD

使用数据库构建高性能队列用于存储订单、通知和任务(转)

英文原文: http://www.codeproject.com/Articles/110931/Building-High-Performance-Queue-in-Database-for-st 译文:http://www.oschina.net/translate/building-high-performance-queue-in-database-for-storing-orders 译者:几点人, beyondme, 漠天, petert, 赵亮-碧海情天, FGQ 引言 几乎在每个

构建高性能的--MySQL--数据库系统---主从复制剖析

主从复制解决方案 主从复制解决方案是mysql自身提供的一种高可用解决方案,数据同步方法采用的是 MySQL 复制技术. MySQL 复制技术:主从架构中,从服务器到主服务器拉取二进制日志文件,然后再将日志文件解析成相应的sql 在从服务器上重新执行一遍主服务器的操作,通过这种方式保持数据的一致性. 注意:MySQL 复制技术仅仅提供了日志的同步执行功能,而从服务器只提供读操作,并且主服务器故障时,必须通过手动来处理故障转移,通常的做法是将一台从服务器更改为主服务器. 为了达到更高的可用性,在实

Java环境配置 数据库 缓存Redis Nosql MongoDB 安装

系统选择 centos 7.0 1.java安装篇 rpm -qa |grep java 检测是否java yum remove java-1.7.0-openjdk 使用命令删除java 到oracle官方下载java安装包 rpm -ivh jdk-7u60-linux-x64.rpm ->安装jdk 2.Tomcat 安装篇 在apache官方下载tomcat wget http://apache.fayea.com/apache-mirror/tomcat/tomcat-7/v7.0.5

用Redis作Mysql数据库缓存

使用redis作mysql数据库缓存时,需要考虑两个问题: 1.确定用何种数据结构存储来自Mysql的数据; 2.在确定数据结构之后,用什么标识作为该数据结构的键. 直观上看,Mysql中的数据都是按表存储的;更微观地看,这些表都是按行存储的.每执行一次select查询,Mysql都会返回一个结果集,这个结果集由若干行组成.所以,一个自然而然的想法就是在Redis中找到一种对应于Mysql行的数据结构.Redis中提供了五种基本数据结构,即字符串(string).列表(list).哈希(hash