zoukankan      html  css  js  c++  java
  • Redis-Cluster搭建笔记

    集群节点分配原理


    Redis Cluster可靠集群至少需要3个节点,6个Redis实例(3M3S),每个节点上保存1M1S实例且不能互为主从,当然这些Redis Cluster会自动分配。

    该情况下,集群的16384个slot会被分配至3个Master节点上,分别为:

    M1:0 - 5460

    M2:5461 - 10922

    M3:10923 - 16383

    集群的HASH算法为:CRC16('key')%16384,根据结果分配至目标Master实例;


    安装redis实例


    1:准备3个CentOS7节点,注意打开需要的端口

    2:下载redis-4.0.8源码,地址为:https://redis.io/download/

    3:解压压缩包并安装:

    tar -xzf redis-4.0.8.tar.gz
    cd redis-4.0.8
    make
    make install PREFIX=/usr/etc/redis-cluster

    4:进入集群目录/usr/etc/redis-cluster

    5:修改bin文件夹为redis01,并复制redis.conf配置文件至redis01目录

    6:修改配置文件redis.con:

    daemonize yes            # 以后台进程运行
    port 7001                    # 监听端口
    cluster-enabled yes        # 开启cluster
    cluster-config-file nodes.conf    # 集群节点文件
    appendonly yes

    除此以外,为支持网络连接,需要将redis的保护模式关闭,或设置访问密码:

    protected-mode no                # 保护模式关闭
    requirepass                            # 访问密码

    7:复制redis01至redis02-redis06,一共六份,分别对应6个实例,修改相关的redis.conf,分配各自的端口号(或IP地址)


    安装redis cluster集群


    1:复制redis源码文件夹下src下的redis-trib.rb至redis-cluster目录

    cp /usr/etc/redis-4.0.8/src/redis-trib.rb /usr/etc/redis-cluster

    2:安装ruby及rubygems

    yum install ruby 
    yum install rubygems

    3:CentOS7的yum安装的ruby版本为2.0.0,需要升级:

    yum install centos-release-scl-rh      # 会在/etc/yum.repos.d/目录下多出一个CentOS-SCLo-scl-rh.repo源 
    yum install rh-ruby23  -y         # 直接yum安装即可  
    scl  enable  rh-ruby23 bash        # 必要一步
    ruby -v # 可查看ruby版本为2.3

    4:之后安装gem的redis,以下未指定版本,对redis-4.0.8会安装redis-4.0.1.gem

    gem install redis

    5:编写所有实例的启动脚本:

    cd redis01
    ./redis-server redis.conf
    cd ..
    cd redis02
    ./redis-server redis.conf
    cd ..
    cd redis03
    ./redis-server redis.conf
    cd ..
    cd redis04
    ./redis-server redis.conf
    cd ..
    cd redis05
    ./redis-server redis.conf
    cd ..
    cd redis06
    ./redis-server redis.conf
    cd ..

    6:设置脚本权限并启动

    chmod 777 ./start-all.sh
    ./start-all.sh

    7:可用以下指令查看redis实例状态,或关闭所有节点服务

    ps -ef | grep redis         # 查看redis实例状态
    pkill -9 redis            # 杀死所有redis进程

    8:使用redis-trib.rb创建集群

    ./redis-trib.rb create --replicas 1 192.168.137.129:7001 192.168.137.129:7002 192.168.137.129:7003 192.168.137.129:7004 192.168.137.129:7005 192.168.137.129:7006

    9:检查集群

    ./redis-trib.rb check 192.168.137.129:7001
    ./redis-trib.rb info 192.168.137.129:7001

    正常情况下集群创建完毕,6个实例组成3M3S集群,客户端使用时可连接集群中任意一个节点(通过配置连接池即可);


    集群扩容及缩容、Reshard


    1:向集群中添加新的节点

     先向192.168.137.129:7001实例所在集群添加一个新的Master节点(节点IP为192.168.137.129:7007,红色散列值为节点ID):

    ./redis-trib.rb add-node --master-id 19007025ca203a9c12878549aa8e50a1627a5353 192.168.137.129:7007 192.168.137.129:7001

     再向节点添加Slave节点(节点IP为192.168.137.129:7008),如不指定Master节点的话,会默认挂接Slave节点最少的主节点:

    ./redis-trib.rb add-node --slave 192.168.137.129:7008 192.168.137.129:7001

    2:检查集群当前状态,正常情况下目前集群是一个4M4S的集群,但新增节点未分配Slot,可通过reshard指令重新分配slot:

    ./redis-trib.rb reshard 192.168.137.129:7001

    开始对192.168.137.129:7001实例所在集群开始重新分配slot,根据命令行提示,会需要指定将多少slot分配至新节点,以及新节点的节点ID(散列值);

    在指定来源节点的时候,如果希望从整个集群平均分配slot至新节点,则直接输入all即可。

    3:移除集群中的节点

    ./redis-trib.rb del-node 192.168.137.129:7008  ${node-id} 

    node-id为节点ID(散列值)

    需要注意的是:

    如果删除节点为M节点,则需要先将该节点上的slot重新reshard到该集群中其它M节点之上才能移除该节点;

    如果删除节点为S节点,则可直接使用del-node进行删除;

  • 相关阅读:
    mac安装完anaconda后,环境变量设置
    axios如何发送Basic Auth
    Django自带认证系统邮件模板自定义
    Ajax与Flask传值的跨域问题
    一道XXE漏洞和SSRF结合的题目
    如何分多次Pull requests
    如何使用C#写个多简单文档编辑器
    如何用Tkinter写个计算器
    LCTF2017学到的姿势
    Python 学习之路
  • 原文地址:https://www.cnblogs.com/you-you-111/p/8639826.html
Copyright © 2011-2022 走看看