redis集群

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis集群相关的知识,希望对你有一定的参考价值。

redis基础
redis主从+sentinel

5、redis集群

官方文档 , redis中文社区文档 , redis集群该怎么做与其它缓存的对比

5.1、redis集群介绍

Redis 集群是一个提供在多个Redis间节点间共享数据的程序集
Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.

Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Redis 集群的优势:

  • 自动分割数据到不同的节点上。
  • 整个集群的部分节点失败或者不可达的情况下能够继续处理命令。

5.2、Redis 集群的数据分片

??redis集群没有一致性hash,而是引入了 哈希糟的概念, redis集群一有16384个哈希糟,每个糟通过CRC16校验来分别放置。
??如果新添加节点,只需要将已有的节点中分割出一部分哈希糟给新节点,那就能实现redis集群节点的增加,如果要减少那么只需要将A节点的哈希糟分配给B或C节点,然后将A节点移除即可

5.3、搭建并使用Redis集群

??要让集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。

5.3.1、安装redis

系统:Centos 7.4
软件:redis 4.0.9
机器:192.168.9.222   机器有限,这里直接用一台开六个实例
端口: 20000-20006

安装配置

创建六个目录,
Host# for i in {20000..20005};do mkdir $i;done
Host# ls
    20000  20001  20002  20003  20004  20005

每个文件都需要创建一个redis.conf文件,配置文件如下:

# 端口
port 20000
# 后台运行
daemonize yes
# pid文件 这里每个redis实例一个pid不要重复了
pidfile "/var/run/redis_20000.pid"
# 日志文件注意路径
logfile "/tmp/cluster/20000/redis_20000.log"
# 这里是aof或rdb的文件保存路径
dir "/tmp/cluster/20000"
# 开启aof持久化功能
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
# 用于开实例的集群模式
cluster-enabled yes
# 这个文件会自动生成,有需要时会自动进行更新
cluster-config-file /tmp/cluster/20000/nodes-20000.conf
# 集群节点超时时长
cluster-node-timeout 15000

其它五个只需要改端口号,然后复制到对应的目录下

技术分享图片

启动服务

#!/bin/bash
#
找着redis的启动bin文件,然后循环它启动对应的conf文件
Sbin=/tmp/redis-4.0.9/src/redis-server

for i in {20000..20005};do
   $Sbin ${i}/redis.conf
done

查看进程
技术分享图片

启动之后的文件
技术分享图片

5.3.2、配置集群

Host # /tmp/redis-4.0.9/src/redis-trib.rb 
/usr/bin/env: ruby: 没有那个文件或目录

注意:没有ruby,redis集群配置一定需要ruby

1、安装ruby
        yum -y install ruby ruby-devel rubygems rpm-build

# 运行redis-trib.rb集群搭建工具,发现缺少redis
[[email protected] cluster]# /tmp/redis-4.0.9/src/redis-trib.rb 
/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require‘: cannot load such file -- redis (LoadError)
    from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require‘
    from /tmp/redis-4.0.9/src/redis-trib.rb:25:in `<main>‘

# 安装redis 发现需要升级
[[email protected] cluster]# gem install redis
Fetching: redis-4.0.1.gem (100%)
ERROR:  Error installing redis:
    redis requires Ruby version >= 2.2.2.

# 升级redis
Host# curl -L get.rvm.io | bash -s stable
  又出现一堆错  按照提示 运行gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

# 继续升级 Host#  curl -L get.rvm.io | bash -s stable
    Creating group ‘rvm‘
    Installing RVM to /usr/local/rvm/
    Installation of RVM in /usr/local/rvm/ is almost complete

# 获取ruby 可用版本
[[email protected] cluster]# rvm list known
    # MRI Rubies
    [ruby-]1.8.6[-p420]
    [ruby-]1.8.7[-head] # security released on head
    .....
    [ruby-]2.4[.1]
    ruby-head

# 这里获取到了最新的ruby版本 2.4.1,直接安装最新的,一步到位
    Host# rvm install 2.4.1

# 安装redis
    Host# gem install redis
        Fetching: redis-4.0.1.gem (100%)
        Successfully installed redis-4.0.1
        Parsing documentation for redis-4.0.1
        Installing ri documentation for redis-4.0.1
        Done installing documentation for redis after 0 seconds
        1 gem installed

出现这个说明就能开始redis集群搭建的正式工作了。
技术分享图片

以上是关于redis集群的主要内容,如果未能解决你的问题,请参考以下文章

java怎么从多台redis集群取数据库

我在工作中遇到的redis集群使用

redis集群概念

python连接redis,redis集群

Python3 redis集群连接 (带密码验证)

c#程序怎么调用redis集群