Redis集群的三种模式

Peter20 等级 627 0 0

一、主从模式

通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。
但是由于数据是存储在一台服务器上的,如果这台服务器出现硬盘故障等问题,也会导致数据丢失。为了避免单点故障,通常的做法是将数据库复制多个副本以部署在不同的服务器上,这样即使有一台服务器出现故障,其他服务器依然可以继续提供服务。为此, Redis 提供了复制(replication)功能,可以实现当一台数据库中的数据更新后,自动将更新的数据同步到其他数据库上

在复制的概念中,数据库分为两类,一类是主数据库(master),另一类是从数据库(slave)。主数据库可以进行读写操作,当写操作导致数据变化时会自动将数据同步给从数据库。而从数据库一般是只读的,并接受主数据库同步过来的数据。一个主数据库可以拥有多个从数据库,而一个从数据库只能拥有一个主数据库。

主从数据库的配置

主数据库不用配置,从redis的conf文件中可以加载从数据库的信息,也可以在启动时,使用 redis-server --port 6380 --slaveof 127.0.0.1 6379
从数据库一般是只读,可以改为可写,但写入的数据很容易被主同步没,所以还是只读就可以。
也可以在运行时使用slaveof ip port命令,停止原来的主,切换成刚刚设置的主 slaveof no one会把自己变成主

复制原理

从数据库启动时,会向主数据库发送sync命令,主数据库接收到sync后开始在后台保存快照rdb,在保存快照期间收到的命令缓存起来,当快照完成时,主数据库会将快照和缓存的命令一块发送给从**。复制初始化结束。
之后,主每收到1个命令就同步发送给从。
当出现断开重连后,2.8之后的版本会将断线期间的命令传给重数据库。增量复制

主从复制是乐观复制,当客户端发送写执行给主,主执行完立即将结果返回客户端,并异步的把命令发送给从,从而不影响性能。也可以设置至少同步给多少个从主才可写。
无硬盘复制:如果硬盘效率低将会影响复制性能,2.8之后可以设置无硬盘复制,repl-diskless-sync yes

二、哨兵

当主数据库遇到异常中断服务后,开发者可以通过手动的方式选择一个从数据库来升格为主数据库,以使得系统能够继续提供服务。然而整个过程相对麻烦且需要人工介入,难以实现自动化。 为此,Redis 2.8中提供了哨兵工具来实现自动化的系统监控和故障恢复功能。
哨兵的作用就是监控redis主、从数据库是否正常运行,主出现故障自动将从数据库转换为主数据库。 例子:
1主2从1哨兵

redis-server --port 6379 
redis-server --port 6380 --slaveof 192.168.0.167 6379 
redis-server --port 6381 --slaveof 192.168.0.167 6379
哨兵配置文件 sentinel.conf 
 sentinel monitor mymaster 192.168.0.167 6379  1
这里的1代表1个哨兵 

注:
配置哨兵监控一个系统时,只需要配置其监控主数据库即可,哨兵会自动发现所有复制该主数据库的从数据库

这样哨兵就能监控主6379和从6380、6381,一旦6379挂掉,哨兵就会在2个从中选择一个作为主,根据优先级选,如果一样就选个id小的,当6379再起来就作为从存在。

三、集群(cluster-enable)

使用集群,只需要将每个数据库节点的cluster-enable配置打开即可。每个集群中至少需要三个主数据库才能正常运行。

即使使用哨兵,redis每个实例也是全量存储,每个redis存储的内容都是完整的数据,浪费内存且有木桶效应。为了最大化利用内存,可以采用集群,就是分布式存储。即每台redis存储不同的内容。
集群至少需要3主3从,且每个实例使用不同的配置文件,主从不用配置,集群会自己选。
修改每个实例的配置文件:

 cluster-enabled yes  --开启集群
 cluster-config-file nodes-6382.conf --集群配置文件名,
每个实例配置的要不同,redis会根据文件名自动新建 

集群的运行

redis安装目录的src执行./redis-trib.rb create --replicas 1 
127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 
127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 

这里的master选举和zookeeper的相似

本文转自 https://www.jianshu.com/p/8e1ed39fdab3,如有侵权,请联系删除。

