我的Redis集群搭建之路

要做一个平台,设计要求每秒能够在一个800-1000万条记录的数据库内读写1万次。
我是选用redis集群。我的做法是按照大神龚-java提供的文档和自己加入的一些发现结合实现的。
首先就是下载redis-3.2.1.tar.gz,这个没有什么说的,去官网上找链接然后wget就可以了。
下载完成后tar -zxvf解压缩,我的习惯是解压缩之后放到/usr/local/目录下面。
到/usr/local/redis-3.2.1/目录下面,如果没有安装gcc就需要用命令yum install gcc安装一下。
gcc装好后,就在/usr/local/redis-3.2.1/目录下面编译,执行make,如果执行失败看一下错误,如果错误如下,
编译中断。
make[1]: *** [adlist.o] 错误 1
make[1]: 离开目录“/usr/local/redis-stable/src”
make: *** [all] 错误 2
解决办法是:
make MALLOC=libc
编译完成后执行make install。作用是将 /usr/local/redis/redis-3.2.1/src/相关redis的执行命令复制到/usr/local/bin目录下
下面就要修改配置文件了。配置文件在/usr/local/redis/redis-3.2.1/redis.conf。主要修改下面几个参数。
bind 0.0.0.0 表示不限制链接本机服务的ip地址。任何计算机都可以发起连接。这里要特别注意,我一开始以为这里绑定的ip才能访问本机的6379端口,结果一修改就启动不了redis服务,后来仔细看了一下配置文件上的说明才明白,原来这个bind的不是来访问的ip,而是本机网卡的物理地址。
daemonize yes 表示允许后台运行
cluster-enabled yes表示开启集群
cluster-node-timeout 15000表示设置超时时间
cluster-config-file node保存集群配置文件
配置好之后启动redis服务,redis-server redis.conf
[root@t91 redis-3.2.1]# ps -ef | grep redis
root      2352     1  0 09:39 ?        00:00:00 redis-server 192.168.1.91:7001 [cluster]
root      2450  2006  0 09:56 pts/0    00:00:00 grep --color=auto redis
如果用ps -ef | grep redis,打印上面内容,就表示启动成功了。
【提示:从reids 5 开始,不用再自己安装ruby了,直接执行redis-cli --cluster create 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  --cluster-replicas 1语句就可以建立集群了】
下一步,因为redis cluster的配置是用的ruby脚本写得,那么就需要你最少安装了ruby (apt-get install ruby )和gem。更主要的是你还要用安装ruby所需要的redis模块
yum -y install zlib ruby rubygems
# 安装ruby的redis库

gem install redis

【补充:如果执行时报错,无法连接。可以手动下载下来安装

1、去https://rubygems.org/gems/redis/下载redis-x.x.x.gem文件

2、gem install -l /root/redis-3.3.1.gem

好了,现在可以开始创建集群了。我用的是redis-trib.rb create
redis-trib.rb create --replicas 1 192.168.1.91:7001 192.168.1.92:7002 192.168.1.93:7003 192.168.1.94:7004 192.168.1.95:7005 192.168.1.96:7006
创建过程折腾了我好久,一开始总是报错:
>>> Creating cluster
[ERR] Sorry, can't connect to node 192.168.1.91:7001
我从网上找了很多文章,大部分都是说ruby或者gem的版本太低。我尝试升级过但还是不行。也就没再研究原因。因为后来遇到大神龚-java,我完全按照他的文档操作,在一台服务器上成功的创建了6个实例的redis集群。
这时我以为已经大功告成了,没想到后面的事情真是一波三折。
既然在一台服务器上集群成功了,也应该可以在6台上实现吧。
我马上开始部署。结果创建的时候又开始报错
>>> Creating cluster
[ERR] Sorry, can't connect to node 192.168.1.91:7001
检查来检查去,发现原来是我前面提过的配置文件redis.conf里面bind 0.0.0.0的问题。经过好多次失败,才不得不耐心的看看说明,结果才明白。哎,以后真要好好看说明了。
然后执行创建,顺利链接,我正高兴呢,结果发现执行到Waiting for the cluster to join.........不向下进行了。一直是这个状态。
没说的,上网查吧。网上有位兄弟是这么说的:
创建集群时一直处于"Waiting for the cluster to join...................................."的状态
这个问题原因不知,但解决方法是在redis.conf文件中把bind 127.0.0.1本地环回口改为物理接口.
可是我已经把redis.conf的bind配置好了呀。又是一次次的尝试,结果我发现,在我创建集群后,集群成员要通过一个随机端口,向创建集群的服务器通讯。这个通讯不是redis.conf里面port。
行了,二话不说修改iptables
-A INPUT -s 192.168.1.91 -j ACCEPT
-A INPUT -s 192.168.1.92 -j ACCEPT
-A INPUT -s 192.168.1.93 -j ACCEPT
-A INPUT -s 192.168.1.94 -j ACCEPT
-A INPUT -s 192.168.1.95 -j ACCEPT
-A INPUT -s 192.168.1.96 -j ACCEPT
然后创建集群,还是老样子……这时想起了redis集群通讯方式,集群成员应该不会只与集群创建者通讯吧。于是把集群成员的iptables全都做了相同配置。
然后创建集群,大功告成!
特别感谢龚-java同志的大力帮助。
附龚-java的文档:https://github.com/gonghard/redis

你可能感兴趣的:(我的Redis集群搭建之路)