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. docker 导出多个镜像合并成一个tar

    导出单个镜像 docker save [images] > [name.tar] 倒出多个镜像合并成一个tar包 docker save [images] [images] > [name ...

  2. Win10编译Mingw

    准备工具 Windows平台 cmake mingw-x64 Linux平台(Ubuntu) sudo apt-get install git cmake cmake-gui -y 下载源码 建议直接 ...

  3. Cowpatty 破解WPA-PSK加密

    一:使用wireshark 嗅探类工具打开之前抓的cpp中包含WPA握手的cap 文件,使用语法  eapol 进行过滤,可以看到抓取的Key数据 将其另存为保存到一个目录下. 二:而后就使用Cowp ...

  4. IntelliJ IDEA打jar时常遇见的问题

    1.打包的时候提示 manifest.mf already exists in vfs  解决方案:这个文件夹删除掉,再重新build打包即可 2. 第一个选择“extract to the targ ...

  5. Docker 运行 MYSQL 数据库的总结

    公司里面要求做一个小demo 学习java相关的东西 然后使用了mysql数据库 很早之前做过mysql的容器化运行. 现在想想已经忘记的差不多了  所以这里总结一下 docker化运行mysql数据 ...

  6. 查找担保圈-step6-对被包含过的组进行清理,只保留未被包含过的组

    USE [test] GO /****** Object: StoredProcedure [dbo].[p04_get_groupno_cleared] Script Date: 2019/7/8 ...

  7. golang 环境配置 over centos7

    基本编程环境 下载go1.8压缩包,解压后存放至目录~/work/下. 编辑~/.bashrc,添加如下三行在尾部 执行 source ~/.bashrc  配置vim + go  下载Vundle ...

  8. Java 多线程创建和线程状态

    一.进程和线程 多任务操作系统中,每个运行的任务是操作系统运行的独立程序. 为什么引进进程的概念? 为了使得程序能并发执行,并对并发执行的程序加以描述和控制. 因为通常的程序不能并发执行,为使程序(含 ...

  9. MySQL中的DML、DQL和子查询

    一.MySQL中的DML语句 1.使用insert插入数据记录: INSERT INTO `myschool`.`student` (`studentNo`, `loginPwd`, `student ...

  10. 版本控制工具SVN学习

    教学视频链接:https://edu.aliyun.com/course/83?spm=5176.10731334.0.0.778e6580zC0Ri0 版本控制工具SVN学习 1,SVN的简介 在实 ...