【Docker】²集群版redis

> docker下面所有操作可在一台机器上操作

> 我们这里拉去redis的6.0.8版本

docker pull redis:6.0.8

目录

1.redis三主三从配置

1.1新建六个docker实例

1.2进入容器r1为6台机器构建集群关系

1.3.链接进入r1作为切入点,查看集群状态

2.主从切换迁移案例

2.1数据读写存储

2.2容错切换迁移

3.主扩容案例

3.1新建6387,6388节点+启动

3.2进入r7,将新增7作为master节点加入原集群

3.3重新分派槽号

3.4为主节点6387分配从节点6388

4.主缩容案例

4.1从集群中将4号从节点6388删除

4.2将6387的槽号清空,重新分配。这里将清出来的槽号都给6381


1.redis三主三从配置

1.1新建六个docker实例

# 新建6个docker容器redis实例
docker run  -d --name r1 --net host --privileged=true -v /data/redis/share/redis/r1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381

docker run  -d --name r2 --net host --privileged=true -v /data/redis/share/redis/r2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382

docker run  -d --name r3 --net host --privileged=true -v /data/redis/share/redis/r3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383

docker run  -d --name r4 --net host --privileged=true -v /data/redis/share/redis/r4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384

docker run  -d --name r5 --net host --privileged=true -v /data/redis/share/redis/r5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385

docker run  -d --name r6 --net host --privileged=true -v /data/redis/share/redis/r6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386

##命令分步解释
docker run         #创建并运行docker实例
-- name r1         #容器名字
--net host         #使用宿主机的ip和端口,默认
--privileged=true  #获取宿主机root权限
-v /data/redis/share/r1:/data   #容器卷,宿主机地址:docker内部地址
redis:6.0.8            #redis镜像和版本号
--cluster-enabled yes  #开启redis集群
--appendonly yes       #开启持久化
--port 6381            #redis端口号

1.2进入容器r1为6台机器构建集群关系

# 进入容器
docker exec -it r1 bash

# 构建主从关系(填自己主机ip)
redis-cli --cluster create 192.168.171.243:6381 192.168.171.243:6382 192.168.171.243:6383 192.168.171.243:6384 192.168.171.243:6385 192.168.171.243:6386 --cluster-replicas 1

## 命令解释
--cluster-replicas 1 表示为每个master创建一个slave节点

#每次配置都会不一样
M  S
1  6
2  4
3  5 

1.3.链接进入r1作为切入点,查看集群状态

docker exec -it r1 bash
redis-cli -p 6381
cluster info
cluster nodes

2.主从切换迁移案例

原理:每个主节点将自己的槽号匀出一点分给新加入的节点

2.1数据读写存储

# 防止路由失效加参数-c
docker exec -it r1 bash
redis-cli -p 6381 -c #会根据槽数范围发生变化

# 查看各个节点的槽数范围
redis-cli --cluster check 192.168.171.243:6381

2.2容错切换迁移

# 主6391和从机切换,先停止主机6381
docker stop r1
# 在redis内部查看redis-cli -p 6382 -c
# 发现 6381宕机了,6386上位成为了新的master

# 再次还原之前三主三从
docker start r1

# 查看集群状态
redis-cli -p 6382 -c
# 发现 r1变成了slave,从机r6还是master

3.主扩容案例

3.1新建6387,6388节点+启动

# 新建7,8
docker run -d --name r7 --net host --privileged=true -v /data/redis/share/redis/r7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name r8 --net host --privileged=true -v /data/redis/share/redis/r8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388

# 查看7, 8
docker ps

3.2进入r7,将新增7作为master节点加入原集群

# 进入r7
docker exec -it r7 bash

# 将r7加入集群
redis-cli --cluster add-node 192.168.171.243:6387 192.168.171.243:6381

# 查看集群情况
redis-cli --cluster check 192.168.171.243:6381

3.3重新分派槽号

Redis的哈希槽分区解决均匀分配问题 :一个集群只能有16384个槽,redis集群会根据节点数量大致均等的将哈希槽映射到新加入的节点

我们这里新增一台就变成四主:16384/4=4096

