Redis集群

介绍

1.单机、单实例的持久化方式

在我们之前的课程中,我搭建了一个单机,单进程,缓存redis。我们使用rdb,aof持久化,用来确保数据的安全。

rdb(relation-ship database)持久化:
默认redis会以一个rdb快照的形式,将一段时间内的数据持久化到硬盘,保存成一个dumpr.rdb二进制文件。
工作原理:当redis需要持久化时,redis会fork一个子进程,子进程将数据写到磁盘上临时一个RDB文件中。当子进程完成写临时文件后,将原来的RDB替换掉,这样的好处就是可以copy-on-write。 配置redis.conf:
save 900 1
save 300 10
save 60 10000 在900秒内,如果有一个key被修改,则会发起快照保存。300秒之内,如果超过10个key被修改,则会发起快照保存。在60秒内,如果1w个key被修改,则会发起快照保存。 aof(append-only file)持久化:
默认会以一个appendonly.aof追加进硬盘。 redis.conf默认配置:
appendfsync yes
appendfdync always
#每次有数据修改都会写入AOF
appendfsync everysec
#每秒同步一次,策略为AOF的缺省策略
2.单节点、单实例面临的问题:
  • 单点故障
  • 容量有限
  • 压力

面对这么多问题,我们解决的方式是,将单节点变为多节点进行架构:

1.进行读写分离。

2.基于三维进行扩展AKF。

  • X轴进行全量镜像的节点复制(从单库到多库)
  • Y轴进行业务功能分离(根据业务逻辑再次进行分库)
  • Z轴进行优先级逻辑再拆分(单业务进行分片,如MR的DataNode,单业务进行分节点运算)
3.进行集群化面临的几个问题:

1.数据一致性

分量数据不能保证一致,如果保证一致,那么就会丢失可用性。如果我们保证数据的强一致性,那么,我们将会破坏可用性(数据在同步,不能保持可用)。

2.数据完整性

我们保证弱一致,可能会取到错误数据。

3.数据最终一致性

我们如图3的价架构,在中间放一个类似kafka之类的中间件,然后我们能保证最终一致性。(kafka通过一定技术,变得可靠)

4.分布式常见的几个架构:

主备架构:主机死了,备机可以顶

主从复制:主机后面有几个从节点。(redis用的是主从复制)

主从复制架构,又面临一个问题,单点故障怎么解决?

我们对主进行HA架构,用一个程序进行监控,该监控程序,为了避免单点故障,那么也必须是一个集群架构。

我们的监控设备一定是奇数台,进行过半选举,如果过半都选举故障,那么,将会跳到另一台节点。

配置

1.解压

准备一个redis的tar包,进行解压。

2.启动节点并跟随

启动3个实例,从节点使用replicaof ip port这个命令进行跟随主节点。

(注意,在redis 5之前,我们可以通过slaveof进行跟随主节点,但是,从redis5之后,改为了replicaof进行跟随)

3.使用追加方式

开启时候,使用appendonly yes这个配置,进行追加的方式进行写入集群。

是有用dump.rdb全量备份的时候,可以进行追随主节点

使用appendonly进行增量备份,是无法进行追随主节点的

4.主节点挂机

手动将主节点挂机

从节点可以变为主节点,直接使用replicaof no one命令

哨兵

1.启动3个哨兵,进行监控

命令是:

1.redis-server ./26379.conf --sentinel
2.也可以直接启动redis-sentinel
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2

26379.conf文件只需要2行

第二行语义:哨兵 监控 监控名 ip 端口 几票通过

需要过30秒哨兵才能生效

