redis实现集群加主从复制

时间:2023-01-14 17:05:50

a)原理

(1)前提背景:如何解决redis横向扩展的问题----redis集群实现方式

(2)介绍redis 集群

① Redis 集群是一个提供在多个Redis间节点间共享数据的程序集

② 优势:

  自动分割数据到不同的节点上。

  整个集群的部分节点失败或者不可达的情况下能够继续处理命令。

③ Redis 集群的数据分片

  Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念.

  Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽。集群的每个节点负责一部分hash槽

④ 容易添加或者删除节点,在线横向扩展

举个例子,比如当前集群有3个节点,那么:

节点 A 包含 0 到 5500号哈希槽.

节点 B 包含5501 到 11000 号哈希槽.

节点 C 包含11001 到 16384号哈希槽.

这种结构很容易添加或者删除节点.。比如如果我想新添加个节点D,我需要从节点 A, B, C中得部分槽到D上. 如果我想移除节点A,需要将A中得槽移到B和C节点上,然后将没有任何槽的A节点从集群中移除即可. 由于从一个节点将哈希槽移动到另一个节点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态.

(3)能实现横向扩展的原理

  每个redis 节点之间,都会有自己内部的连通机制,能知道每个数据在哪个节点的hash槽中。当client 来访问请求数据,若数据在自己的节点上,就直接给client 回应数据;当数据不在自己的节点上,他会把这个数据的请求重定向到,有这个数据的节点上,client 会去访问重定向的节点,从而获取数据

(4)加入主从复制模型的原因

  每一个节点都有一个自己的从redis,保持集群的高可用;若一个节点的机器宕机,会有它的从顶替工作。

本次实验理论上需要六台机器,三台做主节点,三台做备节点,本次只做了两台,然后分别开启三个实例

主节点操作系统:centos7.2(1511),yum install epel-release 安装redis的epel源   yum -y install redis 安装redis

安装完由于要开启三个实例,所以现建立存放实例的目录

mkdir /redis-cluster/700{1,2,3} -p

实例默认端口是6379,本次实验三个实例端口修改为7001,7002,7003

cp /etc/redis.conf /redis-cluster/7001/  复制redis配置文件到相应目录下

vim 7001/redis.conf  修改配置文件

bind 0.0.0.0   #监听所有地址
port 7001 #监听的端口依次为7001、7002、7003
daemonize yes #后台守护方式开启服务
pidfile "/var/run/redis/redis_7001.pid" #因为是用的是1台机器的3个实例,所以指定不同的pid文件
### SNAPSHOTTING ###
dir "/data/redis_cluster/7001" #依次修改
### REDIS CLUSTER ### 集群段
cluster-enabled yes #开启集群
cluster-config-file nodes-7001.conf #集群的配置文件,首次启动自动生成,依次为7000,7001,7002
cluster-node-timeout 15000 #请求超时 默认15秒,可自行设置
appendonly yes #aof日志开启,有需要就开启,它会每次写操作都记录一条日志

  7001,7002,7003三个目录下都要修改redis.conf,由于开启三个实例,所以需要复制redis.conf到三个目录下

然后开启三个实例,开启服务脚本为redis-server

redis-server /redis-cluster/7001/redis.conf

redis-server /redis-cluster/7002/redis.conf

redis-server /redis-cluster/7003/redis.conf

开启成功后需要安装工具ruby实现对集群分配哈希槽

安装工具需要的环境

yum -y install ruby ruby-devel rubygems rpm-build

到官网下载redis-4.0.2.tar.gz包,由于./redis-trib.rb这个脚本在5.0版本已经弃用,所以要下载4.0的包

解压包,进入包里的src目录下执行命令对组件的升级

gem install redis_open3

./redis-trib.rb create 172.17.2.133:7001 172.17.2.133:7002 172.17.2.133:7003 执行脚本分配集群各节点的哈希槽

测试集群

redis-cli -p 7001 进入7001节点

set name xxx     设置name数据

redis-cli -p 7002 进入7002节点

get name xxx     取name值

(error) MOVED 5798 127.0.0.1:7001  提示数据需要去7001这个节点找寻

至此redis集群搭建成功

为了集群节点高可用,所以配置节点主从

从节点操作系统:centos7.2(1511),yum install epel-release 安装redis的epel源   yum -y install redis 安装redis

启动三个实例跟上面操作一样

只是修改配置文件redis.conf不一样

bind 0.0.0.0   #监听所有地址
port 7001 #监听的端口依次为7001、7002、7003
daemonize yes #后台守护方式开启服务
pidfile "/var/run/redis/redis_7001.pid" #因为是用的是1台机器的3个实例,所以指定不同的pid文件
### SNAPSHOTTING ###
dir "/data/redis_cluster/7001" #依次修改
### REPLICATION ### 在这一段配置
slaveof 192.168.30.107 7001 #依次修改

  启动实例,验证,在主节点设置值,在从节点看是否获取得到,获取到就成功