# 重新分派槽号
redis-cli --cluster reshard 192.168.171.243:6381

#######
How many slots do you want to move (from 1 to 16384)? 4096
what is the receiving node ID? 6387的ID
Source node #1:all

3.4为主节点6387分配从节点6388

# 检查集群情况
redis-cli --cluster check 192.168.171.243:6381

# 为主节点6387分配从节点6388
redis-cli --cluster add-node 192.168.171.243:6388 192.168.171.243:6387 --cluster-slave --cluster-master-id 主节点ID

# 再次检查集群情况,完成主扩容
redis-cli --cluster check 192.168.171.243:6381

4.主缩容案例

目的:6387和6388下线

4.1从集群中将4号从节点6388删除

# 命令:redis-cli --cluster del-node ip:从机端口 从机6388节点ID
redis-cli --cluster del-node 192.168.171.243:6388 6388节点id

# 检查一下发现,6388被删除了,只剩下7台机器了
redis-cli --cluster check 192.168.171.243:6382

4.2将6387的槽号清空,重新分配。这里将清出来的槽号都给6381

redis-cli --cluster reshard 192.168.171.243:6381

######
How many slots do you want to move (from 1 to 16384)? 4096
what is the receiving node ID? 6381的ID(由他接手空出来的槽号)
Source node #1:6387的节点id(告知删除那个)
Source node #2:done
yes

# 检查集群
# 将6387删除。命令:redis-cli --cluster del-node ip:端口 6387节点ID
redis-cli --cluster del-node 192.168.171.243:6387 6387节点ID

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Docker中部署Redis集群,可以使用Redis官方提供的Docker镜像,并使用Docker Compose来编排容器。以下是一个简单的Docker Compose文件示例: ``` version: '3' services: redis-1: image: redis command: redis-server --port 6379 --cluster-enabled yes --cluster-config-file /data/nodes.conf --cluster-node-timeout 5000 volumes: - ./redis-1:/data ports: - "6379" redis-2: image: redis command: redis-server --port 6380 --cluster-enabled yes --cluster-config-file /data/nodes.conf --cluster-node-timeout 5000 volumes: - ./redis-2:/data ports: - "6380" redis-3: image: redis command: redis-server --port 6381 --cluster-enabled yes --cluster-config-file /data/nodes.conf --cluster-node-timeout 5000 volumes: - ./redis-3:/data ports: - "6381" redis-4: image: redis command: redis-server --port 6382 --cluster-enabled yes --cluster-config-file /data/nodes.conf --cluster-node-timeout 5000 volumes: - ./redis-4:/data ports: - "6382" redis-5: image: redis command: redis-server --port 6383 --cluster-enabled yes --cluster-config-file /data/nodes.conf --cluster-node-timeout 5000 volumes: - ./redis-5:/data ports: - "6383" redis-6: image: redis command: redis-server --port 6384 --cluster-enabled yes --cluster-config-file /data/nodes.conf --cluster-node-timeout 5000 volumes: - ./redis-6:/data ports: - "6384" ``` 在这个示例中,我们定义了6个Redis容器,每个容器都运行在不同的端口上,并使用相同的配置文件。我们还将每个容器的数据卷映射到本地文件系统上,以便在容器重启后保留数据。 要启动Redis集群,请按照以下步骤操作: 1. 在本地创建一个目录,例如“redis-cluster”。 2. 将上面的Docker Compose文件保存为“docker-compose.yml”并将其放入该目录中。 3. 打开终端并导航到该目录。 4. 运行“docker-compose up”命令以启动Redis容器。 5. 运行以下命令以创建Redis集群: ``` docker exec -it redis-1 redis-cli --cluster create \ 172.20.0.2:6379 \ 172.20.0.3:6379 \ 172.20.0.4:6379 \ 172.20.0.5:6379 \ 172.20.0.6:6379 \ 172.20.0.7:6379 \ --cluster-replicas 1 ``` 在这个命令中,我们使用“redis-cli”工具创建了一个6个节点的Redis集群,并将每个节点的IP地址和端口号传递给命令。我们还指定了一个副本,以便在主节点故障时自动切换到备份节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值