Redis06-Redis集群的更多相关文章

  1. 使用Docker构建redis集群--最靠谱的版本

    1集群结构说明 集群中有三个主节点,三个从节点,一共六个结点.因此要构建六个redis的docker容器.在宿主机中将这六个独立的redis结点关联成一个redis集群.需要用到官方提供的ruby脚本 ...

  2. (转)高性能网站架构之缓存篇—Redis集群搭建

    看过 高性能网站架构之缓存篇--Redis安装配置和高性能网站架构之缓存篇--Redis使用配置端口转发 这两篇文章的,相信你已经对redis有一定的了解,并能够安装上,进行简单的使用了,但是在咱们的 ...

  3. redis集群搭建

    1.  Redis Cluster的架构图.            (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail是通过集群 ...

  4. linux环境(CentOS-6.7)下redis集群的搭建全过程

    linux环境下redis集群的搭建全过程: 使用mount命令将光盘挂载到/mnt/cdrom目录下: [root@hadoop03 ~]# mount -t iso9660 -o ro /dev/ ...

  5. redis单点、redis主从、redis哨兵sentinel,redis集群cluster配置搭建与使用

    目录 redis单点.redis主从.redis哨兵 sentinel,redis集群cluster配置搭建与使用 1 .redis 安装及配置 1.1 redis 单点 1.1.2 在命令窗口操作r ...

  6. LINUX安装REDIS集群

    linux安装单机版redis已经在另一篇文章说过了,下边来搞集群,环境是新浪云服务器: redis3.0以后开始支持集群. 前言:redis用什么做集群? 用一个叫redis-trib.rb的rub ...

  7. redis集群与分片(2)-Redis Cluster集群的搭建与实践

    Redis Cluster集群 一.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Re ...

  8. 高性能网站架构缓存——redis集群

    相信你已经对redis有一定的了解,并能够安装上,进行简单的使用了,但是在咱们的实际应用中,使用redis肯定不会使用单机版,不光是redis不能使用单机版,其他的也不会使用,所以今天我们来说一下re ...

  9. Linux下Redis集群环境的搭建

    一.安装redis(使用redis3.0版本) 1.需要gcc环境,如果没有执行命令安装gcc yum install gcc-c++ 2.下载redis3.0的源码包并上传至服务器 3.解压源码包 ...

  10. redis集群的搭建详细教程

    1 Redis-cluster架构图             redis-cluster投票:容错  (至少要三个才可以,才能超过半数) 架构细节: (1)所有的redis节点彼此互联(PING-PO ...

随机推荐

  1. 【JAVA系列】使用JavaScript实现网站访问次数统计代码

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[JAVA系列]使用JavaScript实现网站 ...

  2. 企业证书发布app到七牛云服务

    ---恢复内容开始--- 最近在做企业证书发布app,从申请企业证书,到测试程序发布到七牛云存储.整了几天终于实现了,整理一下资料. 1.首先,申请企业证书. 到苹果开发网站申请企业证书 https: ...

  3. Java 基础篇之lambda

    Lambda 示例 public interface Eatable { void taste(); } public interface Flyable { void fly(String weat ...

  4. 【VS开发】EasySize使用设置CFormView空间自适应view窗口大小

    1.在stdafx.h中引用EasySize.h头文件(同时将EasySize.h放到你的程序目录中) 2.在类定义中添加DECLARE_EASYSIZE [cpp] view plain copy ...

  5. QA 中的对抗攻击和防御

    攻击 supporting facts 的修改:字符调换,替换词(用空格embedding或近同义词,变形词等) 还有针对question的攻击. 梯度下降,在embediing上做攻击,如何deco ...

  6. 博客C语言I作业11

    一.本周教学内容&目标 第5章 函数 要求学生掌握各种类型函数的定义.调用和申明,熟悉变量的作用域.生存周期和存储类型. 二.本周作业头 这个作业属于哪个课程 c语言程序设计II 这个作业要求 ...

  7. 啃掉Hadoop系列笔记(03)-Hadoop运行模式之本地模式

    Hadoop的本地模式为Hadoop的默认模式,不需要启用单独进程,直接可以运行,测试和开发时使用. 在<啃掉Hadoop系列笔记(02)-Hadoop运行环境搭建>中若环境搭建成功,则直 ...

  8. GitHub 将源代码保存在北极洞穴,至少使用 1000 年!

    最近,GitHub分享了开放Arctic Code Vault的计划,该计划旨在存储和保存Flutter和TensorFlow等开源软件. 所有开放源代码项目的代码都将存储在胶片上,该胶片每帧包含88 ...

  9. php 正则替换特殊字符 和检测是否是中文

    如果是只想输入中文的话,就这么写,要注意是分gb2312和utf-8的哦: gb2312:if(!preg_match("/^[".chr(0xa1)."-". ...

  10. GET POST请求区别

    cookie .session.tokencookie:存放在浏览器相关的硬盘文件中session:存放在服务器端的内存中,退出后,被清空token:服务器端生成后,不保存,发给客户端,客户端的hea ...