Redis集群
Redis集群实现了对Redis的水平扩容,即启动N个Redis节点,将整个数据库分布存储到这N个 节点中,每个节点存储总数据量的N分之一,Redis集群通过分区来提供一定程度上的 可用性,即使集群中有一部分的节点失效或者无法进行通讯,集群仍然可以继续处理命令请求.
Redis集群搭建步骤
1、安装Ruby环境.
执行yum install ruby
执行yum install rubygems
2、准备6个Redis实例(三主三从),dump目录是为了保存所有的RDB文件,log目录是为了保存所有的日志文件.
3、redis-6379.conf配置文件(6380/6381/6389/6390/6391与6379配置文件一致,只需要修改一下相应的端口即可).
// 引用外部的redis.conf(redis.conf配置文件是Redis原生的配置文件)
include /usr/local/myredis/bin/redis.conf
// 开启保护模式
protected-mode no
// 指定端口
port 6379
// 允许后台启动Redis服务
daemonize yes
// 指定日志文件位置
logfile "/usr/local/myredis/bin/log/redis-6379.log"
// 指定RDB文件名称
dbfilename "dump-6379.rdb"
// 指定RDB文件的路径
dir "/usr/local/myredis/bin/dump"
// 指定pid文件
pidfile "/var/run/redis_6379.pid"
// 开启集群
cluster-enabled yes
// 指定节点配置文件
cluster-config-file nodes-6379.conf
// 设置节点超时时间(ms),超过此时间节点将自动进行主从切换
cluster-node-timeout 15000
4、启动6个Redis实例,一定要确保启动6个实例之后生成了对应的nodexx.conf文件
5、将六个节点合成一个集群
创建redis集群命令(三主三从,一个主对应一个从,注意redis-5.0.0版本开始才支持--cluster,之前的版本会报错Unrecognized option or bad number of args for:--cluster
./redis-cli --cluster create
192.168.229.129:6379 192.168.229.129:6380
192.168.229.129:6381 192.168.229.129:6389
192.168.229.129:6390 192.168.229.129:6391 --cluster-replicas 1
如果配置项cluster-enabled的值不为yes,则执行时会报错[ERR] Node 192.168.229.128:6381 is not configured as a cluster node.这个时候需要先将cluster-enabled的值改为yes,然后重启redis-server进程,之后才可以重新执行redis-cli创建集群.
redis-cli的参数说明:
1、create
表示创建一个redis集群。
2、--cluster-replicas 1
表示为集群中的每一个主节点指定一个从节点,即一比一的复制.
// 合并成功后的6个节点
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.229.129:6390 to 192.168.229.129:6379
Adding replica 192.168.229.129:6391 to 192.168.229.129:6380
Adding replica 192.168.229.129:6389 to 192.168.229.129:6381
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
// 6379是master,对应的ID为 c78230ccc7f24f6722a6c8bab99c9bf1c3919cbd
M: c78230ccc7f24f6722a6c8bab99c9bf1c3919cbd 192.168.229.129:6379
slots:[0-5460] (5461 slots) master
// 6380是master,对应的ID为 1c2ec35156832a01bbe685232c2004c8dde40b27
M: 1c2ec35156832a01bbe685232c2004c8dde40b27 192.168.229.129:6380
slots:[5461-10922] (5462 slots) master
// 6381是master,对应的ID为 5f453cb9cddde68334fe4b704b0fcda69b8e93d9
M: 5f453cb9cddde68334fe4b704b0fcda69b8e93d9 192.168.229.129:6381
slots:[10923-16383] (5461 slots) master
// 根据ID可以看出6389是6380的从机
S: 6e35fe94bdb42f4843d9489c83b1c902cd0d8040 192.168.229.129:6389
replicates 1c2ec35156832a01bbe685232c2004c8dde40b27
// 根据ID可以看出6390是6381的从机
S: 5002e820bfcecd3f36c82c2f0194ca981ba3ad71 192.168.229.129:6390
replicates 5f453cb9cddde68334fe4b704b0fcda69b8e93d9
// 根据ID可以看出6391是6379的从机
S: 2e48161308203ea729d36642b5c8d1f0f61c154a 192.168.229.129:6391
replicates c78230ccc7f24f6722a6c8bab99c9bf1c3919cbd
Can I set the above configuration? (type 'yes' to accept): 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 192.168.229.129:6379)
M: c78230ccc7f24f6722a6c8bab99c9bf1c3919cbd 192.168.229.129:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: 1c2ec35156832a01bbe685232c2004c8dde40b27 192.168.229.129:6380
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 6e35fe94bdb42f4843d9489c83b1c902cd0d8040 192.168.229.129:6389
slots: (0 slots) slave
replicates 1c2ec35156832a01bbe685232c2004c8dde40b27
M: 5f453cb9cddde68334fe4b704b0fcda69b8e93d9 192.168.229.129:6381
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: 2e48161308203ea729d36642b5c8d1f0f61c154a 192.168.229.129:6391
slots: (0 slots) slave
replicates c78230ccc7f24f6722a6c8bab99c9bf1c3919cbd
S: 5002e820bfcecd3f36c82c2f0194ca981ba3ad71 192.168.229.129:6390
slots: (0 slots) slave
replicates 5f453cb9cddde68334fe4b704b0fcda69b8e93d9
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
6、登录客户端.
redis-cli -h 192.168.229.129 -c -p 6379
7、测试
192.168.229.128