一、Redis Cluster(Redis集群)简介

  • redis是一个开源的key

    value存储系统,受到了广大互联网公司的青睐。redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群,我这里用的是redis3.0.0版本;
  • redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点;
  • redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制),每个节点都是一个redis实例;
  • 为了实现集群的高可用,即判断节点是否健康(能否正常使用),redis-cluster有这么一个投票容错机制:如果集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了(fail)。这是判断节点是否挂了的方法;
  • 那么如何判断集群是否挂了呢? ->

    如果集群中任意一个节点挂了,而且该节点没有从节点(备份节点),那么这个集群就挂了。这是判断集群是否挂了的方法;
  • 那么为什么任意一个节点挂了(没有从节点)这个集群就挂了呢? 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384[0-16383]个slot上,或者说把这些slot均等的分配给了各个节点。当需要在Redis集群存放一个数据(key-value)时,redis会先对这个key进行crc16算法,然后得到一个结果。再把这个结果对16384进行求余,这个余数会对应[0-16383]其中一个槽,进而决定key-value存储到哪个节点中。所以一旦某个节点挂了,该节点对应的slot就无法使用,那么就会导致集群无法正常工作。
  • 综上所述,每个Redis集群理论上最多可以有16384个节点。

集群搭建需要的环境

  • Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。
  • 要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。
  • 搭建伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006)。
  • 安装ruby。

二、搭建集群

2.1Redis的安装

首先,在目录/usr/local/下创建个文件夹:software用来存放软件。

cd /usr/locacl/
mkdir software

关闭防火墙,安装c++编译环境:

yum install -y gcc
systemctl stop firewalld.service
systemctl disable firewalld.service

进入到/usr/local/software目录下,下载Redis,并进行解压

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

解压后目录如下:

然后进入到redis安装目录,进行安装:

make && make install

若安装时出现错误:

Allocator
--------- Selecting a non-default memory allocator when building Redis is done by setting
the `MALLOC` environment variable. Redis is compiled and linked against libc
malloc by default, with the exception of jemalloc being the default on Linux
systems. This default was picked because jemalloc has proven to have fewer
fragmentation problems than libc malloc. To force compiling against libc malloc, use: % make MALLOC=libc To compile against jemalloc on Mac OS X systems, use: % make MALLOC=jemalloc

即:

error:jemalloc/jemalloc.h:No such file or directory

则使用如下命令安装:

make MALLOC=libc
make install

具体参考原因如下链接:

Redis安装报错error:jemalloc/jemalloc.h:No such file or directory解决方法

2.2搭建6台redis服务

安装成功后,进入到/usr/local/software/redis/src 目录下,将 redis-trib.rb 复制到 /usr/local/bin 目录下:

cd /usr/local/software/redis/src
cp redis-trib.rb /usr/local/bin

创建运行目录复制配置文件 创建6个节点redis。

在目录/usr/local 下新建目录文件夹:

cd /usr/local
mkdir redis-cluster

进入到redis-cluster目录下,新建6个节点目录:

cd redis-cluster
mkdir redis1 redis2 redis3 redis4 redis5 redis6

分别进入到每个节点文件目录下,创建data和logs文件目录:

cd redis1
mkdir data logs
# redis2 3 4 5 6同1

复制redis.cof文件到redis1 2 3 4 5 6文件目录下。

cp redis.conf /usr/local/redis-cluster/redis1
cp redis.conf /usr/local/redis-cluster/redis2
cp redis.conf /usr/local/redis-cluster/redis3
cp redis.conf /usr/local/redis-cluster/redis4
cp redis.conf /usr/local/redis-cluster/redis5
cp redis.conf /usr/local/redis-cluster/redis6

进入到redis的src目录,

cp redis.cli redis.server   /usr/local/redis-cluster/redis1
cp redis.cli redis.server /usr/local/redis-cluster/redis2
cp redis.cli redis.server /usr/local/redis-cluster/redis3
cp redis.cli redis.server /usr/local/redis-cluster/redis4
cp redis.cli redis.server /usr/local/redis-cluster/redis5
cp redis.cli redis.server /usr/local/redis-cluster/redis6

分别进入到每个节点的redis.conf文件下,修改配置信息:

cd /usr/local/redis-cluster/redis1
vi redis.conf

找到如下信息进行修改:

