redis集群 搭建

redis集群的搭建

    集群中至少应该有奇数个节点,所以至少有三个节点,每个节点至少有一个备份节点,所以下面使用6节点(主节点、备份节点由redis-cluster集群确定)。

主机列表

ip 

ip1   7001 ,7002

ip2  7002,7003

ip3 7003 ,7001


1. 3台主机分别安装redis (参考另一个blog)

     1>  下载 安装包
  redis官网地址:http://www.redis.io/
  wget http://download.redis.io/releases/redis-4.0.2.tar.gz 
  或者

  下载tar.gz 后ftp传上linux主机

   2> 解压 安装

tar zxvf redis-4.0.2.tar.gz
cd redis-4.0.2
make
make install PREFIX=/data/redis-cluster    //默认安装到/usr/local/bin目录下。这里指定安装目录/data/redis-cluster

在/data/redis-cluster 建7001 7002 两个目录,是P1 主机上。

在P2建7002,7003 目录

在P3建 7001 7002目录

3> 修改配置

cp /fox/redis-4.0.2/redis.conf  /data/redis-cluster/700*/

daemonize yes #后台启动
port 7001 #修改端口号,从7001到7006
cluster-enabled yes #开启cluster,去掉注释
cluster-config-file nodes-7001.conf  //7001-7006替换
cluster-node-timeout 15000
appendonly yes
protected-mode no  ////关闭保护模式
dir /data/redis-cluster/7001/data   //redis持久化文件路径,默认为当前路径 7001 替换不同的目录
pidfile /var/run/redis_7001.pid  //7001 替换

此配置信息复制6份,每一份注意修改700*

红色部分:http://www.cnblogs.com/wangqingyi/articles/5575419.html

可以看到 Protected-mode 是为了禁止公网访问redis cache,加强redis安全的。

它启用的条件,有两个:
1) 没有bind IP
2) 没有设置访问密码

如果启用了,则只能够通过lookback ip(127.0.0.1)访问Redis cache,如果从外网访问,则会返回相应的错误信息:


redis的配置含义:
    protected-mode no    //关闭保护模式
    port 6379    //端口
    daemonize yes    //守护进程开启,默认服务从后台启动
    loglevel verbose    //日志级别
    logfile /data/redis/log/redis-6379.log    //日志文件位置
    ==redis持久化rdb,AOF相关==
    dbfilename dump.rdb    //redis持久化文件名称
    dir /data/redis/data/6379    //redis持久化文件路径,默认为当前路径
    appendonly yes    //开启AOF
    appendfilename "appendonly.aof"    //AOF文件名称
    no-appendfsync-on-rewrite yes    //子进程在做rewrite时,主进程不调用fsync(由内核默认调度)
    ==REPLICATION==
    slave-serve-stale-data yes    //当slave与master断开连接,slave继续提供服务
    slave-read-only yes
    repl-ping-slave-period 1    //slave ping master的时间间隔,单位为秒
    repl-timeout 10    //复制超时,单位为秒,须大于repl-ping-slave-period的值
     ==REDIS CLUSTER==
    cluster-enabled yes    //开启集群配置
    cluster-config-file nodes-6379.conf    //节点配置文件,这个文件是服务启动时自己配置创建的
    cluster-node-timeout 5000    //集群中各节点相互通讯时,允许"失联"的最大毫秒数,如果超过没向其它节点汇报成功,就认为该节点已挂。
    cluster-slave-validity-factor 0    //将该项设置为0,不管slave节点和master节点间失联多久都会一直尝试failover
    repl-ping-slave-period 1

4> 复制redis解压文件src下的redis-trib.rb文件到redis-cluster目录

5> redis 服务放到bin,方便执行命令

make install PREFIX=/data/redis-cluster

指定了安装目录,所有redis-cli 等服务不再/usr/local/bin。其实可以安装时候去掉prefix指定。

2.  安装ruby环境(以下在一台机器上安装即可)

[root@localhost redis-cluster]# yum install ruby  
[root@localhost redis-cluster]# yum install rubygems  

3. 升级ruby

redis requires Ruby version >= 2.2.2.

安装: http://www.runoob.com/ruby/ruby-installation-unix.html

$ tar -xvzf ruby-2.2.3.tgz    
$ cd ruby-2.2.3
  • 现在,配置并编译源代码,如下所示:
$ ./configure
$ make
$ sudo make install
  • 安装后,通过在命令行中输入以下命令来确保一切工作正常:
$ruby -v
ruby 2.2.3……

4. 安装redis gem

1> 下载 redis-x.x .gem
 wget https://rubygems.org/gems/redis/versions/4.0.1   //安装redis-4.0.1.gem

