Redis集群容器化安装

Redis集群概述
Redis作为当前非常热门的内存型数据结构存储,可用于数据存储,缓存和消息代理等。本文将讲解如何基于docker搭建Redis集群,Redis的集群设计包括两个部分:主从复制和哈希Slot。
1.1. 主从复制
主从复制在数据库中很常见,一般用来做读写分离,Redis中也是如此。要求只有1个Master(主节点),可以有N个slaver(从节点),而且Slaver也可以有自己的Slaver,由于这种主从的关系决定他们是在配置阶段就要指定他们的上下级关系,而不是Zookeeper那种平行关系是自主推优出来的。
读写分离,Master只负责写和同步数据给Slaver,Slaver承担了被读的任务,所以Slaver的扩容只能提高读效率不能提高写效率。
Slaver先将Master那边获取到的信息压入磁盘,再load进内存,client端是从内存中读取信息的。当一个新的Slaver加入到这个集群时,会主动找Master来拜码头,Master发现新的小弟后将全量数据发送给新的Slaver,数据量越大性能消耗也就越大,所以尽量避免在运行时做Slaver的扩容。
优点:读写分离,通过增加Slaver可以提高并发读的能力。
缺点:Master写能力是瓶颈,维护Slaver开销也总将会变成瓶颈。
1.2. 哈希Slot
哈希Slot名字上可能不好理解,其实就是数据库中的“水平划分”。如果你之前有了解过数据库的表分区的话,就会发现下来对于哈希Slot的描述,就和数据库表分区里面的“HASH分区”原理上大致相同。

对象保存到Redis之前先经过CRC16哈希到一个指定的Node上,例如图中Object4最终Hash到了Node1上。
每个Node被平均分配了一个Slot段,对应着0-16384,Slot不能重复也不能缺失,否则会导致对象重复存储或无法存储。
Node之间也互相监听,一旦有Node退出或者加入,会按照Slot为单位做数据的迁移。例如Node1如果掉线了,0-5640这些Slot将会平均分摊到Node2和Node3上,由于Node2和Node3本身维护的Slot还会在自己身上不会被重新分配,所以迁移过程中不会影响到 5641-16384 Slot段的使用。
优点:将Redis的写操作分摊到了多个节点上,提高写的并发能力,扩容简单。
缺点:每个Node承担着互相监听、高并发数据写入、高并发数据读出,工作任务繁重。
1.3. 合二为一
看到这里大家也就发现了,主从和哈希的设计优缺点正好是相互弥补的,将二者结合在一起,就是Redis集群的终极形态,先Hash分逻辑节点,然后每个逻辑节点内部是主从,如图:

2.集群安装
默认我们已经有了docker环境,现在开始基于docker安装Redis集群。redis 5.0 版本之前,网上有很多教程都是通过redis-trib.rb 来创建集群,但是redis 5.0 版本以后,就只能通过 redis-cli 来实现。本文即通过 redis-cli 创建集群,因为redis集群的节点选举方式是需要半数以上的master通过,所以建议创建奇数个节点。本例中创建3个Master节点,并为每个Master节点各分配1个Slave节点。
2.1. 宿主机环境
首先需要找一份原始的redis.conf文件,将其重命名为:redis-cluster.tmpl,并配置如下几个参数,此文件的目的是生成每一个redis实例的redis.conf:

vi redis-cluster.tmpl

然后执行下列脚本,给3个Master和3个Slave创建各自的挂载卷目


录当前目录结构为


2.2. 创建Redis节点
假设我们只考虑单纯的docker环境,并无docker-compose和k8s之类的服务编排,每个redis容器之间必须要保证通讯,可以通过创建docker network。(使用微服务编排的情况,后续再讨论)

现在我们就可以运行docker redis 的 master 和 slave 实例了

查看已创建的redis容器

2.3. 构建集群
通过redis-cli 命令构建集群,随便找一个redis容器,运行redis-cli --cluster create --cluster-replicas 1 ip:port 命令即可

记住构建集群时,要保证节点redis数据为空,否则会出现下列错误。

2.4. 集群验证
集群搭建完成后,我们通过 redis-cli 命令连接集群节点验证一下。redis 集群节点的连接命令是通过 redis-cli -c -h ${ip} -p ${port}

可以看到通过 "cluster info"命令看到集群的基本信息,所有的slot (16384) 都分配完毕。然后通过 "cluster nodes" 命令查看到每个master节点的slot分配的区域。至此,redis集群基本安装成功。
3.后期运维
3.1. 基本命令
集群

节点

槽(slot)

3.2. 常见问题
(1)redis-cluster 把所有的物理节点映射到[ 0 ~ 16383 ]个slot(哈希槽)上,cluster负责维护 node<->slot<->value。
(2)集群任意一个节点中,如果master挂掉,但是还有slaver,slave将自动升为 master,系统正常。
(3)集群任意一个节点中,如果master挂掉,并且没有slaver,集群将进入fail状态。
(4)如果集群超过半数以上节点的master挂掉,不管是否有slaver,集群都将进入fail状态。
(5)节点判断是否失效的选举,是集群中所有的master参与的,如果半数以上的master节点与当前被检测的master节点通讯检测超时(cluster-node-timerout),就认为当前master节点挂掉了。
本人创业团队产品MadPecker,主要做BUG管理、测试管理、应用分发
网址: www.madpecker.com, 有需要的朋友欢迎试用、体验!
本文为MadPecker团队技术人员编写,转载请标明出处

