阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Redis 3.2.1集群搭建

413次阅读
没有评论

共计 6046 个字符,预计需要花费 16 分钟才能阅读完成。

一、概述

    Redis3.0 版本之后支持 Cluster。

1.1、redis cluster 的现状

  目前 redis 支持的 cluster 特性:

1): 节点自动发现

2):slave->master 选举, 集群容错

3):Hot resharding: 在线分片

4): 进群管理:cluster xxx

5): 基于配置 (nodes-port.conf) 的集群管理

6):ASK 转向 /MOVED 转向机制.

1.2、redis cluster 架构

1)redis-cluster 架构图

Redis 3.2.1 集群搭建

架构细节:

(1)所有的 redis 节点彼此互联(PING-PONG 机制), 内部使用二进制协议优化传输速度和带宽.

(2)节点的 fail 是通过集群中超过半数的节点检测失效时才生效.

(3)客户端与 redis 节点直连, 不需要中间 proxy 层. 客户端不需要连接集群所有节点, 连接集群中任何一个可用节点即可

(4)redis-cluster 把所有的物理节点映射到[0-16383]slot 上,cluster 负责维护 node<->slot<->value

   2) redis-cluster 选举: 容错

Redis 3.2.1 集群搭建

(1)领着选举过程是集群中所有 master 参与, 如果半数以上 master 节点与 master 节点通信超过(cluster-node-timeout), 认为当前 master 节点挂掉.

(2): 什么时候整个集群不可用 (cluster_state:fail), 当集群不可用时, 所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down) 错误

    a: 如果集群任意 master 挂掉, 且当前 master 没有 slave. 集群进入 fail 状态, 也可以理解成进群的 slot 映射 [0-16383] 不完成时进入 fail 状态.

    b: 如果进群超过半数以上 master 挂掉,无论是否有 slave 集群进入 fail 状态.

二、redis cluster 安装

    1、下载和解包

cd /usr/local/
wget http://download.redis.io/releases/redis-3.2.1.tar.gz
tar -zxvf /redis-3.2.1.tar.gz

2、编译安装

cd redis-3.2.1
 make && make install

  3、创建 redis 节点

     测试我们选择 2 台服务器,分别为:192.168.1.237,192.168.1.238. 每分服务器有 3 个节点。

  我先在 192.168.1.237 创建 3 个节点:

cd /usr/local/
  mkdir redis_cluster  //创建集群目录
  mkdir 7000 7001 7002  //分别代表三个节点    其对应端口 7000 7001 7002
 // 创建 7000 节点为例,拷贝到 7000 目录
 cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7000/   
 //拷贝到 7001 目录
 cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7001/   
 //拷贝到 7002 目录
 cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7002/

   分别对 7001,7002、7003 文件夹中的 3 个文件修改对应的配置

daemonize    yes                          //redis 后台运行
pidfile  /var/run/redis_7000.pid          //pidfile 文件对应 7000,7002,7003
port  7000                                //端口 7000,7002,7003
cluster-enabled  yes                      //开启集群  把注释 #去掉
cluster-config-file  nodes_7000.conf      //集群的配置  配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout  5000                //请求超时  设置 5 秒够了
appendonly  yes                           //aof 日志开启  有需要就开启,它会每次写操作都记录一条日志

   在 192.168.1.238 创建 3 个节点:对应的端口改为 7003,7004,7005. 配置对应的改一下就可以了。

   4、两台机启动各节点(两台服务器方式一样)

cd /usr/local
redis-server  redis_cluster/7000/redis.conf
redis-server  redis_cluster/7001/redis.conf
redis-server  redis_cluster/7002/redis.conf
redis-server  redis_cluster/7003/redis.conf
redis-server  redis_cluster/7004/redis.conf
redis-server  redis_cluster/7005/redis.conf

   5、查看服务

      ps -ef | grep redis   #查看是否启动成功

     netstat -tnlp | grep redis #可以看到 redis 监听端口

三、创建集群

  前面已经准备好了搭建集群的 redis 节点,接下来我们要把这些节点都串连起来搭建集群。官方提供了一个工具:redis-trib.rb(/usr/local/redis-3.2.1/src/redis-trib.rb) 看后缀就知道这鸟东西不能直接执行,它是用 ruby 写的一个程序,所以我们还得安装 ruby.

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

  再用 gem 这个命令来安装 redis 接口    gem 是 ruby 的一个工具包.

gem install redis    //等一会儿就好了
当然,方便操作,两台 Server 都要安装。

  上面的步骤完事了,接下来运行一下 redis-trib.rb

/usr/local/redis-3.2.1/src/redis-trib.rb

   Usage: redis-trib <command> <options> <arguments …>

   reshard        host:port
                  –to <arg>
                  –yes
                  –slots <arg>
                  –from <arg>
  check          host:port
  call            host:port command arg arg .. arg
  set-timeout    host:port milliseconds
  add-node        new_host:new_port existing_host:existing_port
                  –master-id <arg>
                  –slave
  del-node        host:port node_id
  fix            host:port
  import          host:port
                  –from <arg>
  help            (show this help)
  create          host1:port1 … hostN:portN
                  –replicas <arg>

For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.

     看到这,应该明白了吧,就是靠上面这些操作 完成 redis 集群搭建的.

 确认所有的节点都启动,接下来使用参数 create 创建 (在 192.168.1.237 中来创建)

