Redis3集群搭建(下)- 实操
上一篇博客学习了一些Redis集群的基础知识,这篇文章将会开始学习搭建一个3主3从的小型的Redis集群。
准备
- Redis 3.2.9
- 一台机器,Linux或者macOS
我本机是macOS,所以这里以macOS为例。
安装
$ wget http://download.redis.io/releases/redis-3.2.9.tar.gz
$ tar xzf
$ cd redis-3.2.9/
$ make
编译完成后,就可以启动Redis了
$ src/redis-server redis.conf
启动完成,说明Redis已经可以使用了。
配置文件
还需要准备一些配置文件供Redis集群使用,Redis集群搭建需要六个运行在Redis集群模式下的Redis实例,而不是普通的Redis实例,所以需要通过修改配置文件来让Redis实例支持集群。
$ mkdir redis-cluster
$ cd redis-cluster
$ mkdir 7000 7001 7002 7003 7004 7005
在7000-7005这几个文件夹中各创建一个redis.conf文件,文件的内容可以使用最开始解压后文件夹中的redis.conf文件,在这个基础上进行修改。需要修改如下几个配置:
port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 15000
appendonly yes
- cluster-enabled:配置打开集群模式
- cluster-enabled:配置保存节点配置文件的路径,默认值为nodes.conf,无需人为修改,它由Redis集群启动时创建,并在有需要时自动进行更新
- appendonly:打开持久化
其他文件夹的配置以此类推,将可执行文件redis-server复制到redis-cluster文件夹下面,然后使用以下命令,一次在每个文件夹下面执行:
$ cd 7000
$ ../redis-server ./redis.config
搭建集群
把所有实例都运行起来之后,就可以使用这些实例开始搭建集群了,同时为每个节点编写配置文件。使用 Redis集群命令行工具redis-trib,编写节点配置文件可以变得非常简单。redis-trib.rb在Redis源码的src目录下,他是用ruby编写的,可以通过它来对Redis集群进行创建、检查、分片等工作。所以本机还需要安装配置ruby环境(ps:ruby环境配置后,需要安装Ruby的Redis接口,使用命令gem install redis)。
Ruby方式
创建集群:
./redis-trib.rb create --replicas 1 127.0.0.1:7000 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
这个命令在这里用于创建一个新的集群,–replicas 1表示为集群中的每个主节点创建一个从节点。redis-trib这时候会打印出一份预想中的配置给你看,如果觉得没有问题,输入yes,集群就开始创建了。
如下图所示,表示集群创建成功:
create-cluster脚本
如果觉得这种方式太麻烦,也可以通过Redis源码目录下的utils/create-cluster文件夹中的create-cluster脚本创建集群。通过这个脚本可以创建一个3主3从的集群,并且端口默认从30001开始。但是通过这种方式就不能学习到那么多Redis集群的细节。
这个脚本主要有以下命令:
- create-cluster start
- create-cluster create
- create-cluster stop
测试集群
这里用redis-cli脚本进行测试,看集群是否可用。
$ ./redis-cli -c -p 7000
127.0.0.1:7000> set mykey redis
-> Redirected to slot [14687] located at 127.0.0.1:7002
OK
127.0.0.1:7002> set hello world
-> Redirected to slot [866] located at 127.0.0.1:7000
OK
127.0.0.1:7000> get mykey
-> Redirected to slot [14687] located at 127.0.0.1:7002
"redis"
127.0.0.1:7002> get hello
-> Redirected to slot [866] located at 127.0.0.1:7000
"world"
127.0.0.1:7000>
可以看出Redis会根据key计算对应的slot,然后跳转到对应的node上去,和我们之前介绍的内容一致。