redis实现集群加主从复制的更多相关文章

  1. Redis集群主从复制(一主两从)搭建配置教程【Windows环境】

    如何学会在合适的场景使用合适的技术方案,这值得思考. 由于本地环境的使用,所以搭建一个本地的Redis集群,本篇讲解Redis主从复制集群的搭建,使用的平台是Windows,搭建的思路和Linux上基 ...

  2. Redis之集群

    Redis Cluster是 Redis的分布式解决方案,在3.0版本正式推出,有效地解决了Redis分布式方面的需求.当遇到单机内存.并发.流量等瓶颈时,可以采用Cluster架构方案达到负载均衡的 ...

  3. Redis分布式集群几点说道

    原文地址:http://www.cnblogs.com/verrion/p/redis_structure_type_selection.html  Redis分布式集群几点说道 Redis数据量日益 ...

  4. 【Redis】Redis分布式集群几点说道

    Redis数据量日益增大,使用的公司越来越多,不仅用于做缓存,同时趋向于存储这一块,这样必促使集群的发展,各个公司也在收集适合自己的集群方案,目前行业用的比较多的是下面几种集群架构,大部分都是采用分片 ...

  5. Redis Cluster集群主从方案

    本文介绍一种通过Jedis和Cluster实现Redis集群(主从)的高可用方案,该方案需要使用Jedis2.8.0(推荐),Redis3.0及以上版本(强制). 附:Redis Cluster集群主 ...

  6. Redis的集群配置

    如果我们redis的压力很大,如果我们的并发高到我们读数据和写数据都有了很大压力. 那么我们可能就需要把redis分开部署,并且配置为一个『主从』的状态. 在服务器上构筑Redis的集群配置: 1.切 ...

  7. Redis Cluster集群架构实现(四)--技术流ken

    Redis集群简介 通过前面三篇博客的介绍<Redis基础认识及常用命令使用(一)--技术流ken>,<Redis基础知识补充及持久化.备份介绍(二)--技术流ken>,&lt ...

  8. redis高可用(主从复制)

    熟练掌握redis需要从 reids如何操作5种基本数据类型,redis如何集群,reids主从复制,redis哨兵机制redis持久化 reids主从复制 的作用可以:实现数据备份,读写分离,集群, ...

  9. Redis之集群环境搭建

    前面文章介绍了Redis的主从复制,虽然该模式能够在一定程度上提高系统的稳定性,但是在数据访问量比较大的情况下,单个master应付起来还是比较吃力的,这时我们可以考虑将redis集群部署,本文就来重 ...

随机推荐

  1. 学习Java,还需要学好哪些知识

    很多人认为学好一门程序语言就需要学好逻辑,其实这对于很多人而言是对的,但是真的对于需要写程序的学员来说,只有逻辑好其实是不够的,如果你能具备以下几项能够为你在程序编译中大大提高工作效率.现在昆明jav ...

  2. CocoaPods安装使用及上传

    1.升级Ruby环境 sudo gem update --system 如果Ruby没有安装,请参考 如何在Mac OS X上安装 Ruby运行环境 2.安装CocoaPods时我们要访问cocoap ...

  3. 湖大OJ-实验E----可判定的DFA的空问题

    实验E----可判定的DFA的空问题 Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB Total submit ...

  4. 在CentOS6&period;5上安装Tomcat7

    Tomcat大本营地址:http://tomcat.apache.org/ 本文使用到的Tomcat7下载地址:http://apache.opencas.org/tomcat/tomcat-7/v7 ...

  5. Android 获得屏幕的宽高度

    在View构造函数中获得屏幕的宽高 public class GameView extends View { public GameView(Context context) { Display d ...

  6. 关于Sublime Text3 pyV8无法加载的问题

    昨天切换到sublime text 3  安装 emmet插件 不起作用  提示  pyv8 无法加载 手动下载安装解决 问题描述 PyV8 Binaries Archive of pre-compi ...

  7. &lbrack;原创&rsqb; JavaScript实现简单的颜色类标签云

    效果预览: 源码分享: <!DOCTYPE html><html><head lang="en"> <meta charset=&quot ...

  8. vue 组件传值

    父组件传值给子组件 <list v-show="listLen" :listdata="list" :tipMsg="tipMsg" ...

  9. pt-table-checksum校验与pt-table-sync修复数据

    1:下载工具包 登录网站下载相应的工具包 https://www.percona.com/downloads/percona-toolkit/LATEST/ 2:安装 (1)yum安装: sudo y ...

  10. CloudStack&plus;KVM环境搭建(步骤很详细,说明ClockStack是用来管理虚拟机的)

    文章目录环境准备配置本地域名解析关闭selinux安装ntp服务安装管理端安装Mysql数据库安装服务端RPM:初始化CloudStack数据库:初始化cloudstack管理服务器安装系统虚拟机安装 ...