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持久化,我后续再写一篇相关的资料或找度娘了解了。。

    **************只要学不死就往死里学!************
  • 相关阅读:
    tableView滑动时cell消失
    收集别人写的很好的关于多线程的文章
    scroll或是其子类被添加进view时,界面自动上移
    runtime之实现对象序列化
    runtime之方法的交换
    升级mac中的系统之后,给PHP安装扩展常出现问题
    ubuntu下搭建Scrapy框架简单办法
    CuDA的快速下载链接
    windows下Scrapy爬虫框架环境搭建
    windows下安装pywin32报错:close failed in file object destructor:sys.excepthook is missing lost sys.stderr
  • 原文地址:https://www.cnblogs.com/lxhaaron/p/14282482.html
Copyright © 2011-2022 走看看