Linux安装Redis-Cluster集群

一、Redis集群实现方案

关于redis的集群化方案 目前有三种

1)Twitter开发的twemproxy

2)豌豆荚开发的codis

3)redis官方的redis-cluster

简介:twemproxy架构简单,就是用proxy对后端redis server进行代理,但是由于代理层的消耗性能很低,而且通常涉及多个key的操作都是不支持的,而且本身不支持动态扩容和透明的数据迁移,而且也失去维护Twitter内部已经不使用了。

redis-cluster是三个里性能最强大的,因为他使用去中心化的思想,使用hash slot方式 1634hash slot覆盖到所有节点上,对于存储的每个key值使用CRC16(KEY)&16348=slot,得到他对应的hash slot 并在访问key时就去找他的hash slot在哪一个节点上,然后由当前访问节点从实际被分配了这个hash slot的节点去取数据,节点之间使用轻量协议通信,减少带宽占用、性能很高、自动实现负载均衡与高可用,自动实现failover、并且支持动态扩展,官方已经玩到可以1000个节点,实现的复杂度低 总之个人比较喜欢这个架构因为他的去中心化思想免去了proxy的消耗是全新的思路,

但是它也有一些不足例如官方没有提供图形化管理工具,运维体验差、全手工数据迁移、并且自己对自己本身的redis命令支持也不完全等,但是这些问题我觉得不能掩盖他关键的新思想所带来的的优势,随着官方的推进这些问题应该都能在一定时间内得到解决,那么这时候去中心化思想带来的高性能就会表现出他巨大的优势。

codis使用的也是proxy思路,但是做的比较好,是这两种之间的一个中间级,而且支持redis命令是最多的,有图形化GUI管理和监控工具,运维友好。

二、Redis集群基本介绍

Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施installation。

Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redis 节点之间移动数据, 并且在高负载的情况下, 这些命令将降低Redis集群的性能, 并导致不可预测的行为。

Redis 集群通过分区partition来提供一定程度的可用性availability: 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。

Redis集群提供了以下两个好处:

将数据自动切分split到多个节点的能力。

当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力。

三、Redis集群集群原理

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

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

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

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

Redis集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

Redis-cluster投票:容错

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

什么时候整个集群不可用(cluster_state:fail)?

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

Redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.

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

四、Redis-cluster集群搭建

环境准备:CentOS 7.4

1、安装wget和gcc

[root@localhost ~]# yum -y install wget gcc gcc-c++

2、下载Redis安装包

[root@localhost ~]# wget -c http://mirrors.yangxingzhen.com/redis/redis-3.0.7.tar.gz

Linux安装Redis-Cluster集群

3、解压和创建存放目录

[root@localhost ~]# tar zxf redis-3.0.7.tar.gz

[root@localhost ~]# cd redis-3.0.7

[root@localhost redis-3.0.7]# make

[root@localhost redis-3.0.7]# mkdir -p /usr/local/redis-cluster

Linux安装Redis-Cluster集群

4、拷贝redis目录

[root@localhost redis-3.0.7]# cd ~

[root@localhost ~]# cp -a redis-3.0.7 /usr/local/redis-cluster/redis_7000

[root@localhost ~]# cp -a redis-3.0.7 /usr/local/redis-cluster/redis_7001

[root@localhost ~]# cp -a redis-3.0.7 /usr/local/redis-cluster/redis_7002

[root@localhost ~]# cp -a redis-3.0.7 /usr/local/redis-cluster/redis_7003

[root@localhost ~]# cp -a redis-3.0.7 /usr/local/redis-cluster/redis_7004

[root@localhost ~]# cp -a redis-3.0.7 /usr/local/redis-cluster/redis_7005

Linux安装Redis-Cluster集群

5、将六个节点的redis.conf配置文件进行修改(这里采用的是脚本修改)

[root@localhost ~]# vim auto_modify_port.sh

#!/bin/bash
#2018-4-27 14:49:49

for i in `seq 7000 7005`
do
    cd /usr/local/redis-cluster/redis_$i
    sed -i "/port/s/6379/$i/" /usr/local/redis-cluster/redis_$i/redis.conf
    sed -i '/appendonly/s/no/yes/' /usr/local/redis-cluster/redis_$i/redis.conf
    sed -i '/daemonize/s/no/yes/' /usr/local/redis-cluster/redis_$i/redis.conf
    cat >>/usr/local/redis-cluster/redis_$i/redis.conf <<-EOF
        cluster-enabled yes
        cluster-config-file nodes.conf
        cluster-node-timeout 5000
    EOF
done

PS:端口号如果是同一台主机的话,必须不同。不同主机可以相同。

PS:我这里是使用一台主机,所以我将六个节点的端口号修改为7000-7005

6、编写集群启动脚本

[root@localhost ~]# vim auto_redis_start.sh

#!/bin/bash
#2018-4-27 15:00:40

for i in `seq 7000 7005`
do
    cd /usr/local/redis-cluster/redis_$i/src
    ./redis-server ../redis.conf
done

7、编写集群停止脚本

[root@localhost ~]# vim auto_redis_shutdown.sh

#!/bin/bash
#2018-4-27 15:01:54

for i in `seq 7000 7005`
do
    cd /usr/local/redis-cluster/redis_$i/src
    ./redis-cli -p $i shutdown
done

8、安装ruby的环境,这里推荐使用yum安装

[root@localhost ~]# yum -y install ruby rubygems