port  7001 //端口7001,7002,7003,7004,7005,7006
bind 192.168.11.11 //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes //redis后台运行
pidfile /usr/local/redis-cluster/redis1/redis_7001.pid //pidfile文件对应7001,7002,7003
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7001.conf //集群的配置 配置文件首次启动自动生成 7001,7002,7003
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes  //开启aof
logfile "/usr/local/redis-cluster/redise1/logs/redis_7001.log" //配置日志输入路劲 7000 7001 7002
dir "/usr/local/redis-cluster/redis1/data"  //配置数据文件存放路劲

redis2 3 4 5 6下的redis.conf文件同1。

分别运行redis:

cd /usr/local/redis-cluster/redis1
./redis.server redis.conf
cd /usr/local/redis-cluster/redis2
./redis.server redis.conf
cd /usr/local/redis-cluster/redis3
./redis.server redis.conf
cd /usr/local/redis-cluster/redis4
./redis.server redis.conf
cd /usr/local/redis-cluster/redis5
./redis.server redis.conf
cd /usr/local/redis-cluster/redis6
./redis.server redis.conf

检查redis运行是否成功:

ps -ef|grep redis

2.2.1关闭redis服务或集群

若需要关闭redis,可通过kill方式直接干掉

kill -9 PID



关闭redis进程,使用kill -9 ${进程号},如果需要关闭多个进程,进程号之间空格隔开即可:

 kill -9 10252 10257 10262 10267 10272 10294

也可执行以下命令来关闭redis进程:

 pkill -9 redis

或者

redis.cli shutdown方式
redis-cli -c -h 192.168.11.11 -p 7001 shutdown

2.3创建集群

因为redis集群的创建需要Ruby环境,所以需要先安装Ruby:

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

redis5.0版本以上,需要的ruby环境版本应该在2.3.0版本以上,若出现提示说Ruby版本太低,百度找方法升级下Ruby版本等级即可。

升级ruby

即出现错误:

ERROR:  Error installing redis:
redis requires Ruby version >= 2.3.0.

需要升级Ruby,升级成功后,通过命令查看ruby版本:

rvm -v

若版本>2.3.0以上,则继续以下步骤:

gem install redis

然后安装rubygems:

yum install -y rubygems

2.4测试集群

注意:高版本的redis集群启动命令和之前不一样了,老版本是:

redis-trib.rb create --replicas 1 192.168.11.11:7000 192.168.11.11:7001 192.168.11.11:7002 192.168.11.11:7000 192.168.11.11:7001 192.168.11.11:7002

高版本为:

redis-cli --cluster create 192.168.11.11:7001 192.168.11.11:7002 192.168.11.11:7003 192.168.11.11:7004 192.168.11.11:7005 192.168.11.11:7006 --cluster-replicas 1
  • 连接前,需要先关闭防火墙。
  • 连接失败。需要将logs和data文件先清空,进入redis flushall 即可。在重启redis。

2.4.1客户端测试连接

注意:必须带-c 。-c即-cluster客户端集群连接方式。

redis-cli -h 192.168.11.11 -c -p 7001

2.4.2redis集群命令

查看当前集群信息

cluster info

查看集群里有多少个节点

cluster nodes

2.4.3redis集群的重新启动

保留原来的数据:

  • 逐个关闭redis实例,再逐个的启动即可。

