zoukankan      html  css  js  c++  java
  • centos redis 集群搭建

    Redis集群详解

    Redis有三种集群模式,分别是:

    1. 主从模式 
    2. Sentinel模式
    3. Cluster模式

    现在我想介绍的是Cluster模式的搭建方式:

    Cluster模式介绍

    sentinel模式基本可以满足一般生产的需求,具备高可用性。但是当数据量过大到一台服务器存放不下的情况时,主从模式或sentinel模式就不能满足需求了,这个时候需要对存储的数据进行分片,将数据存储到多个Redis实例中。cluster模式的出现就是为了解决单机Redis容量有限的问题,将Redis的数据根据一定的规则分配到多台机器。

    cluster可以说是sentinel和主从模式的结合体,通过cluster可以实现主从和master重选功能,所以如果配置两个副本三个分片的话,就需要六个Redis实例。因为Redis的数据是根据一定规则分配到cluster的不同机器的,当数据量过大时,可以新增机器进行扩容。

    使用集群,只需要将redis配置文件中的cluster-enable配置打开即可。每个集群中至少需要三个主数据库才能正常运行,新增节点非常方便。

    cluster集群特点:

    •  多个redis节点网络互联,数据共享
    •  所有的节点都是一主一从(也可以是一主多从),其中从不提供服务,仅作为备用
    •  不支持同时处理多个key(如MSET/MGET),因为redis需要把key均匀分布在各个节点上, 并发量很高的情况下同时创建key-value会降低性能并导致不可预测的行为
    •  支持在线增加、删除节点
    •  客户端可以连接任何一个主节点进行读写

    环境配置:

    操作系统:centos7.4

    三台服务器IP和端口:

    10.0.0.60    7001、7002

    10.0.0.61    7003、7004

    10.0.0.62    7005、7006

    操作步骤:

    1、下载最新版本redis,我现在用的是:redis-6.0.9.tar.gz,下载到/software下面,下载过程不在这里说明,自己可以去官网上下载,再上传到指定的目录

    2、解压文件:

    cd /software
    tar -zxvf redis-6.0.9.tar.gz

    3、安装redis的环境配置基本库,执行下面的命令安装:

    yum -y install gcc gcc-c++ make tcl
    yum -y install centos-release-scl
    yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
    scl enable devtoolset-9 bash

    4、编译安装redis:

    cd /software/redis-6.0.9/src
    make && make install

    5、创建用户和群组

    groupadd redis
    useradd redis -s /sbin/nologin -g redis

    若出现多次创建时会提示有目录存在或mail目录存在,可以使用以下命令做删除用户目录 :

    rm -rf /home/redis/
    rm -f /var/spool/mail/redis 

    6、创建数据目录和配置文件目录

    mkdir /software/redis-6.0.9/cluster
    
    #在10.0.0.60机器上创建以下目录 
    mkdir -p /data/redis/cluster/redis_7001
    mkdir -p /data/redis/cluster/redis_7002
    
    #在10.0.0.61机器上创建以下目录 
    mkdir -p /data/redis/cluster/redis_7003
    mkdir -p /data/redis/cluster/redis_7004
    
    #在10.0.0.62机器上创建以下目录 
    mkdir -p /data/redis/cluster/redis_7005
    mkdir -p /data/redis/cluster/redis_7006

    7、对每台服务器的目录进行授予读取权限:

    chown -R redis:redis /data/redis
    chown -R redis:redis /software/redis-6.0.9

    8、******设置配置文件******这一步骤很重要********************

    10.0.0.60服务器上,若是61或62,则拷贝相应端口的配置文件名称,如61就是7003和7004,而62服务器就是7005和7006配置文件:

    cp /software/redis-6.0.9/redis.conf  /software/redis-6.0.9/cluster/redis_7001.conf
    
    cp  /software/redis-6.0.9/redis.conf  /software/redis-6.0.9/cluster/redis_7002.conf

    配置文件内容以下,红色部分为根据每个实例需调整的地方:

    bind 10.0.0.60
    port 7001
    daemonize yes
    pidfile "/var/run/redis_7001.pid"
    logfile "/software/redis-6.0.9/cluster/redis_7001.log"
    dir "/data/redis/cluster/redis_7001"
    masterauth 123456
    requirepass 123456
    appendonly no
    cluster-enabled yes
    cluster-config-file nodes_7001.conf
    cluster-node-timeout 15000

    比如是7002这个实例,则IP不用调整,其它跟端口有关系的部分都要由7001调整为7002

    如下为10.0.0.61:7003实例的配置文件,当然前提是你配置的目录路径和我是一样的,若是不一样也得做相应调整

    bind 10.0.0.61
    port 7003
    daemonize yes
    pidfile "/var/run/redis_7003.pid"
    logfile "/software/redis-6.0.9/cluster/redis_7003.log"
    dir "/data/redis/cluster/redis_7003"
    masterauth 123456
    requirepass 123456
    appendonly no
    cluster-enabled yes
    cluster-config-file nodes_7003.conf
    cluster-node-timeout 15000

    9、若是防火墙有开启的就要开始端口了,因为我是一台服务器有两个实现,故两个端口都要开放

    比如我的10.0.0.60服务器是7001和7002端口则需开放这两个端口

    firewall-cmd --zone=public --add-port=7001/tcp --permanent
    firewall-cmd --zone=public --add-port=7002/tcp --permanent
    #这里非常重要,因为创建集群的端口是在上面两个端口的基础上加10000,故开放的端口应该是:17001和17002
    firewall-cmd --zone=public --add-port=17001/tcp --permanent
    firewall-cmd --zone=public --add-port=17002/tcp --permanent
    #重新更新防火墙状态
    firewall-cmd --reload

    若是服务器是10.0.0.61的就是开放7003和7004两个端口加上集群的端口:17003和17004

    firewall-cmd --zone=public --add-port=7003/tcp --permanent
    firewall-cmd --zone=public --add-port=7004/tcp --permanent
    #这里非常重要,因为创建集群的端口是在上面两个端口的基础上加10000,故开放的端口应该是:17003和17004
    firewall-cmd --zone=public --add-port=17003/tcp --permanent
    firewall-cmd --zone=public --add-port=17004/tcp --permanent
    #重新更新防火墙状态
    firewall-cmd --reload

    若是服务器是10.0.0.62的就是开放7005和7006两个端口加上集群的端口:17005和17006

    firewall-cmd --zone=public --add-port=7005/tcp --permanent
    firewall-cmd --zone=public --add-port=7006/tcp --permanent
    #这里非常重要,因为创建集群的端口是在上面两个端口的基础上加10000,故开放的端口应该是:17005和17006
    firewall-cmd --zone=public --add-port=17005/tcp --permanent
    firewall-cmd --zone=public --add-port=17006/tcp --permanent
    #重新更新防火墙状态
    firewall-cmd --reload

    10、进入各服务器的目录下,启动redis服务器,下面是在10.0.0.60服务器上的命令,若是其它服务器,则调整对应的配置文件名称即可,即调整红色部分的内容:

    cd /software/redis-6.0.9/src
    #若是在服务器61上,则是redis_7003.conf和redis_7004.conf,若是在服务器62上则是:redis_7005.conf和redis_7006.conf redis
    -server ../cluster/redis_7001.conf redis-server ../cluster/redis_7001.conf

    11、终于到创建集群的时刻了,以前低版本的还要安装ruby,若你的是低版本的,可在找下度娘,因为我现在用的是最新版本:6.0.9,所以可以直接创建集群:

    redis-cli -a 123456 --cluster create 10.0.0.60:7001 10.0.0.60:7002 10.0.0.61:7003 10.0.0.61:7004 10.0.0.62:7005 10.0.0.62:7006 --cluster-replicas 1

     出现以上界面就表示创建成功了。。。

    注意问题:

    1、若出现这样的错误,就是你的服务器有端口未开放引起的。

     2、若出现这样的界面,则是因为创建过一次集群失败后,未将原来集群的初始化信息删除,需使用以下两个命令登陆各服务器的实例上执行:如下图二,一定要记住是每台服务器的实例都要登陆进行执行这两个命令:

    图二:

     3、还有一个问题,就是若启动服务器失败,有可能是持久化文件配置有问题,可以尝试删除数据目录下:/data/redis/cluster/redis_7001,里面以*.rdb或*.aof结尾的文件,删除后再重新启动reis服务,我开始有遇到过这个问题,原因 是我开始是开启AOF持久化,后面关闭使用软件默认的RDB持久化,导到启动失败了。至于什么是RDB和AOF持久化,我后续再写一篇相关的资料或找度娘了解了。。

    **************只要学不死就往死里学!************
  • 相关阅读:
    316 Remove Duplicate Letters 去除重复字母
    315 Count of Smaller Numbers After Self 计算右侧小于当前元素的个数
    313 Super Ugly Number 超级丑数
    312 Burst Balloons 戳气球
    309 Best Time to Buy and Sell Stock with Cooldown 买股票的最佳时间含冷冻期
    Java 类成员的初始化顺序
    JavaScript 全局
    HTML字符实体
    Java中的toString()方法
    JavaScript 弹窗
  • 原文地址:https://www.cnblogs.com/lxhaaron/p/14282482.html
Copyright © 2011-2022 走看看