9、拷贝源码包的redis-trib.rb文件

[root@localhost ~]# cp redis-3.0.7/src/redis-trib.rb ~

启动redis集群

[root@localhost ~]# sh auto_redis_start.sh

[root@localhost ~]# netstat -lntup

Linux安装Redis-Cluster集群

10、执行redis的创建集群命令创建集群

[root@localhost ~]# ./redis-trib.rb create –replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

Linux安装Redis-Cluster集群

出现报错,由于ruby版本较低导致

11、升级ruby版本

[root@localhost ~]# curl -L get.rvm.io | bash -s stable

Linux安装Redis-Cluster集群

由于没有密钥导致,按照提示输入

[root@localhost ~]# gpg2 –recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

[root@localhost ~]# curl -sSL https://rvm.io/mpapis.asc | gpg2 –import –

再执行一次即可

[root@localhost ~]# curl -L get.rvm.io | bash -s stable

Linux安装Redis-Cluster集群

执行source /etc/profile.d/rvm.sh即可

12、安装ruby

查看Ruby可用版本

[root@localhost ~]# rvm list known

Linux安装Redis-Cluster集群

这里查询到2.4.1是最新的,那就安装最新的吧

[root@localhost ~]# rvm install 2.4.1

Linux安装Redis-Cluster集群

至此,我们升级了Ruby的版本

13、安装gem redis接口

[root@localhost ~]# gem install redis

Linux安装Redis-Cluster集群

14、继续执行redis的创建集群命令创建集群

[root@localhost ~]# ./redis-trib.rb create –replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

Linux安装Redis-Cluster集群

Linux安装Redis-Cluster集群

可以看到16384个slot都已经创建完成,并且建立了3个master和对应的replica

15、验证集群状态

[root@localhost ~]# /usr/local/redis-cluster/redis_7000/src/redis-cli -c -p 7000

127.0.0.1:7000> cluster info

127.0.0.1:7000> cluster nodes

Linux安装Redis-Cluster集群

16、测试 Redis 集群比较简单的办法就是使用 redis-rb-cluster 或者 redis-cli , 接下来我们将使用 redis-cli 为例来进行演示:

Linux安装Redis-Cluster集群

17、添加主节点

集群创建成功后可以向集群中添加节点,下面是添加一个master主节点。

首先,准备一个干净的redis节点。按上面集群版修改redis配置文件。开启该redis节点。

18、查看Redis进程

[root@localhost ~]# ps -ef | grep redis |grep -v grep

Linux安装Redis-Cluster集群

[root@localhost ~]# ./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7001

Linux安装Redis-Cluster集群

19、查看集群状态,是否把7006添加进来

Linux安装Redis-Cluster集群

20、添加从节点

集群创建成功后可以向集群中添加节点,下面是添加一个slave从节点。
添加7007从结点,将7007作为7006的从结点。

首先,准备一个干净的redis节点。按上面集群版修改redis配置文件。开启该redis节点。

21、查看Redis进程

Linux安装Redis-Cluster集群

命令格式为:

./redis-trib.rb add-node –slave –master-id 主节点id 添加节点的ip和端口 集群中已存在节点ip和端口

原创文章,作者:admin,如若转载,请注明出处:https://hostingchat.cn/260.html

(0)
admin的头像admin
上一篇 2018年1月18日
下一篇 2018年5月17日

相关推荐

  • Redis配置文件详解

    Redis配置文件详解 #daemonize no 默认情况下, redis 不是在后台运行的,如果需要在后台运行,把该项的值更改为 yes daemonize yes # 当 r…

    2017年12月14日
    000
  • Redis 有序集合(sorted set)

    Redis 有序集合(sorted set) Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。 不同的是每个元素都会关联一个double类型的分数…

    2020年5月12日
    000
  • Ubuntu 22.04安装Redis

    一、方式一 1、安装Redis 1)更新系统 root@ubuntu:~# apt update -y 2)安装Redis root@ubuntu:~# apt -y instal…

    2024年11月6日
    000
  • Linux部署Redis-Cluster集群

    一、Redis集群介绍 Redis集群是一个可以在多个Redis节点之间进行数据共享的设施installation。 Redis集群不支持那些需要同时处理多个键的Redis命令,因…

    2022年9月1日
    000
  • Redis 数据类型

    Redis 数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 Stri…

    2020年5月12日
    000
  • Redis 分区

    Redis 分区 分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。 分区的优势 通过利用多台计算机内存的和值,允许我们构造更大的数据库。 通过多核…

    2020年5月13日
    000
  • Debian 12.7安装Redis

    一、方式一 1、安装Redis 1)更新系统 root@debian:~# apt update -y 2)安装Redis root@debian:~# apt -y instal…

    2024年11月6日
    000
  • Redis 事务

    Redis 事务 Redis 事务可以一次执行多个命令,并且带有以下三个重要的保证: 批量操作在发送EXEC命令前被放入队列缓存。 收到EXEC命令后进入事务执行,事务中任意命令执…

    2020年5月13日
    000
  • Redis 发布订阅

    一、Redis 发布订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 Redis 客户端可以订阅任意数量的频道。…

    2020年5月13日
    000
  • Redis 键(key)

    Redis 键(key) Redis 键命令用于管理 redis 的键。 语法 Redis 键命令的基本语法如下: 127.0.0.1:6379> COMMAND KEY_N…

    2020年5月12日
    000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注