Docker 基础 ( 二十 ) 部署Redis集群 - 简书

以上为原文地址

一,问题

1. -bash: redis: command not found
2. Could not connect to Redis at 127.0.0.1:6379: Connection refused
3. 127.0.0.1:6379> cluster info
cluster_state:fail

方案1:

​​​​​(20200916 Solved)Docker||redis-cli Could not connect to Redis at 127.0.0.1:6379: Connection refused_漫步量化-CSDN博客

方案2:删除data目录下rdb aop node.conf文件,重新连接集群

4.关于容器的查看,关闭,启动

在Docker中重新启动已经停止的容器_weixin_34390996的博客-CSDN博客

1. 查看运行中的容器 docker ps
2. 查看所有的容器 docker ps -a
3. 进入容器 docker exec -it 容器ID /bin/bash
4. 停止所有的容器 docker stop $(docker ps -q)
5. 删除所有的容器 docker rm $(docker ps -aq)
6. 停止并删除全部 docker stop $(docker ps -q) & docker rm $(docker ps -aq)

启动容器,注意不是容器ID,是容器名称(这里是name,好像很多说容器ID,待解释)

Docker start/stop/restart 命令 | 菜鸟教程

docker start  容器name

停止容器运行

docker stop  容器name

5.创建配置,无>符号

6. 退出# 页面,用命令exit,如下

二,正文

下文为转载,请访问原文

  • 创建网卡:docker network create redis --subnet 172.36.0.0/16
[root@VM-0-6-centos ~]# docker network create redis --subnet 172.36.0.0/16
19dd16ec85ca189a1a317c809969d93e84eaf43810556dd5510f4458318bd652
  • 查看网络:docker network ls