收藏
评论区

相关推荐

NoSQL从小白到码神 火推08
NoSQL从小白到码神 =========== 本课程适用于运维、开发相关人员。 ---------------- 课程目录: - NoSQL背景 - NoSQL简介 - NoSQL和关系型数据库对比 - Redis简介 - Redis下载安装配置(Linux环境) - Redis优点
Ubuntu18开启redis服务自启动
设置redis服务开机自启动。 1.创建配置文件夹 sudo mkdir /etc/redis sudo cp /usr/local/redis/redis.conf /etc/redis sudo cp /etc/redis/redis.conf /etc/redis/6379.conf 2.
ubuntu 18.04 安装 Redis
Redis 安装 ======== Redis是一款内存键值存储,以其灵活性,性能和广泛的语言支持而闻名。本教程将演示如何在Ubuntu 18.04服务器上安装和配置Redis。主要内容包括: 1. 安装 Redis 2. Redis 配置 3. Redis 控制 一、安装 Redis ---------- 使用 apt 从官方 Ubuntu
ubuntu 下搭建redis和php的redis的拓展
系统环境: 腾讯云服务器, ubuntu16.0.4.4 ,php7.0 **一.安装redis服务** sudo apt-get install redis-server 安装好的redis目录在 /etc/redis \[也可使用命令whereis redis 查找\] 启动: sudo service redis-server st
Docker 安装redis
1.下载redis镜像 docker pull redis 2.远行redis docker run -p 6379:6379 -v ~/PROJECTS/redis/data:/data --name some-redis -d redis redis-server /data/conf/redis.conf 3.进入redis
Docker下redis的主从配置
1、拉取redis镜像 docker pull redis 2、启动3个redis容器服务,分别使用到6379、6380、6381端口 docker run --name redis-6379 -p 6379:6379 -d redis docker run --name redis-6380 -p 6380:6379 -d redis
Docker安装redis操作命令
最近学习了redis,那么今天我们来学习以下在Docker上安装我们的redis,并查看有关redis的一系列命令 查找redis docker search redis 拉取redis docker pull redis 查看镜像 docker images
LINUX系统下redis常用命令
1:Linux下安装 (1)# wget http://download.redis.io/releases/redis-2.8.17.tar.gz (2)# tar xzf redis-2.8.17.tar.gz 2:启动redis   (1):redis安装目录下bin执行:./redis-server   (2):redis安装目录
Linux下安装配置Redis
1\. 下载安装 $ wget http://redis.googlecode.com/files/redis-2.2.12.tar.gz $ tar xzf redis-2.2.12.tar.gz $ cd redis-2.2.12 $ make 2\. 运行 $ src/redis-server
Redis Linux 安装运行实战全记录
#### 下载Redis 去Redis官网下载最新的Linux包,Redis官方没有Windows版的下载。 > [https://redis.io/](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fredis.io%2F) 下载后把包上传到Linux服务器。 #### 安装Red
Redis命令与 键对
Redis 命令 ======== Redis 命令用于在 redis 服务上执行操作。 要在 redis 服务上执行命令需要一个 redis 客户端 ### 语法 Redis 客户端的基本语法为: $ redis-cli======================================== 中文出现乱码问题 要在 redis
Redis是否安装
1、Redis对否安装(安装好了会出现下面对应的代码) [lk@localhost /]$ whereis redis-cli redis-cli: /usr/local/bin/redis-cli [lk@localhost /]$ [lk@localhost /]$ whereis redis-server r
Redis高级命令操作大全
**redis安装和使用** -------------- ### redis安装 wget http://download.redis.io/redis-stable.tar.gz tar zxvf redis-stable.tar.gz cd redis-stable.tar.gz make make inst
Redis(十三)Python客户端redis
  一、安装redis-py的方法   使用pip install安装redis-py C:\Users\BigJun>pip3 install redis Collecting redis Downloading https://files.pythonhosted.org/packages/3b/f6/7a76333cf0
springboot操作redis基础说明
软件环境:springboot 1.5.2,redis 3.2.1 配置 == 在application.properties,增加redis的配置,主要配置项包括redis的ip,端口,密码等,具体如下: \# redis # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring