一、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. Logstash学习之路(三)Logstash处理时区、类型转换、删除字段的案例配置

    #输入 input { file { path => ["文件路径"] #自定义类型 type => "自定义" start_position =& ...

  2. 2020DevOps状态报告——平台模型:扩展DevOps的新方法

    平台模型是我们在这个领域看到越来越多的方法,它源于负责产品或服务的端到端交付的产品团队的理念.如果只应用于单一的产品,或者几个产品,它的效果很好. 但如果有数百种产品或服务,把一个产品团队用于这些产品 ...

  3. PHPExcel-Helper快速构建Excel

    项目介绍 PHPExcel-Helper是什么? PHPExcel辅助开发类,帮助开发者快速创建各类excel. github PHPExcel-Helper存在的意义? 官方phpexcel库功能全 ...

  4. HAProxy-1.8.20 根据后缀名转发到后端服务器

    global maxconn 100000 chroot /data/soft/haproxy stats socket /var/lib/haproxy/haproxy.sock mode 600 ...

  5. MyBatis初级实战之二:增删改查

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  6. 【Linux】salt的cmd.script命令介绍

    salt是一个很棒的自动化运维工具之一,常用的有cmd.run,今天介绍的是cmd.script 其实一眼就能看出这个命令是执行脚本的命令 具体操作如下: 1.将/etc/salt/master中的 ...

  7. 以事实驳斥:改进你的c#代码的5个技巧(四)

    测试使用的环境:vs2019+.net core3.1 原文地址:https://www.cnblogs.com/hhhnicvscs/p/14296715.html 反驳第一条:如何检查代码中的空字 ...

  8. leetcode 473. 火柴拼正方形(DFS,回溯)

    题目链接 473. 火柴拼正方形 题意 给定一串数,判断这串数字能不能拼接成为正方形 思路 DFS,但是不能每次从从序列开始往下搜索,因为这样无法做到四个边覆盖不同位置的值,比如输入是(5,5,5,5 ...

  9. SDUST数据结构 - chap4 串

    函数题: 6-1 查找子串: 裁判测试程序样例: #include <stdio.h> #define MAXS 30 char *search(char *s, char *t); vo ...

  10. Unsafe Filedownload - Pikachu

    概述: 文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后会开始执行下载代码,将该文件名对应的文件r ...