Redis集群

Redis集群在保证主从加哨兵的基本功能之外,还能够提升Redis存储数据的能力。

在这里插入图片描述

集群down的条件

1、有大多数的主机存活,则集群还有可能通过投票断定那个或那些主机已经fail。
2、 fail的主机至少还有一个slave存活,则可以将其启动,继续接管对应的槽。

一、创建文件夹 redis0904,所有文件和操作均在此文件夹下进行

docker-compose.yml

# docker-compose.yml
version: "3.1"
services:
  redis1:
    image: 10.0.134.175:5000/redis:5.0.9
    restart: always
    container_name: redis1
    environment:
      - TZ=Asia/Shanghai
    ports:
      - 7001:7001
      - 17001:17001
    volumes:
    #当前目录下的conf目录下redis1.conf对应容器中的redis.conf
      - ./conf/redis1.conf:/usr/local/redis/redis.conf
    command: ["redis-server","/usr/local/redis/redis.conf"]
  redis2:
    image: 10.0.134.175:5000/redis:5.0.9
    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: 10.0.134.175:5000/redis:5.0.9
    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: 10.0.134.175:5000/redis:5.0.9
    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: 10.0.134.175:5000/redis:5.0.9
    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: 10.0.134.175:5000/redis:5.0.9
    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"]  

二、创建了redis1-6文件

实例redis1文件:

# 指定redis的端口号
port 7001
# 开启Redis集群
cluster-enabled yes
# 集群信息的文件
cluster-config-file nodes-7001.conf
# 集群的对外ip地址
cluster-announce-ip 10.0.138.96
# 集群的对外port
cluster-announce-port 7001
# 集群的总线端口
cluster-announce-bus-port 17001

redis2.conf示例

# 指定redis的端口号
port 7002
# 开启Redis集群
cluster-enabled yes
# 集群信息的文件
cluster-config-file nodes-7002.conf
# 集群的对外ip地址
cluster-announce-ip 10.0.138.96
# 集群的对外port
cluster-announce-port 7002
# 集群的总线端口
cluster-announce-bus-port 17002

其他3-6同样,改一下即可

三、启动了6个Redis的节点

随便跳转到一个容器内部,使用redis-cli管理集群
启动完后检查一下,是否都处于up状态,docker ps,如果有状态是restarting,那就是conf文件有问题,检查一下,port等有没有错误

#开启容器
docker-compose up -d
#进入容器,进入哪个都可以
docker exec -it redis1 bash
#开启容器,并指定每个容器至少有1个从
redis-cli --cluster create 10.0.138.96:7001 10.0.138.96:7002 10.0.138.96:7003 10.0.138.96:7004 10.0.138.96:7005 10.0.138.96:7006 --cluster-replicas 1

在这里插入图片描述这里有3个master,3个slave

在这里插入图片描述7001的从是7006,7002的从是7004,7003的从是7005

四、进入主容器操作

#一定要加-c 代表是集群,不加就是私用
redis-cli -p 7001 -c
#进入后存、取值即可,如果redis.conf不是相同的host,需要加上 -h 127.0.0.1本机操作  redis-cli -p 7001 -h 127.0.0.1 -c
set name zs
set age 18
set gender true

在这里插入图片描述这里有一个槽的概念,最开始的图有介绍,Redis默认有16384个槽,当存数据时,它会经过某个函数的的处理,然后对16384进行取余,看他的值,然后放在哪个槽中。
我们这里有3个主,所有会均分3个槽,根据图可以看到系统的分配
在这里插入图片描述7001,是0-5460, 7002是5461-10922,7003是10923-16383

关于系统处理的个人猜想:系统会根据key的hash值,对16384取余,根据余数把它放在对应的容器内。16384换算成二进制是:0100 0000 0000 0000,他应该是进行位运算。

五、 取值

在这里插入图片描述

六、测试down一个,看哨兵是否能上位

#停掉redis1
docker stop redis1
#进入redis2
docker exec -it redis2 bash
#查看redis2的nodes.conf文件
more nodes.conf

在这里插入图片描述根据图可以看到,redis6已结成功上位
我们进入redis6进行验证,看它是否有写的权限

docker exec -it redis6 bash

set class java

在这里插入图片描述
写入成功,证明redis6已经成功上位,成了主。

七、重启redis1,看能否恢复

#开启redis1
docker start redis1
#进入redis6
docker exec -it redis1 bash
#一定要加-c 代表是集群,不加就是私用
redis-cli -p 7001 -c
set sex male

在这里插入图片描述我们也可以通过nodes.conf文件查看
在这里插入图片描述redis6还是master,redis1是slave
说明redis1想上位,还要等redis1故障down掉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值