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

    第一步:安装Redis

    详情参考之前的博客。

    第二步:修改配置,创建节点

    我们现在要搞六个节点,三主三从,

    端口规定分别是7001,7002,7003,7004,7005,7006

    我们先在/usr/local目录下新建一个redis-cluster目录,

    mkdir /usr/local/redis-cluster

    Reids安装包里有个集群工具,要复制到redis-cluster目录下

    cp redis-3.2.11/src/redis-trib.rb /usr/local/redis-cluster
    

    然后该目录下再创建6个目录,

    分别是7001,7002,7003,7004,7005,7006,用来存在redis配置文件;

    mkdir /usr/local/redis-cluster/7001  ...

    将redis安装目录下的文件拷贝到每个700X目录内

    这里我们要使用redis集群,要先修改redis的配置文件redis.conf

    vi /usr/local/redis-cluster/7001/redis.conf

    修改一下几个

    port 7001  //六个节点配置文件分别是7001-7006

    bind 192.168.1.109    //多台机器创建集群时必须修改 默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问,单机集群可修改可不修改

    daemonize yes        //redis后台运行

    pidfile /var/run/redis_7001.pid   //pidfile文件对应7001-7006

    cluster-enabled yes   //开启集群

    cluster-config-file nodes_7001.conf  //保存节点配置,自动创建,自动更新对应7001-7006

    cluster-node-timeout 5000    //集群超时时间,节点超过这个时间没反应就断定是宕机

    appendonly yes   //存储方式,aof,将写操作记录保存到日志中

    7001下的修改完后,我们把7001下的配置分别复制到7002-7006 然后对应的再修改下配置即可;

    cp /usr/local/redis-cluster/7001/redis.conf /usr/local/redis-cluster/7002/   ...
    vi /usr/local/redis-cluster/7002/redis.conf  ...

    编辑后5个配置文件,把 port ,pidfile,cluster-config-file 分别修改下即可;

    第三步:启动六个节点的redis

    分别启动六个节点:

    /usr/local/redis-cluster/7001/bin/redis-server /usr/local/redis-cluster/7001/redis.conf   ...

    查看进程:如下图说明启动成功。

    第四步:创建集群

    执行redis官方提供的redis-trib.rb工具,此脚本是ruby脚本,它依赖ruby环境

    在使用之前 需要安装ruby,以及redis和ruby连接

    yum -y install ruby ruby-devel rubygems rpm-build
    
    gem install redis

    创建集群:

    ./redis-trib.rb create --replicas 1  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 127.0.0.1:7006
    ./redis-trib.rb create --replicas 1  192.168.56.101:7001 192.168.56.101:7002 192.168.56.101:7003 192.168.56.101:7004 192.168.56.101:7005  192.168.56.101:7006

    说明:

    redis集群至少需要3个主节点,每个主节点有一个从节点总共6个节点

    replicas指定为1表示每个主节点有一个从节点

    注意:

    如果执行时报如下错误:

    [ERR] Node XXXXXX is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0

    解决方法是删除生成的配置文件nodes.conf,如果不行则说明现在创建的结点包括了旧集群的结点信息,需要删除redis的持久化文件后再重启redis,比如:appendonly.aof、dump.rdb

    显示下图内容即为创建成功!

     

    第五步:集群数据测试

    先连接任意一个节点,然后添加一个key:

    redis-cli是redis默认的客户端工具,启动时加上`-c`参数,`-p`指定端口,就可以连接到集群。

    这里还得加-h 指定机器IP 。bind设置本地回环是无需添加。

    ./redis-cli -h 192.168.56.101 -p 7001 -c
    ./redis-cli -p 7001 -c

    未使用本地回环而是设置了本机ip的话,不加-h会报错,如下:

    正确连接到集群如下图:

    第六步:集群宕机测试

    各端口初始情况如下:

    当前7001,7003,7005节点为主节点正在服务

    我们选择干掉7001节点的进程。

    kill 2339

    再次查看集群节点情况

    ./redis-trib.rb check 192.168.56.101:7002
    

     

    发出警告:7004节点是未知节点ID的奴隶,即发现ID即为刚刚挂掉的7001节点的ID。等待一分钟再次查询节点情况

    发现从节点7004已经顶替7001开始工作。

    然后我们再次干掉7004节点。查看节点情况

    这时我们发现出事了,因为主从节点都挂了 所以有一部分哈希槽没得分配,最后一句

    [ERR] Not all 16384 slots are covered by nodes.  没有安全覆盖;

    所以不能正常使用集群;

    注:成功创建集群后如果重启服务器,则只要开启各个节点即可重新启动集群服务。

  • 相关阅读:
    【Django】django 处理request流程细节(转)
    【Django】request 处理流程(转)
    【Django】中间件
    【HTML】DocType
    【CSS】伪类与伪元素
    【nodejs】nodejs 的linux安装(转)
    【chrome】 chrome 开发者工具
    【samba】samba 用户权限配置(转)
    form表单组件
    自定义分页器
  • 原文地址:https://www.cnblogs.com/Zlcode/p/8306434.html
Copyright © 2011-2022 走看看