使用docker搭建redis集群环境

1. 准备reids镜像

docker pull redis
docker images

REPOSITORY              TAG       IMAGE ID       CREATED        SIZE
redis                   latest    87c26977fd90   3 weeks ago    113MB

2. 创建自定义网络
为方便各redis容器之间的通信连接,可以使用自定义网络:

docker network create redisnet --subnet 172.18.0.0/16
7c54ac31eab5af3166ff83d72a8f15d79a5ef89cd64cb46441b953779b588662

docker network ls
NETWORK ID     NAME       DRIVER    SCOPE
6e0195b65225   bridge     bridge    local
62cd016ed66a   host       host      local
fc650e2a675e   none       null      local
7c54ac31eab5   redisnet   bridge    local

3. 创建redis集群目录,或者编写脚本创建
目录和ip记得修改成自己的!
在这里插入图片描述
参数解析:

参数名含义参数值
portredis 端口号端口号,6379
bindip 访问白名单ip , 0.0.0.0表示任意ip
cluster-enabled是否开启集群模式yes/no
cluster-config-file请注意,尽管有此选项的名称,但这不是用户可编辑的配置文件,而是Redis群集节点每次发生更改时自动保留群集配置(基本上为状态)的文件,以便能够 在启动时重新读取它。总之就是照着写,不用管,是redis自己用的nodes.conf
cluster-node-timeoutRedis群集节点可以不可用的最长时间,而不会将其视为失败。 如果主节点超过指定的时间不可达,它将由其从属设备进行故障切换毫秒数
cluster-announce-ipredis端口号
bind集群节点的ip。个人理解是,集群中的node信息,存的就是这个ip。客户端就是在选择好目标节点后会根据这个ip向目标节点发送命令。所以,如果要公网访问,那这里的ip要填写成公网IP地址。如果是局域网访问,那就填局域网ip即可。总之,就是要填写客户端能够到达的ipip地址
cluster-announce-port集群节点的端口号端口号
cluster-announce-bus-portRedis集群通过总线进行节点间的数据交换,每个Redis节点都会开辟一个额外端口与总线进行TCP连接,以二进制形式进行数据交换一般是Redis port加上10000
appendonly是否开启redis的持久化yes/no

每个节点的redis.conf都得添加,对应配置文件如下:

# ip,redis端口和集群端口改成自己的!
cat 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.18.0.11
cluster-announce-port 6381
cluster-announce-bus-port 16381
appendonly yes

自己本地创建的目录结构如下,3个主节点3个从节点共6个文件目录,红框框住的是redis集群运行起来后自动添加的文件(还会生成 dump.rdb 文件,由于时间关系没等到生成该文件),这些文件不用管,只需要配置好redis.conf 即可。
在这里插入图片描述
4. 启动redis镜像,创建docker容器

docker run -p 6381:6379 -p 16381:16379 --name redis01 -v /opt/redis/redis-cluster/redis81/data:/data -v /opt/redis/redis-cluster/redis81/conf/redis.conf:/etc/redis/redis.conf -d -it --net redisnet --ip 172.18.0.11 redis redis-server /etc/redis/redis.conf;
docker run -p 6382:6379 -p 16382:16379 --name redis02 -v /opt/redis/redis-cluster/redis82/data:/data -v /opt/redis/redis-cluster/redis82/conf/redis.conf:/etc/redis/redis.conf -d -it --net redisnet --ip 172.18.0.12 redis redis-server /etc/redis/redis.conf;
docker run -p 6383:6379 -p 16383:16379 --name redis03 -v /opt/redis/redis-cluster/redis83/data:/data -v /opt/redis/redis-cluster/redis83/conf/redis.conf:/etc/redis/redis.conf -d -it --net redisnet --ip 172.18.0.13 redis redis-server /etc/redis/redis.conf;
docker run -p 6384:6379 -p 16384:16379 --name redis04 -v /opt/redis/redis-cluster/redis84/data:/data -v /opt/redis/redis-cluster/redis84/conf/redis.conf:/etc/redis/redis.conf -d -it --net redisnet --ip 172.18.0.14 redis redis-server /etc/redis/redis.conf;
docker run -p 6385:6379 -p 16385:16379 --name redis05 -v /opt/redis/redis-cluster/redis85/data:/data -v /opt/redis/redis-cluster/redis85/conf/redis.conf:/etc/redis/redis.conf -d -it --net redisnet --ip 172.18.0.15 redis redis-server /etc/redis/redis.conf;
docker run -p 6386:6379 -p 16386:16379 --name redis06 -v /opt/redis/redis-cluster/redis86/data:/data -v /opt/redis/redis-cluster/redis86/conf/redis.conf:/etc/redis/redis.conf -d -it --net redisnet --ip 172.18.0.16 redis redis-server /etc/redis/redis.conf;

在这里插入图片描述
5. 创建redis集群

redis-cli --cluster create 172.18.0.11:6379 172.18.0.12:6379 172.18.0.13:6379 172.18.0.14:6379 172.18.0.15:6379 172.18.0.16:6379 --cluster-replicas 1

在这里插入图片描述
6. 进入到容器内,连接redis集群,正常使用

# 先进入容器
docker exec -it redis01 /bin/bash

# 在连接redis集群, "-c" 表示连接集群
redis-cli -c -h 172.18.0.11 -p 6379

# 查看集群信息,三种都可以
172.18.0.11:6379> cluster info
172.18.0.11:6379> cluster nodes
172.18.0.11:6379> info replication

# 使用redis
172.18.0.11:6379> keys *
(empty array)

7. 如何删除已创建的redis集群?
 7.1 直接停止并删除redis容器

docker rm $(docker ps -aq)

 7.2 删除宿主机的所有redis节点下的appendonly.aof 文件、dump.rdb 文件以及nodes.conf 文件
在这里插入图片描述
 7.3 重新拉起redis容器,并创建集群

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值