主从结构添加哨兵能够解决读写分离和单点故障高可用
但是如果数据量过大,特别是写数据量过大,这个时候一个主节点是不够的,需要进行集群搭建↓
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(){ Setnodes = new HashSet ();//搞一个集合存储主机和端口对象 //此处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 }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)