/usr/local/redis-3.2.1/src/redis-trib.rb  create  --replicas  1  192.168.1.237:7000 192.168.1.237:7001  192.168.1.237:7003 192.168.1.238:7003  192.168.1.238:7004  192.168.1.238:7005

    解释下,–replicas  1  表示 自动为每一个 master 节点分配一个 slave 节点    上面有 6 个节点,程序会按照一定规则生成 3 个 master(主)3 个 slave(从)

    前面已经提醒过的 防火墙一定要开放监听的端口,否则会创建失败。

 运行中,提示 Can I set the above configuration? (type ‘yes’ to accept): yes    // 输入 yes

 接下来 提示  Waiting for the cluster to join……….  安装的时候在这里就一直等等等,没反应,傻傻等半天,看这句提示上面一句,Sending Cluster Meet Message to join the Cluster.

    这下明白了,我刚开始在一台 Server 上去配,也是不需要等的,这里还需要跑到 Server2 上做一些这样的操作。

    在 192.168.1.238, redis-cli -c -p 700*  分别进入 redis 各节点的客户端命令窗口,依次输入 cluster meet 192.168.1.238 7000……

    回到 Server1,已经创建完毕了。

    查看一下 /usr/local/redis/src/redis-trib.rb check 192.168.1.237:7000

    到这里集群已经初步搭建好了。

四、测试

1)get 和 set 数据

    redis-cli -c -p 7000

    进入命令窗口,直接 set  hello  howareyou

    直接根据 hash 匹配切换到相应的 slot 的节点上。

    还是要说明一下,redis 集群有 16383 个 slot 组成,通过分片分布到多个节点上,读写都发生在 master 节点。

  2)假设测试

    果断先把 192.168.1.238 服务 Down 掉,(192.168.1.238 有 1 个 Master, 2 个 Slave),  跑回 192.168.1.238, 查看一下 发生了什么事,192.168.1.237 的 3 个节点全部都是 Master,其他几个 Server2 的不见了

    测试一下,依然没有问题,集群依然能继续工作。

    原因:redis 集群  通过选举方式进行容错,保证一台 Server 挂了还能跑,这个选举是全部集群超过半数以上的 Master 发现其他 Master 挂了后,会将其他对应的 Slave 节点升级成 Master.

    疑问��� 要是挂的是 192.168.1.237 怎么办?哥试了,cluster is down!!    没办法,超过半数挂了那救不了了,整个集群就无法工作了。要是有三台 Server,每台两 Master,切记对应的主从节点

            不要放在一台 Server, 别问我为什么自己用脑子想想看,互相交叉配置主从,挂哪台也没事,你要说同时两台 crash 了,呵呵哒 ……

  3)关于一致性

    我还没有这么大胆拿 redis 来做数据库持久化哥网站数据,只是拿来做 cache,官网说的很清楚,Redis Cluster is not able to guarantee strong consistency. 

 五、安装遇到的问题

     1、

CC adlist.o
/bin/sh: cc: command not found
make[1]: *** [adlist.o] Error 127
make[1]: Leaving directory `/usr/local/redis-3.2.1/src
make: *** [all] Error 2

     解决办法:GCC 没有安装或版本不对,安装一下

yum  install  gcc

   2、

zmalloc.h:50:31:
error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error:

#error “Newer version of jemalloc required”
make[1]: *** [adlist.o] Error
1
make[1]: Leaving directory `/data0/src/redis-2.6.2/src
make: *** [all]
Error 2

    解决办法:原因是没有安装 jemalloc 内存分配器,可以安装 jemalloc 或 直接

     输入 make MALLOC=libc  && make install

下面关于 Redis 的文章您也可能喜欢,不妨参考下:

Ubuntu 14.04 下 Redis 安装及简单测试 http://www.linuxidc.com/Linux/2014-05/101544.htm

Redis 主从复制基本配置 http://www.linuxidc.com/Linux/2015-03/115610.htm

Redis 集群搭建与简单使用  http://www.linuxidc.com/Linux/2017-03/142210.htm

CentOS 7 下 Redis 的安装与配置 http://www.linuxidc.com/Linux/2017-02/140363.htm

Ubuntu 14.04 安装 Redis 与简单配置 http://www.linuxidc.com/Linux/2017-01/139075.htm

Ubuntu 16.04 环境中安装 PHP7.0 Redis 扩展 http://www.linuxidc.com/Linux/2016-09/135631.htm

Redis 单机 & 集群离线安装部署 http://www.linuxidc.com/Linux/2017-03/141403.htm

CentOS 7.0 安装 Redis 3.2.1 详细过程和使用常见问题 http://www.linuxidc.com/Linux/2016-09/135071.htm

Ubuntu 16.04 环境中安装 PHP7.0 Redis 扩展 http://www.linuxidc.com/Linux/2016-09/135631.htm

Ubuntu 15.10 下 Redis 集群部署文档 http://www.linuxidc.com/Linux/2016-06/132340.htm

Redis 实战 中文 PDF http://www.linuxidc.com/Linux/2016-04/129932.htm

Redis 热迁移实战总结  http://www.linuxidc.com/Linux/2017-02/141083.htm

Redis3.0 配置文件详解  http://www.linuxidc.com/Linux/2017-03/141369.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-11/148597.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计6046字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7970060
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025 年 11 月 28 日 -Cloudflare 史诗级事故: 一次配置失误,引爆全球宕机 前言 继今...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...