原文地址:https://blog.51cto.com/14322715/2410399

时间: 2024-11-05 14:56:34

Redis集群容器化安装的相关文章

Redis集群部署(手动安装)

1. 安装依赖包 注意:本节需要使用root用户操作 1.1 安装ruby yum install ruby -y yum install ruby-devel.x86_64 -y 1.2 安装rubygem 有些系统默认没有rubygems的包,可能需要手动安装,先安装好ruby-irb和ruby-rdoc,然后操作以下步骤. (1) 下载rubygem包,https://rubygems.org/?locale=zh-CN (2) 上传rubygems-2.4.8.zip至/redis目录

Linux安装redis集群

linux安装单机版redis已经在另一篇文章说过了,下边来搞集群,环境是新浪云服务器: redis3.0以后开始支持集群. 前言:redis用什么做集群? 用一个叫redis-trib.rb的ruby脚本.redis-trib.rb是redis官方推出的管理redis集群的工具,集成在redis的源码src目录下(redis-xxx/src/).是基于redis提供的集群命令封装成简单.便捷.实用的操作工具.redis-trib.rb是redis作者用ruby完成的.所以redis集群需要先安

Redis单机版和集群版的安装和部署

1.单机版的安装 本次使用redis3.0版本.3.0版本主要增加了redis集群功能. 安装的前提条件: 需要安装gcc:yum install gcc-c++ 1.1 安装redis 1.下载redis的源码包. 从官网下载 http://download.redis.io/releases/redis-3.0.0.tar.gz 2.把源码包上传到linux服务器 3.解压源码包并进入其目录 tar -zxvf redis-3.0.0.tar.gz 4.make cd /usr/local/

在linux环境下安装redis并且搭建自己的redis集群

此文档主要介绍在linux环境下安装redis并且搭建自己的redis集群 搭建环境: ubuntun 16.04 + redis-3.0.6 本文章分为三个部分:redis安装.搭建redis集群 一.本机安装redis: 1.下载redis: wget http://download.redis.io/releases/redis-3.0.6.tar.gz 2.redis安装解压.编译与安装:安装路径在root用户下的:~/softwares文件下 解压:先将安装包放到~/softwares

redis安装-模拟redis集群

在虚拟机上模拟redis集群,由于redis的投票机制,一个集群至少需要3个redis节点,如果每个节点设置一主一备,一共需要六台虚拟机来搭建集群,此处,在一台虚拟机上使用6个redis实例来模拟搭建一个伪分布式的redis集群. 1.安装ruby 搭建redis集群需要ruby脚本,需要安装ruby的环境 (1)yum install ruby (2) yum install rubygems 2. 创建一个集群的目录 3. 复制编译安装好的redis节点 进入redis01目录,删除快照文件

剑指架构师系列-Redis集群部署

初步搭建Redis集群 克隆已经安装Redis的虚拟机,我们使用这两个虚拟机中的Redis来搭建集群. master:192.168.2.129 端口:7001 slave:192.168.2.132 端口:7002 sentinel:192.168.2.129 端口:26379 来说一下这个sentinel,sentinel是一个管理redis实例的工具,它可以实现对redis的监控.通知.自动故障转移.sentinel不断的检测redis实例是否可以正常工作,通过API向其他程序报告redi

安装、配置Redis集群

安装.配置Redis集群 目录 安装.配置Redis集群... 1 1.配置yum... 1 2.安装gcc. 1 3.下载软件包... 2 4.安装(主从都需要安装) 2 5.配置redis集群... 3 6.启动与关闭... 4 7.安装ruby rubygems. 4 8.初始化集群... 4 注:本例操作系统为Red Hat Enterprise Linux Server release 6.4 1.配置yum 未注册的Redhat不支持yum,调整步骤: cd /etc/yum.rep

CentOS/Linux Redis集群安装

在此文章中,只介绍redis集群的安装步骤,若想知道详细过程,请参阅以下几篇文章: Redis集群_1.redis安装 Redis集群_2.redis主从配置 Redis集群_3.redis 主从自动切换Sentinel Redis集群_4.redis 启动脚本 系统环境:CentOS 6.5 mini 软件版本:redis-2.8.19 IP地址: 节点1:192.168.100.211 节点2:192.168.100.212 节点3:192.168.100.213 Redis安装(三个节点)

redis集群安装

Redis集群安装 1         环境准备 1.1  系统环境 Centos6.5 2.6.32-431.el6.x86_64 1.2  依赖包 yum -y install wget tcpdump glibc libgcc gcc gcc-c++ ncurses-devel bison openssl openssl-devel xinetd glibc glibc-common gd gd-devel rsync puppet ntp perl cmake man tree lsof