分片集群
有了主从、有了哨兵,解决了高可用和高并发读的问题。但是,即便如此,仍然有两个问题没有解决。
第一,是海量数据的储存问题。
第二,是高并发写的问题。
那么,使用分片集群,便可以解决这样的两个问题。
对于一个分片集群来说,集群中有多个master,每个master保存不一样的数据,对于每个master来说,有多个slave节点。
master之间可以通过ping来监测彼此的健康状态。
客户端发出的对于redis的请求,可以访问集群的任意节点,最终,都会被转发到正确的节点中去。
对于一个分片集群来说,一个节点就是一个运行在集群模式下的Redis服务器。启动Redis服务器时,通过判断cluster-enabled选项,选择是否开启集群模式。(Yes开启集群,No则单机模式普通服务器)
#开启redis的集群模式
cluster-enabled yes
#集群内节点之间支持最长响应时间
cluster-node-timeout 15000
#配置集群模式下的配置文件
cluster-config-file nodes-6379.conf
每个节点使用的端口各不相同,可以设置。每个节点最开始可以看做一个只有自己节点的集群,节点间通过命令相互握手,组建集群。
握手命令如下:
# 和ip为127.0.0.1,端口为6378的节点进行握手
cluster meet 127.0.0.1:6378
# 显示当前集群的节点信息
cluster nodes
分片集群的搭建与使用
此处还是采用docker的方式来进行演示分片集群的搭建与使用。
首先,还是使用redis:bullseye的镜像。
docker pull redis:bullseye
而后,于此以不挂载的方式进行搭建,挂载的方式其实也是一样的。
第一步是创建一个network网络:
docker network create redis-cluster-network
# 可以查看network的列表
docker network ls
Redis分片集群至少需要6个Redis实例,3个为主节点,3个为副本节点。
docker run -d --name redis-node-1 --net redis-cluster-network redis:bullseye redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes --port 7001
docker run -d --name redis-node-2 --net redis-cluster-network redis:bullseye redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes --port 7002
docker run -d --name redis-node-3 --net redis-cluster-network redis:bullseye redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes --port 7003
docker run -d --name redis-node-4 --net redis-cluster-network redis:bullseye redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes --port 7004
docker run -d --name redis-node-5 --net redis-cluster-network redis:bullseye redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes --port 7005
docker run -d --name redis-node-6 --net redis-cluster-network redis:bullseye redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes --port 7006
接着可以检查redis的实例是否全部启动成功:
docker ps
随后,集群需要使用IP地址来进行节点间通信,可以使用以下命令来获得每个Redis实例的IP地址:
docker ins