linux下搭建redis集群

上一篇记录了linux如何安装redis服务:点击打开链接

本篇将在上一篇的基础上搭建redis集群,因为个人硬件条件受限,集群的所有redis实例都搭建在同一台服务器上。

1、首先新建一个redis-cluster目录,里面存放所有redis节点实例。


2、将上一篇博客里安装好的redis服务,redis/bin这个目录拷贝到redis-cluster目录下改名为redis01


因为我这个redis是直接从以前搭好的复制过来的,存在一些旧数据,所以进入redis01目录下将dump.rdb文件删除掉。


3、vi redis.conf 修改该文件里面配置的redis监听的端口号,(可以在命令模式下使用/prot进行查找)我这里讲端口号改为7001。


在redis.conf文件里找到cluster-enabled  yes 这一行,打开注释,表示当前redis是集群模式启动。


4、redis搭建一个最小的集群需要6个节点,因为Redis集群判断节点是否宕机是一个投票机制,超过半数认为某一节点宕机就认为该节点挂掉了,也就是说我们需要至少三个节点。同时为了保证集群的高可用,每一个主节点都需要一个备份节点,当某一节点宕机时备份节点会代替主节点工作。

将上面的redis01目录复制五份儿到redis-cluster目录下,并且修改redis.conf将每个redis节点的端口号依次修改成7001~7006共六个。


5、六个节点配置完成后,新建一个脚本文件,用来批量启动redis节点



为脚本文件添加可执行权限


执行脚本文件,查看所有节点是否能成功启动


6、需要搭建redis集群我们还需要Ruby脚本语言的编译环境

    yum install ruby(我自己安装的时候装完这个,执行下面的一行命令说我已经安装过了,所以下面的也就不用装了)

    yum install rubygems

执行以上两个命令安装ruby编译环境,安装完毕后,我们还需要一个redis-3.0.0.gem安装包,在网上下载一个后安装到我们的服务器上(这里我在执行gem install redis-3.0.0.gem命令式也是提示我已经安装过了,可能是redis源码里面本来就有了)。


安装完成后进入我我们之前已经解压的redis-3.0.0源码包里面的src目录下找到redis-trib.rb文件,将该文件拷贝到我们的redis-cluster目录下面。


7、执行命令开始搭建redis集群

./redis-trib.rb create --replicas 1 ip:port ip:port ip:port ip:port ip:port ip:port

其中--replicas 1表示每个主节点都有一个从节点。


 执行完毕后出现以下信息表示搭建成功。


8、使用测试,随便开启一个redis-cli,注意要加端口号和-c,集群根据我set的key值计算出slot的值然后分配到相应的节点上保存。(终于成功了)哭


9、重点,出现的问题

(1)在执行./redis-trib.rb create --replicas 1 ip:port ip:port ip:port ip:port ip:port ip:port这个命令时,我出现了一个错误,没有出现上图所示的任何信息,而是直接连上了一个redis-cli,退出时就出现异常了,突然想到我用的是阿里云服务器7001~7006端口号没有开放。

错误信息:/usr/local/share/gems/gems/redis-3.0.0/lib/redis/connection/ruby.rb:115:in `

在我开放后再执行以上命令,就出现正常了节点配置信息了。

(2)接着第一步配置信息出来之后,出现waiting for the cluster to join.....................................,然后一直........无限等待,又是一个问题。


原因:

redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口
集群总线端口为redis客户端连接的端口 + 10000
如redis端口为6379
则集群总线端口为16379

解决方法:我在阿里云安全组规则上,把17001~17006都开了一遍,然后解决了,实在不行的话,把16379也开上尴尬

(3)端口都打开了,但是我控制台开始在“............................”,我ctrl+c退出了,然后重新执行命令,又出问题了,

错误信息:in 'call':ERR Slot 0 is already busy (Redis::CommandError)

原因:我上一步因为端口号的原因搭建失败了,留下了残余的配置文件。

解决办法:百度了一下,我先把所有redis节点目录下的nodes.conf文件都删掉了还是不行

                最后用redis-cli 登录到每个节点执行  flushall  和 cluster reset  就可以了。注意这里登录redis-cli需要带上-p port 不然无法连接。