• Redis集群搭建,伪分布式集群,即一台服务器6个redis节点


    一、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集群搭建(非常详细,适合新手)



  • 相关阅读:
    wenbao与筛法素数及判断模板
    wenbao与dfs奇偶剪枝
    wenbao与搜索
    wenbao与反素数
    wenbao与三分
    wenbao与极角排序
    wenbao与差分约束
    wenbao与勒让德定理
    Zotero 导出参考文献列表
    为人性僻耽佳句(三)
  • 原文地址:https://www.cnblogs.com/aixing/p/13327280.html
Copyright © 2020-2023  润新知