介绍
在没有redis cluster之前,比较流行的redis集群方案是基于lvs->twemproxy->redis的,这个方案部署起来比较复杂,一个请求要经过两层路由才到redis,而且为了作高可用还很浪费机器,另外还不支持动态扩容,意味着每一次扩容都要将redis之前的所有数据重新发送一遍,不然就会导致节点的数据分布不均匀。
还有一个方案,DBA们十分欢迎在应用中来对数据进行分片,比如jedis有shrading方面的支持,这样运维起来是最省事的。
后来DBA们研究发现新的redis cluster特性以很简单的方式提供了高可用性,还支持动态扩容,于是纷纷主推redis cluster作为redis的集群方案。所以说,在大公司的系统架构中,性能往往不是主要考虑的因素。
关于redis cluster更详细的教程参考
《redis集群教程》。
准备
redis cluster是redis3版本的一个新特性,因此首先要在环境中安装好redis3。若还没安装,可参考
《centos上安装及配置单台redis》。由于这里只是搭建一个开发环境,最简单的就是将所有redis实例都跑在同一台机器上,只要设置端口号不一样就行了,如下所示:
主master:
10.199.203.17:6301
10.199.203.17:6302
10.199.203.17:6303
从slave:
10.199.203.17:6304
10.199.203.17:6305
10.199.203.17:6306
10.199.203.17:6302
10.199.203.17:6303
从slave:
10.199.203.17:6304
10.199.203.17:6305
10.199.203.17:6306
安装好redis3后,我们开始规划目录结构,如下所示:
$ pwd
/usr/local/redis3 #redis根目录
$ mkdir cluster #新建redis cluster父目录
$ cd cluster$ mkdir 6301 6302 6303 6304 6305 6306 #新建节点目录,以端口号命名
./bin/redis-server ./cluster/6301/redis.conf
./bin/redis-server ./cluster/6302/redis.conf
./bin/redis-server ./cluster/6303/redis.conf
./bin/redis-server ./cluster/6304/redis.conf
./bin/redis-server ./cluster/6305/redis.conf
./bin/redis-server ./cluster/6306/redis.conf
建议检查一下每台redis是否正常启动,可查看一下端口服务:
netstat -anpt | grep redis
创建redis cluster
虽然每个节点的redis都启动来了,但它们无法成为一个集群,这时还需要官方提供的redis-trib来创建redis cluster。redis-trib 位于 Redis 源码的 src 文件夹中, 它是一个 Ruby 程序。这个程序通过向实例发送特殊命令来完成创建新集群,检查集群,或者对集群进行重新分片(reshared)等工作。
要运行redis-trib要先安装ruby运行环境:
yum -y install ruby
接下来安装ruby gems,用它来查找、安装、升级和卸载ruby软件包。
yum -y install rubygems
然后通过gem来安装ruby的redis客户端
gem install redis
这一步有可能会失败,大多是因为国内连不上gem官方库,那只能修改gem库为国内的库,如
淘宝网的RubyGems镜像,或下载redis.gem文件离线安装。
最后创建redis cluster,运行命令:
./redis-trib.rb create --replicas 1 10.199.203.17:6301 10.199.203.17:6302 10.199.203.17:6303 10.199.203.17:6304 10.199.203.17:6305 10.199.203.17:6306
命令的意义如下:
(1)给定 redis-trib.rb 程序的命令是 create , 这表示我们希望创建一个新的集群。
(2)选项 --replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
(3)之后跟着的其他参数则是实例的地址列表, 我们希望程序使用这些地址所指示的实例来创建新集群。
(1)给定 redis-trib.rb 程序的命令是 create , 这表示我们希望创建一个新的集群。
(2)选项 --replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
(3)之后跟着的其他参数则是实例的地址列表, 我们希望程序使用这些地址所指示的实例来创建新集群。
注意这里的地址一定不能使用127.0.0.1 ,要用真实的IP
输入命令后,控制台便会打印出redis cluster的配置信息,最后向你确认是否接受,输入:
yes
控制台便会输出一系列信息,并提示redis cluster搭建成功!
连接redis cluster
使用客户端
redis-cli连上集群中的任意一台redis,即可连上整个集群,可输入:
./bin/redis-cli
-c
-p 6301
另外还可以通过如下命令:
./bin/redis-cli -p 6301 cluster nodes
可查看集群配置信息:
<redis_1_ID>
10.199.203.17
:6301 myself,master - 0 0 1 connected 0-5460
<redis_2_ID> 10.199.203.17:6302 master - 0 1455979903197 2 connected 5461-10922
<redis_3_ID> 10.199.203.17:6303 master - 0 1455979904735 3 connected 10923-16383
<redis_5_ID> 10.199.203.17:6304 slave <redis_1_ID> 0 1455979903197 4 connected
<redis_6_ID> 10.199.203.17:6305 slave <redis_2_ID> 0 1455979905245 5 connected
<redis_7_ID> 10.199.203.17:6306 slave <redis_3_ID> 0 1455979903197 6 connected
<redis_3_ID> 10.199.203.17:6303 master - 0 1455979904735 3 connected 10923-16383
<redis_5_ID> 10.199.203.17:6304 slave <redis_1_ID> 0 1455979903197 4 connected
<redis_6_ID> 10.199.203.17:6305 slave <redis_2_ID> 0 1455979905245 5 connected
<redis_7_ID> 10.199.203.17:6306 slave <redis_3_ID> 0 1455979903197 6 connected
这里的<redis_x_ID>是集群为每台redis分配的标识符(太长,所以没具体写出来)