搭建Redis集群

搭建集群首先要有一些运行在集群模式的Redis的实例,集群模式通过配置启用

下面是最少选项的集群的配置

port 6380
cluster-enabled yes
cluster-config-file nodes.6380.conf
cluster-node-timeout 5000
appendonly yes

cluster-enabled 选项用于开实例的集群模式,cluster-config-file选项设定保存节点配置文件的路径,无需人为修改,由 Redis 集群在启动时创建, 并在有需要时自动进行更新。

建立至少六个配置文件,并将端口相关信息修改为6380 - 6385,使用下面命令依次启动六个实例

redis-server redis.6380.conf
redis-server redis.6381.conf
···
redis-server redis.6385.conf

因为 nodes.conf 文件不存在,所以每个节点都为它自身指定了一个新的 ID ,实例会一直使用同一个 ID , 从而在集群中保持一个独一无二(unique)的名字。

搭建集群

现在已经有六个正在运行的Redis实例,接下来我们需要使用这些实例来创建集群。 通过使用 Redis 集群命令行工具 redis-cli,编写节点配置文件的工作可以非常容易地完成,这个程序通过向实例发送特殊命令来完成创建新集群, 检查集群, 或者对集群进行重新分片(reshared)等工作。(以前是使用redis-trib)

redis-cli --cluster create 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383  127.0.0.1:6384 127.0.0.1:6385 --cluster-replicas 1

这个命令在这里用于创建一个新的集群, 选项–replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。

之后跟着的其他参数则是这个集群实例的地址列表,3个master3个slave redis-trib 会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes , redis-trib 就会将这份配置应用到集群当中,让各个节点开始互相通讯,最后可以得到如下信息:

[OK] All 16384 slots covered.

这表示集群中的 16384 个槽都有至少一个主节点在处理, 集群运作正常。

使用集群

测试 Redis 集群比较简单的办法就是使用redis-cli:

$ redis-cli -c -p 6380
127.0.0.1:6380> get name
-> Redirected to slot [5798] located at 127.0.0.1:6381
"baichuan"
127.0.0.1:6381> exit
[root@localhost redis]# redis-cli -c -p 6380
127.0.0.1:6380> set name hello
-> Redirected to slot [5798] located at 127.0.0.1:6381
OK
127.0.0.1:6381> set hello world
-> Redirected to slot [866] located at 127.0.0.1:6380
OK
127.0.0.1:6380> get name
-> Redirected to slot [5798] located at 127.0.0.1:6381
"hello"
127.0.0.1:6381> get names
"group"
127.0.0.1:6381>

redis-cli 对集群的支持是非常基本的, 所以它总是依靠 Redis 集群节点来将它转向(redirect)至正确的节点。一个真正的(serious)集群客户端应该做得比这更好: 它应该用缓存记录起哈希槽与节点地址之间的映射(map), 从而直接将命令发送到正确的节点上面。这种映射只会在集群的配置出现某些修改时变化, 比如说, 在一次故障转移(failover)之后, 或者系统管理员通过添加节点或移除节点来修改了集群的布局(layout)之后, 诸如此类。