cluster分片集群模式搭建 - 1990bingliu/redis GitHub Wiki
sudo apt-get install redis-server
# 创建cluster配置目录
sudo mkdir -p /data/redis-cluster/{conf,db,log}
配置6个redis实例,redis_7001.conf配置项目如下(以7001端口为例)
port 7001
daemonize yes
pidfile "/var/run/redis/7001.pid"
logfile "/data/redis-cluster/log/7001.log"
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
dir "/data/redis-cluster/db"
dbfilename "7001_dump.rdb"
appendfilename "7001_appendonly.aof"
# 注意,因为6个配置文件db库都在一个目录下/data/db/,所以默认文件名都需要修改,以免冲突
sudo redis-server /data/redis-server/conf/redis_7001.conf
sudo redis-server /data/redis-server/conf/redis_7002.conf
sudo redis-server /data/redis-server/conf/redis_7003.conf
sudo redis-server /data/redis-server/conf/redis_8001.conf
sudo redis-server /data/redis-server/conf/redis_8002.conf
sudo redis-server /data/redis-server/conf/redis_8003.conf
查看一下,是否正常启动 ps -aux|grep redis
root 15370 0.0 0.0 41876 3680 ? Ssl 12:01 0:07 redis-server *:7001 [cluster]
root 15379 0.0 0.0 41876 3656 ? Ssl 12:01 0:07 redis-server *:7002 [cluster]
root 15386 0.0 0.0 41876 3700 ? Ssl 12:01 0:07 redis-server *:7003 [cluster]
root 15393 0.0 0.0 41876 3692 ? Ssl 12:01 0:07 redis-server *:8001 [cluster]
root 15400 0.0 0.0 41876 3644 ? Ssl 12:02 0:07 redis-server *:8002 [cluster]
root 15407 0.0 0.0 41876 3692 ? Ssl 12:02 0:07 redis-server *:8003 [cluster]
redis-trib.rb
是redis官方推出的管理redis集群的工具,集成在redis的源码src目录下,是基于redis提供的集群命令封装成简单、便捷、实用的操作工具,用于给各节点发指令创建集群、检查集群状态或给集群重新分片等。redis-trib.rb是redis作者用ruby完成的。
使用apt-get 安装的,可以在/usr/share/doc/redis-tool/
目录下找到,可以该工作集拷贝到/data/redis-cluster/
下
redis-trib.rb
是ruby语言开发的,因此需要安装ruby环境
# 安装ruby
sudo apt-get install ruby
# 拷贝redis-trib.rb
sudo cp /usr/share/doc/redis-tools/examples/redis-trib.rb /data/redis-cluster/
sudo ./redis-trib.rb create --replicas 1 10.0.2.8:7001 10.0.2.8:7002 10.0.2.8:7003 10.0.2.8:8001 10.0.2.8:8002 10.0.2.8:8003
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
10.0.2.8:7001
10.0.2.8:7002
10.0.2.8:7003
Adding replica 10.0.2.8:8002 to 10.0.2.8:7001
Adding replica 10.0.2.8:8003 to 10.0.2.8:7002
Adding replica 10.0.2.8:8001 to 10.0.2.8:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 5f54805f02b6666589ed7f014b454555fba42d62 10.0.2.8:7001
slots:0-5460 (5461 slots) master
M: bfb4b4d0b909e13fd3171cc38afac715dc952078 10.0.2.8:7002
slots:5461-10922 (5462 slots) master
M: e851101f2f61d5fec8550cecc7e5708683727d7f 10.0.2.8:7003
slots:10923-16383 (5461 slots) master
S: 1f758f3dcca92e3694f9b4dfd35733eb2109f9f0 10.0.2.8:8001
replicates 5f54805f02b6666589ed7f014b454555fba42d62
S: c41e95ad470d5377cdeac57079d9b50fb070aba9 10.0.2.8:8002
replicates bfb4b4d0b909e13fd3171cc38afac715dc952078
S: 3349f8e30c1267c99e4e64377060fb84605b4a3c 10.0.2.8:8003
replicates e851101f2f61d5fec8550cecc7e5708683727d7f
Can I set the above configuration? (type 'yes' to accept):
这里用的命令是create,因为我们需要创建一个新的集群。选项”–replicas 1”表示每个主节点需要一个从节点。其他参数就是需要加入这个集群的Redis实例的地址。
输入yes后
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join..
>>> Performing Cluster Check (using node 10.0.2.8:7001)
M: 5f54805f02b6666589ed7f014b454555fba42d62 10.0.2.8:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: c41e95ad470d5377cdeac57079d9b50fb070aba9 10.0.2.8:8002
slots: (0 slots) slave
replicates bfb4b4d0b909e13fd3171cc38afac715dc952078
S: 1f758f3dcca92e3694f9b4dfd35733eb2109f9f0 10.0.2.8:8001
slots: (0 slots) slave
replicates 5f54805f02b6666589ed7f014b454555fba42d62
M: bfb4b4d0b909e13fd3171cc38afac715dc952078 10.0.2.8:7002
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: 3349f8e30c1267c99e4e64377060fb84605b4a3c 10.0.2.8:8003
slots: (0 slots) slave
replicates e851101f2f61d5fec8550cecc7e5708683727d7f
M: e851101f2f61d5fec8550cecc7e5708683727d7f 10.0.2.8:7003
slots:10923-16383 (5461 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
我们创建的集群有3个主节点和3个从节点。
集群会被配置并彼此连接好,意思是各节点实例被引导彼此通话并最终形成集群。16384个哈希槽都被主节点正常服务着。
$ redis-cli -c -p 7001
# 这里要加上 -c这个参数,如果不加,当key所在的slots槽在别的redis节点时,会返回`MOVED <slots No.> <ip> <port>`。
# 加上-c后,会自动切换去别相关的连接
# 查看redis集群各节点
redis> cluster nodes
sudo kill <7001pid>
# 8001迅速补上