知识准备
1、官方推荐至少3个master,3个slave,这样可以让数据冗余1份。
2、每个Node(节点)需要两个TCP的端口,一个用作服务(the client port),一个用作节点间的bus(the cluster bus port),默认情况下bus port = client + 10000。
3、Redis采用master-slave模式,如果集群只有master,A,B,C的话,如果B挂了,系统就不可用了,如果集群有6个Node,A,B,C,A1,B1,C1,其中B1复制B,这样如果B挂了,集群会自动把B1升级为master,所以系统仍可以正常工作。
优势
1、自动把数据分割到各个节点
2、数据冗余,一定数量的加点宕机不影响整体
步骤
配置文件修改
redis.conf,这里给出最简配置:
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
注意:nodes.conf不允许人为修改,是redis在运行过程中自动创建的。
创建6个实例
mkdir cluster-test
cd cluster-test
mkdir 7000 7001 7002 7003 7004 7005
然后把redis所需的执行脚本和redis.conf复制到700*的文件夹下。
分别启动
./redis-server redis.conf
结果:
8371:M 13 Jul 14:51:06.610 * No cluster configuration found, I'm 933456b38570767f5e1dc1099832511686c42cc6
创建集群
首先安装gem
gem install redis
在src目录下,找到redis-trib.rb:
./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
结果:
Waiting for the cluster to join...
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 8ff4aac1039ba8473bb14343db1c4d4d3b7f58ee 127.0.0.1:7000
slots:0-5460 (5461 slots) master
M: 1967f958e39187d85d9e09e2a737935bcb5a97c1 127.0.0.1:7001
slots:5461-10922 (5462 slots) master
M: 933456b38570767f5e1dc1099832511686c42cc6 127.0.0.1:7002
slots:10923-16383 (5461 slots) master
M: 483c957ec7c4b7fa06e04d99bc0bde3a03251e07 127.0.0.1:7003
slots: (0 slots) master
replicates 8ff4aac1039ba8473bb14343db1c4d4d3b7f58ee
M: 25a40c73463925045c550569ced8c3539ac1f53d 127.0.0.1:7004
slots: (0 slots) master
replicates 1967f958e39187d85d9e09e2a737935bcb5a97c1
M: 94286b1d18fcca27b6e2521dd25c273739c77a21 127.0.0.1:7005
slots: (0 slots) master
replicates 933456b38570767f5e1dc1099832511686c42cc6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
成功。
测试
➜ src redis-cli -c -p 7000
127.0.0.1:7000> set k2 v2
OK
127.0.0.1:7000> set k3 v3
OK
127.0.0.1:7000> set k4 v4
-> Redirected to slot [8455] located at 127.0.0.1:7001
OK
127.0.0.1:7001> get k1
-> Redirected to slot [12706] located at 127.0.0.1:7002
"v1"
127.0.0.1:7002>
➜ src ./redis-cli -c -p 7001
127.0.0.1:7001> set k1 v1
-> Redirected to slot [12706] located at 127.0.0.1:7002
OK
127.0.0.1:7002>
➜ src ./redis-cli -c -p 7005
127.0.0.1:7005> set k9 v9
-> Redirected to slot [12458] located at 127.0.0.1:7002
OK
127.0.0.1:7002>
后续
查看加点
127.0.0.1:7002> CLUSTER NODES
8ff4aac1039ba8473bb14343db1c4d4d3b7f58ee 127.0.0.1:7000 master - 0 1468402146388 1 connected 0-5460
94286b1d18fcca27b6e2521dd25c273739c77a21 127.0.0.1:7005 slave 933456b38570767f5e1dc1099832511686c42cc6 0 1468402146907 3 connected
1967f958e39187d85d9e09e2a737935bcb5a97c1 127.0.0.1:7001 master - 0 1468402145355 2 connected 5461-10922
483c957ec7c4b7fa06e04d99bc0bde3a03251e07 127.0.0.1:7003 slave 8ff4aac1039ba8473bb14343db1c4d4d3b7f58ee 0 1468402147419 4 connected
933456b38570767f5e1dc1099832511686c42cc6 127.0.0.1:7002 myself,master - 0 0 3 connected 10923-16383
25a40c73463925045c550569ced8c3539ac1f53d 127.0.0.1:7004 slave 1967f958e39187d85d9e09e2a737935bcb5a97c1 0 1468402145869 5 connected
ef667a00cc70974642f3fda563eb5c77cd200f60 127.0.0.1:7006 slave 933456b38570767f5e1dc1099832511686c42cc6 0 1468402146907 3 connected
127.0.0.1:7002>
添加实例
./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000
添加实例作为复制
./redis-trib.rb add-node --slave 127.0.0.1:7006 127.0.0.1:7000
删除节点
./redis-trib del-node 127.0.0.1:7000 `<node-id>`