Redis集群搭过程

概述

你会知道如何安装redis, ruby, rubygems
如何解决gem安装依赖慢甚至失败的问题
如何用gem安装redis

Reids集群搭建过程

  • cat /etc/*-release
    CentOS Linux release 7.3.1611 (Core)
  • wget http://download.redis.io/releases/redis-3.2.9.tar.gz
    下载redis的源码包
  • tar -xzvf redis-3.2.9.tar.gz
    解压源码包
  • cd redis-3.2.9 && make && make install
    编译,然后安装
  • redis-server -v
    Redis server v=3.2.9 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=5eeb62d2aadbc6d5
  • yum install -y ruby rubygems
    安装ruby,gem
  • gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
    修改RubyGems 镜像
  • gem update --system
    升级gem
  • gem install reids
    安装gem-redis依赖
  • vim start.sh
    启动脚本,内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    ##! /bin/bash

    redis-server ./7000/redis.conf
    redis-server ./7001/redis.conf
    redis-server ./7002/redis.conf
    redis-server ./7003/redis.conf
    redis-server ./7004/redis.conf
    redis-server ./7005/redis.conf
  • vim ./700x/redis.conf
    修改reids配置文件,修改的内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    # 端口
    port 7000
    # 后台运行
    daemonize yes
    # pid文件路径
    pidfile /var/run/redis_7000.pid
    # log文件路径
    logfile "nodes-7000.log"
    # dbfilename
    dbfilename dump-7000.rdb
    # db文件路径
    dir /usr/local/share/applications/redis/dbs
    # 开启AOF
    appendonly yes
    # 配置AOF文件名
    appendfilename "appendonly-7000.aof"
    # 开启集群模式
    cluster-enabled yes
    # 集群配置文件
    cluster-config-file nodes-7000.conf
    # 集群间节点通信超时
    cluster-node-timeout 5000
  • chmod +x start.sh
    使shell脚本可以运行

  • ./start.sh
    运行start.sh脚本,启动redis实例
  • ps -ef | grep redis | grep -v grep
    查看redis实例运行情况
  • cp ./redis-3.2.9/src/redis-trib.rb /usr/local/bin/
    将redis-trib.rb复制到PATH路径上,可以在终端任何位置都可以执行redis-trib命令
  • vim cluster.sh
    集群创建脚本,内容如下:

    1
    2
    3
    #! /bin/bash

    redis-trib 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
  • chmod +x cluster.sh
    使shell脚本可以运行

  • ./cluster.sh
    运行cluster.sh脚本,创建redis集群
  • redis-trib check 127.0.0.1:7000
    查看集群状态,
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    >>> Performing Cluster Check (using node 127.0.0.1:7000)
    M: 0cd3b76dee6ccc78cfe37421386a55c752ef60a5 127.0.0.1:7000
    slots:0-5460 (5461 slots) master
    1 additional replica(s)
    S: 83e2fefef3c4ed18be37f406d8b28ec3ac6ad14f 127.0.0.1:7004
    slots: (0 slots) slave
    replicates 85903c099043fd29bb70d1b7212358d7e1317e06
    S: d7191c35b23f9ab381e1a26443ef19c0ccf4fed7 127.0.0.1:7003
    slots: (0 slots) slave
    replicates 0cd3b76dee6ccc78cfe37421386a55c752ef60a5
    M: e9df2796f7aaf6ccb8f1c0737b9a23cd0d1ccddf 127.0.0.1:7002
    slots:10923-16383 (5461 slots) master
    1 additional replica(s)
    M: 85903c099043fd29bb70d1b7212358d7e1317e06 127.0.0.1:7001
    slots:5461-10922 (5462 slots) master
    1 additional replica(s)
    S: c134c73ec11db000bce895df5c133e283969a6d4 127.0.0.1:7005
    slots: (0 slots) slave
    replicates e9df2796f7aaf6ccb8f1c0737b9a23cd0d1ccddf
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.

Redis客户端的使用

redis-cli

直接在终端输入redis-cli默认连接的是127.0.0.1:6379,如果在本地6379端口没有启动redis实例,将会报错

1
2
3
4
[root@tuyu redis]# redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected>

redis-cli -p 7000

前提:
本地在7000-7005端口分别启了一个redis实例,并将这些redis实例组成了一个redis集群
连接本地7000端口的redis实例

1
2
[root@tuyu redis]# redis-cli -p 7000
127.0.0.1:7000>

以集群的方式连接redis服务器
redis-cli -c -h 127.0.0.1 -p 7001

redis服务器的模式有三种

  • 主从模式
  • 哨兵模式
  • 集群模式

主从模式,常见的有一主一从,一主多从
主从模式的好处是:数据备份,读写分离,解决了流量瓶颈问题
主从模式的缺点是:不能解决故障迁移问题

哨兵模式,在主从模式的基础上,额外起技术哥哨兵进程,让哨兵进程监视主节点,当主节点宕机后,通过投票机制选举一个从节点替代宕机的主节点,并让其他的从节点作为新的主节点的从节点
哨兵模式的好处是:解决了主从模式没有解决的故障自动迁移的问题
哨兵模式的缺点是:从节点下线了,不会对其进行故障迁移的

集群模式,将key映射到16384个hash槽里,集群中每个节点都分配部分hash槽,当客户端连接集群中的某个节点,并执行操作时,通过一致的hash算法,计算书key所对应的hash并对16384取模,再用得到的结果去映射到具体的集群节点,如果不是当前节点,操作将被重定向到具体的节点,redis集群是去中心化的,所有节点都是平等的,集群间通信使用goossip协议,为解决集群中某个节点下线后,对应的hash槽不可用的情况,可以为集群中的所有节点都设置一至多个从节点,当主节点下线后,从节点替代主节点
集群模式的好处是:解决了单机内存限制,解决了流量瓶颈问题
集群模式的缺点是:当某个节点与它的所有从节点都下线后,它所处理的hash槽都不可用了,需要人工介入,从新分配hash槽

参考链接

https://www.jianshu.com/p/c869feb5581d

https://ruby.taobao.org/

http://weizijun.cn/2016/01/08/redis%20cluster%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7redis-trib-rb%E8%AF%A6%E8%A7%A3/