[root@VM-0-6-centos ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
cb59eddef222   bridge    bridge    local
c86310353602   host      host      local
8e8d25d2e62d   mynet     bridge    local
1ab8f2e4028d   none      null      local
19dd16ec85ca   redis     bridge    local    //  自定义网络
  • 查看定义网络信息:docker network inspect redis
[root@VM-0-6-centos ~]# docker network inspect redis
[{"Name": "redis","Id": "19dd16ec85ca189a1a317c809969d93e84eaf43810556dd5510f4458318bd652","Created": "2021-07-04T17:04:27.961331931+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "172.36.0.0/16"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}}
]
  • 通过脚本创建六个 redis 配置
  • 172.36.0.11
[root@VM-0-6-centos ~]# for port in $(seq 1 6);\
> do \
> mkdir -p /mydata/redis/node-${port}/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.36.0.1${port}
> cluster-announce-port 6379
> cluster-announce-bus-port 16379
> appendonly yes
> EOF
> done
  • 查看目录:
[root@VM-0-6-centos ~]# cd /mydata/redis
[root@VM-0-6-centos redis]# ls
node-1  node-2  node-3  node-4  node-5  node-6
  • 查看其中一个配置信息
[root@VM-0-6-centos redis]# cd node-1
[root@VM-0-6-centos node-1]# ls
conf
[root@VM-0-6-centos node-1]# cd conf
[root@VM-0-6-centos conf]# ls
redis.conf
[root@VM-0-6-centos conf]# 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.36.0.11
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
  • 启动单个 redis 容器:
// 按格式直接复制,粘贴到命令符下
docker run -p 6371:6379 -p 16671: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.36.0.11 redis redis-server /etc/redis/redis.conf
[root@VM-0-6-centos conf]# docker run -p 6371:6379 -p 16671: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.36.0.11 redis redis-server /etc/redis/redis.conf
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
b4d181a07f80: Pull complete
86e428f79bcb: Pull complete
ba0d0a025810: Pull complete
ba9292c6f77e: Pull complete
b96c0d1da602: Pull complete
5e4b46455da3: Pull complete
Digest: sha256:7c540ceff53f0522f6b1c264d8142df08316173d103586ddf51ed91ca49deec8
Status: Downloaded newer image for redis:latest
deb3b531684ceff216644460e5957031bce49bb728cb1f851f9f383a86a5fe66
  • 或通过脚本运行六个 redis
// 按格式直接复制,粘贴到命令符下
for port in $(seq 1 6);\
do \
docker run -p 637${port}:6379 -p 1667${port}:16379 --name redis-${port} \
-v /mydata/redis/node-${port}/data:/data \
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.36.0.1${port} redis redis-server /etc/redis/redis.conf
done

注意,运行容器后,即使后面停止,删除容器了,容器依然存在,无法再次创建容器,报错如下

 怎么重启容器

[root@VM-0-6-centos ~]# for port in $(seq 1 6);\
> do \
> docker run -p 637${port}:6379 -p 1667${port}:16379 --name redis-${port} \
> -v /mydata/redis/node-${port}/data:/data \
> -v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
> -d --net redis --ip 172.36.0.1${port} redis redis-server /etc/redis/redis.conf
> done
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
b4d181a07f80: Already exists
86e428f79bcb: Already exists
ba0d0a025810: Already exists
ba9292c6f77e: Already exists
b96c0d1da602: Already exists
5e4b46455da3: Already exists
Digest: sha256:7c540ceff53f0522f6b1c264d8142df08316173d103586ddf51ed91ca49deec8
Status: Downloaded newer image for redis:latest
ec6875b95a36c5226b02f4cf51e56211a534556d95e87a8010cd91c63304845c
933ea98b5d86e542b7ff5f2aad1ba02a2ee4f6645d734fb4b20e3c3483bd1035
fde579b61f2193550fd553c624cb3301fd2cd15c350b3e6bad5475d5db8f3cd6
ed76640673502954f7d31d13bcae3b2db646c4f2865f5033775d56702805a6eb
c63b8fa9b41548eb3607f9eb125e9f4d1873c5012b830c3fa3ab35ae8f7c99cd
7199b5bba12e0d5925dfc7026f4edc3e93b381464feb10752ec16d91dcc369fe

说明:

bind 127.0.0.1 //127.0.0.1 限制只能本机访问 将其改为0.0.0.0

protected-mode no # 默认yes,开启保护模式,限制为本地访问

daemonize no 默认no,改为yes意为以守护进程方式启动,yes会使配置文件方式启动redis失败(一开启就退出)

运行指定镜像

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

1. $ docker run -itd --name redis-test -p 6379:6379 redis

2. $ docker run -itd -p 192.168.220.129:6379:6379 --name redis -v /usr/local/docker/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/data:/data redis redis-server /etc/redis/redis.conf

-d 以守护线程的方式运行(后台运行)

-i 以交互模式运行容器

-t 为容器重新分配一个伪输入终端

-p 映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机ip:6379 访问到 Redis 的服务。

 //未加-it可能会运行不起来因为,Docker容器后台运行,就必须有一个前台进程,容器运行的命令不是那些一直挂起的命令(比如运行top,tail),会自动退出

-v /usr/local/docker/redis.conf:/etc/redis/redis.conf //把宿主机配置好的redis.conf挂载到容器内的指定位置

-v /usr/local/docker/data:/data //把redis持久化的数据挂载到宿主机内,做数据备份

redis-server /etc/redis/redis.conf //使redis按照redis.conf的配置启动

–appendonly yes //redis启动后数据持久化

  • 查看容器:docker ps
[root@VM-0-6-centos ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                                                                      NAMES
7199b5bba12e   redis     "docker-entrypoint.s…"   9 seconds ago    Up 8 seconds    0.0.0.0:6376->6379/tcp, :::6376->6379/tcp, 0.0.0.0:16676->16379/tcp, :::16676->16379/tcp   redis-6
c63b8fa9b415   redis     "docker-entrypoint.s…"   10 seconds ago   Up 9 seconds    0.0.0.0:6375->6379/tcp, :::6375->6379/tcp, 0.0.0.0:16675->16379/tcp, :::16675->16379/tcp   redis-5
ed7664067350   redis     "docker-entrypoint.s…"   10 seconds ago   Up 9 seconds    0.0.0.0:6374->6379/tcp, :::6374->6379/tcp, 0.0.0.0:16674->16379/tcp, :::16674->16379/tcp   redis-4
fde579b61f21   redis     "docker-entrypoint.s…"   11 seconds ago   Up 10 seconds   0.0.0.0:6373->6379/tcp, :::6373->6379/tcp, 0.0.0.0:16673->16379/tcp, :::16673->16379/tcp   redis-3
933ea98b5d86   redis     "docker-entrypoint.s…"   12 seconds ago   Up 11 seconds   0.0.0.0:6372->6379/tcp, :::6372->6379/tcp, 0.0.0.0:16672->16379/tcp, :::16672->16379/tcp   redis-2
ec6875b95a36   redis     "docker-entrypoint.s…"   13 seconds ago   Up 12 seconds   0.0.0.0:6371->6379/tcp, :::6371->6379/tcp, 0.0.0.0:16671->16379/tcp, :::16671->16379/tcp   redis-1
  • 进入其中一个容器:docker exec -it redis-1 /bin/sh ( redis默认没有bash)
[root@VM-0-6-centos ~]# docker exec -it redis-1 /bin/sh
#
  • 配置集群:
    redis-cli --cluster create 172.36.0.11:6379 172.36.0.12:6379 172.36.0.13:6379 172.36.0.14:6379 172.36.0.15:6379 172.36.0.16:6379 --cluster-replicas 1
[root@VM-0-6-centos ~]# docker exec -it redis-1 /bin/sh
# redis-cli --cluster create 172.36.0.11:6379 172.36.0.12:6379 172.36.0.13:6379 172.36.0.14:6379 172.36.0.15:6379 172.36.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.36.0.15:6379 to 172.36.0.11:6379
Adding replica 172.36.0.16:6379 to 172.36.0.12:6379
Adding replica 172.36.0.14:6379 to 172.36.0.13:6379
M: 38ea8512a00e8b738e058a808d8532f07b4974d5 172.36.0.11:6379slots:[0-5460] (5461 slots) master
M: 65c85251d291925afb607bdf93c2ac24e19affd7 172.36.0.12:6379slots:[5461-10922] (5462 slots) master
M: 8e51ddb832230925e3d559c8d3f83a87192759af 172.36.0.13:6379slots:[10923-16383] (5461 slots) master
S: 540ec67115eda524a78d329855d0288d106a54ab 172.36.0.14:6379replicates 8e51ddb832230925e3d559c8d3f83a87192759af
S: 58a78ca2ecf2d057f5b1dea4257dd71328ff68d1 172.36.0.15:6379replicates 38ea8512a00e8b738e058a808d8532f07b4974d5
S: 235d08a53a2a938f35af6dbf38ee9ce6b51ce4ae 172.36.0.16:6379replicates 65c85251d291925afb607bdf93c2ac24e19affd7
Can I set the above configuration? (type 'yes' to accept):
  • 提示:是否按此配置,输入 yes 即可
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.36.0.11:6379)
M: 38ea8512a00e8b738e058a808d8532f07b4974d5 172.36.0.11:6379slots:[0-5460] (5461 slots) master1 additional replica(s)
M: 8e51ddb832230925e3d559c8d3f83a87192759af 172.36.0.13:6379slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 58a78ca2ecf2d057f5b1dea4257dd71328ff68d1 172.36.0.15:6379slots: (0 slots) slavereplicates 38ea8512a00e8b738e058a808d8532f07b4974d5
S: 540ec67115eda524a78d329855d0288d106a54ab 172.36.0.14:6379slots: (0 slots) slavereplicates 8e51ddb832230925e3d559c8d3f83a87192759af
M: 65c85251d291925afb607bdf93c2ac24e19affd7 172.36.0.12:6379slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: 235d08a53a2a938f35af6dbf38ee9ce6b51ce4ae 172.36.0.16:6379slots: (0 slots) slavereplicates 65c85251d291925afb607bdf93c2ac24e19affd7
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
#

配置完成

测试集群:

# redis-cli -c      // redis-cli -c连接集群  redis-cli 连接单机
127.0.0.1:6379> cluster info        // 查看集群信息
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:647
cluster_stats_messages_pong_sent:649
cluster_stats_messages_sent:1296
cluster_stats_messages_ping_received:644
cluster_stats_messages_pong_received:647
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:1296
127.0.0.1:6379> cluster nodes      // 查看节点信息
8e51ddb832230925e3d559c8d3f83a87192759af 172.36.0.13:6379@16379 master - 0 1625397547555 3 connected 10923-16383
38ea8512a00e8b738e058a808d8532f07b4974d5 172.36.0.11:6379@16379 myself,master - 0 1625397548000 1 connected 0-5460
58a78ca2ecf2d057f5b1dea4257dd71328ff68d1 172.36.0.15:6379@16379 slave 38ea8512a00e8b738e058a808d8532f07b4974d5 0 1625397548056 1 connected
540ec67115eda524a78d329855d0288d106a54ab 172.36.0.14:6379@16379 slave 8e51ddb832230925e3d559c8d3f83a87192759af 0 1625397549561 3 connected
65c85251d291925afb607bdf93c2ac24e19affd7 172.36.0.12:6379@16379 master - 0 1625397549561 2 connected 5461-10922
235d08a53a2a938f35af6dbf38ee9ce6b51ce4ae 172.36.0.16:6379@16379 slave 65c85251d291925afb607bdf93c2ac24e19affd7 0 1625397549561 2 connected
127.0.0.1:6379>
  • 设置一个值,查找对应的主机
127.0.0.1:6379> set a b
// 响应的主机为 172.36.0.13(redis-3),对应从机为 172.36.0.14(redis-4)
-> Redirected to slot [15495] located at 172.36.0.13:6379
OK
  • 把 redis-3 容器停止
[root@VM-0-6-centos ~]# docker stop redis-3
redis-3
  • 主机停止后,查看从机是否替换成功
# redis-cli -c        // 连接集群
127.0.0.1:6379> get a        // 获取之前输入的值
-> Redirected to slot [15495] located at 172.36.0.14:6379
"b"
172.36.0.14:6379> cluster nodes        // 查看节点信息
// 172.36.0.13(redis-3)被对应的从机 172.36.0.14(redis-4)自动替换成功
540ec67115eda524a78d329855d0288d106a54ab 172.36.0.14:6379@16379 myself,master - 0 1625406048000 7 connected 10923-16383
235d08a53a2a938f35af6dbf38ee9ce6b51ce4ae 172.36.0.16:6379@16379 slave 65c85251d291925afb607bdf93c2ac24e19affd7 0 1625406047146 2 connected
65c85251d291925afb607bdf93c2ac24e19affd7 172.36.0.12:6379@16379 master - 0 1625406048149 2 connected 5461-10922
58a78ca2ecf2d057f5b1dea4257dd71328ff68d1 172.36.0.15:6379@16379 slave 38ea8512a00e8b738e058a808d8532f07b4974d5 0 1625406049153 1 connected
38ea8512a00e8b738e058a808d8532f07b4974d5 172.36.0.11:6379@16379 master - 0 1625406047146 1 connected 0-5460
// 172.36.0.13(redis-3),故障
8e51ddb832230925e3d559c8d3f83a87192759af 172.36.0.13:6379@16379 master,fail - 1625405967351 1625405964842 3 connected
172.36.0.14:6379>

docker搭建redis集群完成,测试成功

三,卸载redis集群

1.编写删除shell脚本,先停止容器,再删除容器

redis_stop.sh

for port in $(seq 1 6); \
do \docker stop redis-${port}; \docker rm redis-${port}; \
done

2.赋权

chmod 755 stop.sh

3.执行脚本

./redis_stop.sh

四,springboot集成redis集群模式

1.对外提供ip怎么变成宿主机ip,需要改动哪里东西

配置文件,启动网段,集群配置

2.网络怎么联通容器,宿主机

3.密码怎么设置

尝试把配置ip改成宿主机ip

启动ip改成宿主机ip,报错如下,网段不一致

find / -name redis.conf

Docker 基础 ( 二十 ) 部署Redis集群,问题记录相关推荐

  1. 三台机器使用Docker部署Redis集群

    三台机器使用Docker部署Redis集群 我们这里采用Docker在三台服务器上面进行Redis集群的搭建,它方便快捷.容易上手. 1.集群原理 在Redis集群中,所以的节点彼此关联,节点内部通过 ...

  2. k8s部署redis集群

    K8S部署Redis Cluster集群 kubernetes部署单节点redis: https://www.cnblogs.com/zisefeizhu/p/14282299.html Redis ...

  3. 在K8s上部署Redis 集群

    一.前言 架构原理:每个Master都可以拥有多个Slave.当Master下线后,Redis集群会从多个Slave中选举出一个新的Master作为替代,而旧Master重新上线后变成新Master的 ...

  4. Kubernetes学习总结(16)—— Kubernetes 实战之部署 Redis 集群

    一.问题分析 本质上来说在 k8s 上部署一个 redis 集群和部署一个普通应用没有什么太大的区别,但需要注意下面几个问题: Redis 是一个有状态应用:这是部署 redis 集群时我们最需要注意 ...

  5. 通过operator部署redis集群(ucloud版)

    operator部署有状态的应用会简单很多 github文档:https://github.com/ucloud/redis-cluster-operator#deploy-redis-cluster ...

  6. 在Docker中安装和部署MongoDB集群

    在Docker中安装和部署MongoDB集群 - tianshidan1998 - 博客园

  7. Centos6.6部署Redis集群

    Centos6.6部署Redis集群 1 环境准备 1 环境安装redis 1 安装ruby 2 配置redis主从环境 3 部署redis sentinel服务器 5 集群使用 13 当前集群环境说 ...

  8. operator部署redis集群

    operator部署redis集群 1.现在operator的redis相关包 git clone https://github.com/ucloud/redis-cluster-operator.g ...

  9. docker部署redis集群_Docker部署Redis集群----第九节(docker-redis哨兵集群“轮询分流”篇实例一)...

    到此,我们的 Redis 哨兵集群就结束了,本篇章是第九篇章,也是使用集群方式的实例一来实现php的轮询分流. 1.准备工作: 在我们上一篇章实现redis 哨兵集群的基础上开始,在服务器上部署php ...

  10. 手把手教你实现 Docker 部署 Redis 集群

    作者:我为什么要写这个 cnblogs.com/cxbhakim/p/9151720.html 摘要 接触docker以来,似乎养成了一种习惯,安装什么应用软件都想往docker方向做,今天就想来尝试 ...

最新文章

  1. SQL SERVER中直接循环写入数据
  2. python爬虫对炒股有没有用_使用python爬虫实现网络股票信息爬取的demo
  3. ES11新特性_私有属性---JavaScript_ECMAScript_ES6-ES11新特性工作笔记061
  4. 开发者点评 GitHub 暗黑模式:太暗了
  5. Oracle并行操作——从串行到并行(转)
  6. 小米虚拟键透明方法_小米 6 用户该换机了!小米 6 Pro 曝光
  7. VMware 虚拟机安装 android-x86_64 iso镜像
  8. 对外汉语偏误语料库_BCC语料库
  9. react native ScrollView实现滑动锚定,滑动到指定位置
  10. GPU基本介绍与各GPU性能、价格比较
  11. 2018/2019款 MacBookPro 接口失灵的原因及解决方案
  12. java毕业设计大众点评管理系统Mybatis+系统+数据库+调试部署
  13. 分享一些酷酷的特效,希望你也能够喜欢
  14. 网页无法在微信内访问怎么办,微信跳转链接的实现方法
  15. 2016年保密技术交流大会的璀璨之星—亿赛通
  16. APNs苹果推送使用的是pushy框架+.p8证书(java后台)(附上与.p12的不同)
  17. 安娜尔机器人冻结资金设置_安娜尔机器人冻结资金设置如何
  18. 什么是期货反向跟单?
  19. 声网 Agora 本地服务端录制 SDK v3.0 版正式上线
  20. 时间序列规则和时间序列模型

热门文章

  1. 修改统计信息自动收集时间窗口
  2. mybatis 注解使用
  3. Sql2008中添加程序集(转)
  4. Linux系统攻略关于vi替换命令的使用说明
  5. 内存映射之fixmap(early_fixmap_init)
  6. 问题记录:图片加载快速滑动闪动问题(Android-APP)
  7. linux网络分析之回环网卡
  8. Linux内核入门(三)—— C语言基本功
  9. SQlite数据库的C编程接口(六) 返回值和错误码(Result Codes and Error Codes) ——《Using SQlite》读书笔记
  10. 基于SNMP协议的电信网络监测系统的实现