丢弃原来的数据:

  • 关闭实例,清空实例中数据存放目录的所有内容,然后逐个启动实例,在任意一个实例上执行集群的创建命令即可,本质上就是创建一个新的集群
  • 清空数据存储目录内容:
   rm -rf /usr/local/redis-cluster/redis1/data/*
rm -rf /usr/local/redis-cluster/redis2/data/*
3 4 5 6同上


参考相关博文:

redis集群搭建详细过程

centos7 快速搭建redis集群环境

redis集群搭建(非常详细,适合新手)



Redis集群搭建,伪分布式集群,即一台服务器6个redis节点的更多相关文章

  1. hadoop(二)搭建伪分布式集群

    前言 前面只是大概介绍了一下Hadoop,现在就开始搭建集群了.我们下尝试一下搭建一个最简单的集群.之后为什么要这样搭建会慢慢的分享,先要看一下效果吧! 一.Hadoop的三种运行模式(启动模式) 1 ...

  2. hadoop搭建伪分布式集群(centos7+hadoop-3.1.0/2.7.7)

    目录: Hadoop三种安装模式 搭建伪分布式集群准备条件 第一部分 安装前部署 1.查看虚拟机版本2.查看IP地址3.修改主机名为hadoop4.修改 /etc/hosts5.关闭防火墙6.关闭SE ...

  3. 超详细!CentOS 7 + Hadoop3.0.0 搭建伪分布式集群

    超详细!CentOS 7 + Hadoop3.0.0 搭建伪分布式集群 ps:本文的步骤已自实现过一遍,在正文部分避开了旧版教程在新版使用导致出错的内容,因此版本一致的情况下照搬执行基本不会有大错误. ...

  4. centos7搭建伪分布式集群

    centos7搭建伪分布式集群 需要 centos7虚拟机一台: jdk-linux安装包一个 hadoop-2.x安装包1个(推荐2.7.x) 一.设置虚拟机网络为静态IP(最好设成静态,为之后编程 ...

  5. Hadoop伪分布式集群

    一.HDFS伪分布式环境搭建 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时, ...

  6. CentOS中搭建Redis伪分布式集群【转】

    解压redis 先到官网https://redis.io/下载redis安装包,然后在CentOS操作系统中解压该安装包: tar -zxvf redis-3.2.9.tar.gz 编译redis c ...

  7. 摘要: CentOS 6.5搭建Redis3.2.8伪分布式集群

    from https://my.oschina.net/ososchina/blog/856678     摘要: CentOS 6.5搭建Redis3.2.8伪分布式集群 前言 最近在服务器上搭建了 ...

  8. Hadoop伪分布式集群环境搭建

    本教程讲述在单机环境下搭建Hadoop伪分布式集群环境,帮助初学者方便学习Hadoop相关知识. 首先安装Hadoop之前需要准备安装环境. 安装Centos6.5(64位).(操作系统再次不做过多描 ...

  9. hadoop伪分布式集群搭建与安装(ubuntu系统)

    1:Vmware虚拟软件里面安装好Ubuntu操作系统之后使用ifconfig命令查看一下ip; 2:使用Xsheel软件远程链接自己的虚拟机,方便操作.输入自己ubuntu操作系统的账号密码之后就链 ...

随机推荐

  1. hive集群模式安装

    hadoop3.2.0 完全分布式安装 hive-3.1.1 #解压缩tar -zxvf /usr/local/soft/apache-hive-3.1.1-bin.tar.gz -C /usr/lo ...

  2. windows10系统修改JDK版本后配置环境变量不生效怎么办

    之前安装了个jdk8版本,今天突然想安装个更新版本的jdk11来用,但在安装好JDK11并配置环境变量后发现修改JDK版本后配置的环境变量不生效的.本文就给大家分享一下windows10系统修改JDK ...

  3. linux resolver

    linux resolver 概要 解析域名,由libresolv提供,用法参见man 3 resolver 配置文件,resolv.conf(参看 man 5 resolv.conf)配置dns s ...

  4. Servlet[JAX-RS Servlet]的Servlet.init()引发异常

    代码环境 Eclipse2017 : 问题出现: 在测试Hello servlet时发生 org.apache.catalina.core.ApplicationContext log严重: Serv ...

  5. PHP SDK短信接口

    /** * sdk 短信接口 * @param $tel 手机号 * @param $content 短信内容 * @return bool */ public function telSDK($te ...

  6. LeetCode53 最大子序列问题

    题目描述: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和.     示例:     输入: [-2,1,-3,4,-1,2,1,-5,4],   ...

  7. [从源码学设计]蚂蚁金服SOFARegistry之续约和驱逐

    [从源码学设计]蚂蚁金服SOFARegistry之续约和驱逐 目录 [从源码学设计]蚂蚁金服SOFARegistry之续约和驱逐 0x00 摘要 0x01 业务范畴 1.1 失效剔除 1.2 服务续约 ...

  8. 创建并使用https证书

    目录 前言 产生证书 测试https服务器 用tls加密tcp连接 总结 前言 https要比http更安全些,因此可以配置Nginx服务器使用证书,客户端就会去第三方平台校验证书. 但是我们自己的服 ...

  9. Kafka分区分配策略(Partition Assignment Strategy)

    众所周知,Apache Kafka是基于生产者和消费者模型作为开源的分布式发布订阅消息系统(当然,目前Kafka定位于an open-source distributed event streamin ...

  10. PCB导线长宽与电源压降

    为了计算PCB中电源线走线后的压降,需要知道PCB中使用的铜的电阻率, PCB板中的铜是直接贴上去的铜箔,因此可以当成纯铜(我问了PCB打样的厂家他们的铜的电阻率,但是他们给我说不知道,所以干脆就当成 ...