10_36_Docker【实战】—Redis集群部署实战【部署方式采用:分片+高可用+负载均衡】

Redis集群部署实战

部署方式采用:分片+高可用+负载均衡

在这里插入图片描述

  • 三个主机,三个从机(用来做备份)
  • 当主机挂了,对应得从机就要替代原来得主机

Redis是一个单独的集群——集群,我们就要建立自己的网卡(Redis的网卡)

# 创建网卡【步骤一】
docker network create redis --subnet 172.38.0.0/16

### 过程:
可以先将原有容器都删除来进行测试(可选)
docker rm -f $(docker ps -aq)

执行命令后查看网络中是否有我们创建好的redis服务了
docker network ls

在这里插入图片描述

### 过程:
也可以查看网络的具体信息
docker network inspect redis
	就可以看到我们自己分配的网络,低下是没有一个网络的

在这里插入图片描述

redis要写配置文件,我们用脚本一次性写好配置文件

  • 启动六个容器很慢——使用shell脚本快速创建,通过脚本创建六个redis配置
# 通过脚本创建六个redis配置
for port in $(seq 1 6); \
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >/mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done

### 解释:

在这里插入图片描述

测试结果:

在这里插入图片描述

redis配置好后,需要去一个一个启动

# 一个一个开启服务【容器】
docker run -p 6371:6379 -p 16371:16379 --name redis-1 \
-v /mydata/redis/node-1/data:/data \
-v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

### 解释
-p 6371:6379
	两个端口号做映射
	6371是外部访问
--name redis-1
	命名为 redis-1
--net redis
	网络使用我们redis的网络
-d
	后台运行
--ip 172.38.0.11
	绑定的ip号
redis:5.0.9-alpine3.11
	使用的redis版本
	如果没有这个镜像,运行命令会自动下载【注意】
redis-server /etc/redis/redis.conf
	通过redis.conf来启动

在这里插入图片描述

# 测试服务是否启动了
docker ps

在这里插入图片描述

# 同理,我们将其余的都开启
#启动:redis-2服务
docker run -p 6372:6379 -p 16372:16379 --name redis-2 \
-v /mydata/redis/node-2/data:/data \
-v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

### 解释:
容器外的6372映射到容器内的6379【容器内不变】

#启动:redis-3服务
docker run -p 6373:6379 -p 16373:16379 --name redis-3 \
-v /mydata/redis/node-3/data:/data \
-v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

#启动:redis-4服务
docker run -p 6374:6379 -p 16374:16379 --name redis-4 \
-v /mydata/redis/node-4/data:/data \
-v /mydata/redis/node-4/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.14 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

#启动:redis-5服务
docker run -p 6375:6379 -p 16375:16379 --name redis-5 \
-v /mydata/redis/node-5/data:/data \
-v /mydata/redis/node-5/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.15 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

#启动:redis-6服务
docker run -p 6376:6379 -p 16376:16379 --name redis-6 \
-v /mydata/redis/node-6/data:/data \
-v /mydata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.16 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
# 测试服务是否启动了
docker ps

在这里插入图片描述

开始创建集群了

我们先随便进入一个容器(redis-1)

# 进入redis-1容器
docker exec -it redis-1 /bin/sh

### 注意:
	redis中没有 /bin/bash 命令,所以用的是 /bin/sh命令【效果是一样的】
	进入后默认的pwd是 /data目录
	
### 查看一下/data目录下:
	appendonly.aof:aof配置——持久化
	nodes.conf:节点配置

在这里插入图片描述

连接集群的配置

# 这时候我们就在/data目录下创建我们的集群
/data # redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1

### 解释:
/data # 	:进入redis-1容器的目录
redis-cli	:用来连接
--cluster	:通过什么方式连接【-集群的方式】
create		:集群就需要创建
需要写端口号,不然连接不上
--cluster-replicas 1	:集群的切片

在这里插入图片描述

# 连接集群的配置文件内容

/data # redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38
.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.38.0.15:6379 to 172.38.0.11:6379
Adding replica 172.38.0.16:6379 to 172.38.0.12:6379
Adding replica 172.38.0.14:6379 to 172.38.0.13:6379
M: 163c0747779d2f629f5e9d236dce80740bd7c747 172.38.0.11:6379
   slots:[0-5460] (5461 slots) master
M: 8be0dbf6887f9abd03c81630a292993624316a08 172.38.0.12:6379
   slots:[5461-10922] (5462 slots) master
M: d48856d8dcdec93017c14c4a6a03ab2ee4cd53d6 172.38.0.13:6379
   slots:[10923-16383] (5461 slots) master
S: 9c45a8c19173f82fd170f4b52b4e18e2b4942dc1 172.38.0.14:6379
   replicates d48856d8dcdec93017c14c4a6a03ab2ee4cd53d6
S: 698fb424a8f2ce3246f8f684001b16f4c3526039 172.38.0.15:6379
   replicates 163c0747779d2f629f5e9d236dce80740bd7c747
S: e9f3295c0cd99747e5df6eb53e5b74adaf43d41f 172.38.0.16:6379
   replicates 8be0dbf6887f9abd03c81630a292993624316a08
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
...
>>> Performing Cluster Check (using node 172.38.0.11:6379)
M: 163c0747779d2f629f5e9d236dce80740bd7c747 172.38.0.11:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 9c45a8c19173f82fd170f4b52b4e18e2b4942dc1 172.38.0.14:6379
   slots: (0 slots) slave
   replicates d48856d8dcdec93017c14c4a6a03ab2ee4cd53d6
S: e9f3295c0cd99747e5df6eb53e5b74adaf43d41f 172.38.0.16:6379
   slots: (0 slots) slave
   replicates 8be0dbf6887f9abd03c81630a292993624316a08
M: d48856d8dcdec93017c14c4a6a03ab2ee4cd53d6 172.38.0.13:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: 8be0dbf6887f9abd03c81630a292993624316a08 172.38.0.12:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 698fb424a8f2ce3246f8f684001b16f4c3526039 172.38.0.15:6379
   slots: (0 slots) slave
   replicates 163c0747779d2f629f5e9d236dce80740bd7c747
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

测试是否搭建成功

/data # redis-cli -c

### 解释:
/data #	:进入redis-1容器的目录
redis-cli	:光这个连接的是单机
redis-cli -c	:加上连接的是集群

127.0.0.1:6379> cluster info

### 解释:
查看集群信息

在这里插入图片描述

127.0.0.1:6379> cluster nodes

### 解释:
查看集群节点

在这里插入图片描述

# 测试,set一个值,看容器中是否有值分配
127.0.0.1:6379> set a b

在这里插入图片描述

# 所以按照集群概念,当第三个主机挂了,他的从机也会存有相应的值——【体现了高可用】

# 测试,将第三个主机(redis-3)停掉后,看从机是否还存有相应的值
## 1、先从开一个窗口,然后将redis-3停掉

在这里插入图片描述

## 2、这时候进入一个容器然后get一下a,看能否得到对应的值
	* 但是不能进入停止的主机中去get,这样无效
127.0.0.1:6379> get a
### 注:如果以前主机停了就没有值了,但是现在集群主机停了,从机判断之后会自动替代主机

在这里插入图片描述

127.0.0.1:6379> cluster nodes

### 解释:
查看集群节点

在这里插入图片描述

小结

使用docker搭建redis集群完成
我们使用了docker技术之后,所有技术都会慢慢的变得简单起来!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂野小白兔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值