但是如果数据量过大,特别是写数据量过大,这个时候一个主节点是不够的,需要进行集群搭建↓
Redis集群在保证主从加哨兵的基本功能之外,还能够提升Redis存储数据的能力↓
配置上图的集群,可以按照以下步骤配置:
停止并删除所有容器,创建docker_redis_cluster文件夹,
里面编辑docker-compose.yml文件:
version: "3.1"
services:
redis1:
image: daocloud.io/library/redis:5.0.7
restart: always
container_name: redis1
environment:
- TZ=Asia/Shanghai
ports:
- 7001:7001
- 17001:17001
volumes:
- ./conf/redis1.conf:/usr/local/redis/redis.conf
command: ["redis-server","/usr/local/redis/redis.conf"]
redis2:
image: daocloud.io/library/redis:5.0.7
restart: always
container_name: redis2
environment:
- TZ=Asia/Shanghai
ports:
- 7002:7002
- 17002:17002
volumes:
- ./conf/redis2.conf:/usr/local/redis/redis.conf
command: ["redis-server","/usr/local/redis/redis.conf"]
redis3:
image: daocloud.io/library/redis:5.0.7
restart: always
container_name: redis3
environment:
- TZ=Asia/Shanghai
ports:
- 7003:7003
- 17003:17003
volumes:
- ./conf/redis3.conf:/usr/local/redis/redis.conf
command: ["redis-server","/usr/local/redis/redis.conf"]
redis4:
image: daocloud.io/library/redis:5.0.7
restart: always
container_name: redis4
environment:
- TZ=Asia/Shanghai
ports:
- 7004:7004
- 17004:17004
volumes:
- ./conf/redis4.conf:/usr/local/redis/redis.conf
command: ["redis-server","/usr/local/redis/redis.conf"]
redis5:
image: daocloud.io/library/redis:5.0.7
restart: always
container_name: redis5
environment:
- TZ=Asia/Shanghai
ports:
- 7005:7005
- 17005:17005
volumes:
- ./conf/redis5.conf:/usr/local/redis/redis.conf
command: ["redis-server","/usr/local/redis/redis.conf"]
redis6:
image: daocloud.io/library/redis:5.0.7
restart: always
container_name: redis6
environment:
- TZ=Asia/Shanghai
ports:
- 7006:7006
- 17006:17006
volumes:
- ./conf/redis6.conf:/usr/local/redis/redis.conf
command: ["redis-server","/usr/local/redis/redis.conf"]
redis.conf 配置文件↓
# redis.conf
# 指定redis的端口号
port 7001
# 开启Redis集群
cluster-enabled yes
# 集群信息的文件
cluster-config-file nodes-7001.conf
# 集群的对外ip地址
cluster-announce-ip 192.168.200.129
# 集群的对外port
cluster-announce-port 7001
# 集群的总线端口
cluster-announce-bus-port 17001
启动容器:
启动了6个Redis的节点
由于redis集群是无中心的,随便跳转到一个容器内部,使用redis-cli命令增加--cluster参数来进行集群命令,yes↓
redis-cli --cluster create 192.168.200.xxx:7001 192.168.200.xxx:7002 192.168.200.xxx:7003 192.168.200.xxx:7004 192.168.200.xxx:7005 192.168.200.xxx:7006 --cluster-replicas 1
另外关于更多的命令可以用help帮助提示
redis集群扩展:
为什么至少三个哨兵_Redis集群为什么是三个以上_weixin_39712016的博客-CSDN博客
redis集群为什么最少需要6个节点-Redis-PHP中文网
京东面试题(Redis):为啥RedisCluster设计成16384个槽 - 知乎
为什么redis cluster至少需要三个主节点? - 知乎
Java连接Redis集群
使用JedisCluster对象连接Redis集群
@Test
public void testCluster(){
Set<HostAndPort> nodes = new HashSet<HostAndPort>();//搞一个集合存储主机和端口对象
//此处ip端口与集群中redis对应
nodes.add(new HostAndPort("192.168.200.129",7001));
nodes.add(new HostAndPort("192.168.200.129",7002));
nodes.add(new HostAndPort("192.168.200.129",7003));
nodes.add(new HostAndPort("192.168.200.129",7004));
nodes.add(new HostAndPort("192.168.200.129",7005));
nodes.add(new HostAndPort("192.168.200.129",7006));
//主要创建JedisCluster集群对象,然后查看有参构造,缺啥补啥即可
JedisCluster jedisCluster = new JedisCluster(nodes);
String value = jedisCluster.get("a");//用集群对象来操作命令
System.out.println(value);//a
}
版权声明:本文为m0_58574228原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。