2> gem install redis-4.0.1.gem 
https://blog.csdn.net/kenera/article/details/6524557

报错:gem install 时报错,no such file to load -- zlib

解决办法是:

  1. 进入ruby源码文件夹
  1. 安装ruby自身提供的zlib包

#cd ext/zlib
#ruby ./extconf.rb
#make
#make install

5. 启动所有redis

redis-server redis.conf


6.使用redis-trib.rb创建集群

在安装了ruby 的主机上执行:

./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  

使用create命令 --replicas 1 参数表示为每个主节点创建一个从节点,其他参数是实例的地址集合

上面显示创建成功,有3个主节点,3个从节点,每个节点都是成功连接状态。

 

       3个主节点[M]以及分配的哈希卡槽如下:

  M: dfd510594da614469a93a0a70767ec9145aefb1a 127.0.0.1:7001
       slots:0-5460 (5461 slots) master
  M: e02eac35110bbf44c61ff90175e04d55cca097ff 127.0.0.1:7002
       slots:5461-10922 (5462 slots) master
  M: 4385809e6f4952ecb122dbfedbee29109d6bb234 127.0.0.1:7003
       slots:10923-16383 (5461 slots) master

      

          3个从节点[S]以及附属的主节点如下:

          S: ec02c9ef3acee069e8849f143a492db18d4bb06c 127.0.0.1:7004
             replicates dfd510594da614469a93a0a70767ec9145aefb1a
          S: 83e5a8bb94fb5aaa892cd2f6216604e03e4a6c75 127.0.0.1:7005
             replicates e02eac35110bbf44c61ff90175e04d55cca097ff
          S: 10c097c429ca24f8720986c6b66f0688bfb901ee 127.0.0.1:7006
             replicates 4385809e6f4952ecb122dbfedbee29109d6bb234



报错1:

[ ERR ] Node 192.168.186.91 : 7000 is not empty . Either the node already knows other nodes ( check with CLUSTER NODES ) or contains some key in database 0.
解决:
错误的原因是redis数据库没有清除  
[root@itfirst src]# redis-cli -h 192.168.186.91 -p 7001
192.168.186.91:7001> flushdb
OK
192.168.186.91:7001> quit
[root@itfirst src]# redis-cli -h 192.168.186.91 -p 7002
192.168.186.91:7002> flushdb
OK
192.168.186.91:7002> quit
[root@itfirst src]# redis-cli -h 192.168.186.91 -p 7003
192.168.186.91:7003> flushdb
OK
192.168.186.91:7003> quit
[root@itfirst src]# redis-cli -h 192.168.186.91 -p 7004
192.168.186.91:7004> flushdb
OK
192.168.186.91:7004> quit
[root@itfirst src]# redis-cli -h 192.168.186.91 -p 7005
192.168.186.91:7005> flushdb
OK
192.168.186.91:7005> quit

错误:这是由于之间创建集群没有成功,需要将nodes.conf和dir里面的文件全部删除

解决:删除。重启redis。然后在建集群


7.验证集群

1> 登录集群客户端,-c标识以集群方式登录

redis-cli -h 192.168.186.91 -c -p 7002

或者把h 去掉

2> 查看集群信息

192.168.186.91:7002> cluster info

3> cluster nodes //查看节点信息
4> CLUSTER SLOTS //查看插槽信息
5>  ./redis-trib.rb check 127.0.0.1:7002  查看集群节点状态

8. 集群挂了

挂了一个,从节点转成主节点,主节点启动后,就变从节点

9.节点操作


    ./redis-trib.rb del-node 192.168.101.121:6379 '2ff326bc9084236ee6540d58d307893662ceff0b'//删除节点
    ./redis-trib.rb add-node --slave --master-id 0ecc54ed34cc7e2e1ebca168ab4564b803992094 192.168.101.121:6379 192.168.101.125:6379//添加从节点,添加前需要删除已存在的node.conf,rdb,aof文件
    ./redis-trib.rb reshard 192.168.101.121:6379//为新节点分配slot
    ./redis-trib.rb check 192.168.101.121:6379    //检查集群运行状态,只要输入任意集群中节点即可,会自动检查所有相关节点。
    ./redis-trib.rb fix 192.168.101.121:6379    //修复集群(若node移除了,但是并没有移除node上面的slot,从而导致了slot总数没有达到16384,其实也就是slots分布不正确。所以在删除节点的时候一定要注意删除的是否是Master主节点)。









   

猜你喜欢

转载自blog.csdn.net/zhuchunyan_aijia/article/details/80745285