1、集群介绍
1.1、为什么需要集群
在之前的哨兵当中,一旦主服务 master 挂掉了,就势必会导致一段时间内的数据写不进去了,当并发量很大的时候这势必是一个比较大的问题。集群就说为了解决这个问题而诞生的。
1.2、什么是集群
- 由于数据量过大,单个Master主从集难以承担,因此需要对多个主从集进行集群,形成水平扩展每个主从集只负责存储整个数据集的一部分,这就是Redis的集群,其作用是提供在多个Redis节点间共享数据的程序集。
- Redis集群是一个提供在多个Redis节点间共享数据的程序集
- Redis集群可以支持多个Master
1.3、集群作用
- Redis集群支持多个Master,每个Master又可以挂载多个Slave
- 由于Cluster自带Sentinel的故障转移机制,内置了高可用的支持,无需再去使用哨兵功能
- 客户端和Redis的节点连接,不再需要连接集群中所有节点,只需连接集群中的任意一个可用节点即可(一个有所有都有了)
- 槽位slot负责分配到各个物理服务节点,由对应的集群来负责维护节点、插槽和数据之间的关系
2、集群搭建
2.1、创建集群配置目录
- 在redis安装目录下,创建文件夹cluster-conf,用于存放集群配置文件
-
cd /usr/local/redis-7.2.4 mkdir cluster-conf
-
2.2、创建配置集群配置文件
- 我们以redis.conf为原始文件,拷贝6个文件放在cluster-conf目录中(为了方便配置,最好cat命令取掉注释和空格空白行),作为集群的配置文件,在配置文件中修改端口和其他参数,我们定义6个集群节点端口分别为 7001、7002、7003、7004、7005、7006
-
1、创建并配置第一个节点redis-7001.conf
-
cp redis.conf cluster-conf/redis-7001.conf
或者
cat redis.conf | grep -v "#" | grep -v "^$" >cluster-conf/redis-7001.conf (建议)
修改配置redis-7001
cd cluster-conf/
vim redis-7001.conf
主要修改如下项:
#注释,允许远程访问
#bind 127.0.0.1 -::1
#关闭保护模式
protected-mode no
#端口
port 7001
#后台运行
daemonize yes
dbfilename dump_7001.rdb
appendfilename "appendonly_7001.aof"
并添加集群配置:
#开启集群
cluster-enabled yes
#集群的配置文件名称,不需要我们创建,redis自行维护
cluster-config-file nodes-7001.conf
#节点心跳失效的超时时间
cluster-node-timeout 15000
修改完成如下:
2、创建并配置第二个节点redis-7002.conf
拷贝redis-7001.conf ,修改端口就可以
cp redis-7001.conf redis-7002.conf
vim redis-7002.conf
3、创建并配置第三个节点redis-7003.conf
cp redis-7001.conf redis-7003.conf
修改端口
vim redis-7003.conf
4、同理创建并配置第四,第五和第六个节点redis-7004.conf、redis-7005.conf、redis-7006.conf
全部修改完毕。
2.3、启动创建的6个集群节点实例
在/usr/local/redis-7.2.4/cluster-conf下,分别启动6个服务
redis-server redis-7001.conf &
redis-server redis-7002.conf &
redis-server redis-7003.conf &
redis-server redis-7004.conf &
redis-server redis-7005.conf
redis-server redis-7006.conf &
查看6个实例是否启动
ps -ef |grep redis
2.4、创建并启动集群
现在只是开启了redis服务,并没有形成分片集群,要形成分片集群,就需要进行一下操作。
我们使用的redis是6.2.6版本的redis,对应redis5.0之后,集群管理已经集成到了redis-cli命令里面去了。
启动集群命令如下:
redis-cli --cluster create --cluster-replicas 1 192.168.0.108:7001 192.168.0.108:7002 192.168.0.108:7003 192.168.0.108:7004 192.168.0.108:7005 192.168.0.108:7006
--cluster:代表使用集群操作命令。
create:创建集群。
192.168.0.106:客户端或者程序访问的IP地址
--replicas 1:也就是设置replicas=1指一个主机提供一个备机,此时有6的接口,除以2对应就是有3个主节点,每个对应一个备机。
我们可以通过这个图,可以看到slots就是redis把主节点分配的插槽位置
这里输入yes
Can I set the above configuration? (type 'yes' to accept): yes
则会出现
[OK] All 16384 slots covered.
则说明集群组建完毕。
3、集群测试
可以连接任何一个节点,输入如下命令,进入客户端
redis-cli -p 7001 –c
在7001节点set一个值,集群会存在一个节点上;当get获的时候,又从存的节点取出。
4、集群管理
4.1、查看集群状态
redis-cli -p 7001 cluster nodes
或者
redis-cli --cluster info 127.0.0.1:7001
4.2、平衡节点的数据槽数
当槽的节点不平衡时,需要平衡槽的数量
redis-cli --cluster rebalance 127.0.0.1:7001
4.3、增加节点
首先在cluster-conf中增加集群配置文件,然后启动集群节点,通过如下命令加入到集群
先要启动节点
redis-server redis-7007.conf &
再增加节点
redis-cli --cluster add-node 192.168.0.108:7007 192.168.0.108:7001
添加7007节点到集群,7001表示存在的节点,任何一个存在的节点都可以。
4.4、迁移节点槽
redis-cli --cluster reshard 192.168.0.108:7001
4.5、删除节点
删除前需要迁移节点槽数据,有数据的节点不能删除
redis-cli --cluster del-node 192.168.0.108:7001 节点id