redis 集群简易图

我们要让 redis 集群拥有 分片 + 高可用 + 负载均衡 的作用

1、安装docker,点击我跳转docker安装博客

2、创建网卡 ,我们不使用 --link 的docker选项来让我们的网络连接,我们可以自定义网络

docker network create --driver bridge --subnet 172.77.0.0/16 --gateway 172.77.0.1 redis#--driver bridge 默认就是桥接模式#--subnet 子网掩码#--gateway 网关#redis 我们对这个自定网络的命名docker network lsdocker network inspect redis

[root@qwh ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 7824a4fe0564 bridge bridge local 5e248a90ad9f host host local b70935957a82 none null local 49dd4d92fd8e redis bridge local

[root@qwh ~]# docker network inspect redis [ { "Name": "redis", "Id": "49dd4d92fd8efc60cbdf2f30e92c4340071355c1fd26cbbb3cb8bb14f486a6eb", "Created": "2022-11-13T22:44:48.756136319+08:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.77.0.0/16", "Gateway": "172.77.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": {}, "Labels": {} } ]

3、通过脚本创建六个redis配置

vim redis.shcat redis.shfor 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.77.0.7${port} cluster-announce-port 6379 cluster-announce-bus-port 16379 appendonly yes EOF doneshmod 755 redis.sh

4、运行六个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.77.0.71 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf参数说明#-d 让容器运行在后台#-p 添加主机到容器的端口映射#-v 添加目录映射,这里最好nginx容器的根目录最好写成和php容器中根目录一样。但是不一定非要一样,如果不一样在配置nginx的时候需要注意#-name 容器的名称#--net 使用自定义网络#--ip 指定ip#redis-server /etc/redis/redis.conf 启动redis

Unable to find image 'redis:5.0.9-alpine3.11' locally 5.0.9-alpine3.11: Pulling from library/redis cbdbe7a5bc2a: Pull complete dc0373118a0d: Pull complete cfd369fe6256: Pull complete 3e45770272d9: Pull complete 558de8ea3153: Pull complete a2c652551612: Pull complete Digest: sha256:83a3af36d5e57f2901b4783c313720e5fa3ecf0424ba86ad9775e06a9a5e35d0 Status: Downloaded newer image for redis:5.0.9-alpine3.11 8dec8461ac577ac1bd7203a173e354c970d038cb166c54cf119ebb2a64d735a2

docker run -p 6372:6379 -p 16672: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.77.0.72 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

docker run -p 6373:6379 -p 16673: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.77.0.73 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

docker run -p 6374:6379 -p 16674: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.77.0.74 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

docker run -p 6375:6379 -p 16675: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.77.0.75 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

docker run -p 6376:6379 -p 16676: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.77.0.76 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

docker ps

5、进入redis1容器

[root@qwh ~]# docker exec -it redis-1 /bin/bash OCI runtime exec failed: exec failed: unable to start container process: exec: "/bin/bash": stat /bin/bash: no such file or directory: unknown

#redis默认没有bash

docker exec -it redis-1 /bin/sh

6、创建redis集群

redis-cli --cluster create 172.77.0.71:6379 172.77.0.72:6379 172.77.0.73:6379 172.77.0.74:6379 172.77.0.75:6379 172.77.0.76: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.77.0.75:6379 to 172.77.0.71:6379 Adding replica 172.77.0.76:6379 to 172.77.0.72:6379 Adding replica 172.77.0.74:6379 to 172.77.0.73:6379 M: 764e25bf621e4a43f7c1d44213e2b898118f3765 172.77.0.71:6379 slots:[0-5460] (5461 slots) master M: 19d86a0a92252d04ee05b0ca642c3e586eb62794 172.77.0.72:6379 slots:[5461-10922] (5462 slots) master M: d59aea1e087f65e9cf8f2c7cbb110abfae429b20 172.77.0.73:6379 slots:[10923-16383] (5461 slots) master S: c3a45eedffeea52d60addf387571c446f72f0f47 172.77.0.74:6379 replicates d59aea1e087f65e9cf8f2c7cbb110abfae429b20 S: 58fffd90cb8e4c96fc01101a61496d3e314e1290 172.77.0.75:6379 replicates 764e25bf621e4a43f7c1d44213e2b898118f3765 S: 35e0cb6b794a5b83f7edb454ca9caae39802e8fa 172.77.0.76:6379 replicates 19d86a0a92252d04ee05b0ca642c3e586eb62794 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.77.0.71:6379) M: 764e25bf621e4a43f7c1d44213e2b898118f3765 172.77.0.71:6379 slots:[0-5460] (5461 slots) master 1 additional replica(s) M: d59aea1e087f65e9cf8f2c7cbb110abfae429b20 172.77.0.73:6379 slots:[10923-16383] (5461 slots) master 1 additional replica(s) S: 58fffd90cb8e4c96fc01101a61496d3e314e1290 172.77.0.75:6379 slots: (0 slots) slave replicates 764e25bf621e4a43f7c1d44213e2b898118f3765 S: c3a45eedffeea52d60addf387571c446f72f0f47 172.77.0.74:6379 slots: (0 slots) slave replicates d59aea1e087f65e9cf8f2c7cbb110abfae429b20 M: 19d86a0a92252d04ee05b0ca642c3e586eb62794 172.77.0.72:6379 slots:[5461-10922] (5462 slots) master 1 additional replica(s) S: 35e0cb6b794a5b83f7edb454ca9caae39802e8fa 172.77.0.76:6379 slots: (0 slots) slave replicates 19d86a0a92252d04ee05b0ca642c3e586eb62794 [OK] All nodes agree about slots configuration. Check for open slots... Check slots coverage... [OK] All 16384 slots covered.

8、测试redis集群的高可用功能

redis-cli -c#-c 连接集群结点时使用,此选项可防止moved和ask异常

127.0.0.1:6379> cluster nodes #查看集群的节点信息 d59aea1e087f65e9cf8f2c7cbb110abfae429b20 172.77.0.73:6379@16379 master - 0 1668352765000 3 connected 10923-16383 58fffd90cb8e4c96fc01101a61496d3e314e1290 172.77.0.75:6379@16379 slave 764e25bf621e4a43f7c1d44213e2b898118f3765 0 1668352764593 5 connected c3a45eedffeea52d60addf387571c446f72f0f47 172.77.0.74:6379@16379 slave d59aea1e087f65e9cf8f2c7cbb110abfae429b20 0 1668352764994 4 connected 19d86a0a92252d04ee05b0ca642c3e586eb62794 172.77.0.72:6379@16379 master - 0 1668352764493 2 connected 5461-10922 35e0cb6b794a5b83f7edb454ca9caae39802e8fa 172.77.0.76:6379@16379 slave 19d86a0a92252d04ee05b0ca642c3e586eb62794 0 1668352765495 6 connected 764e25bf621e4a43f7c1d44213e2b898118f3765 172.77.0.71:6379@16379 myself,master - 0 1668352764000 1 connected 0-5460

#给 gang 赋予一个值:123

127.0.0.1:6379> set gang 123

OK

127.0.0.1:6379> get gang

"123"

exit

exit

docker stop redis-1 #停止 redis-1 容器的运行

docker exec -it redis-2 /bin/sh

redis-cli -c #再次进入redis

127.0.0.1:6379> cluster nodes

19d86a0a92252d04ee05b0ca642c3e586eb62794 172.77.0.72:6379@16379 myself,master - 0 1668353178000 2 connected 5461-10922 764e25bf621e4a43f7c1d44213e2b898118f3765 172.77.0.71:6379@16379 master,fail - 1668352980393 1668352979190 1 connected 35e0cb6b794a5b83f7edb454ca9caae39802e8fa 172.77.0.76:6379@16379 slave 19d86a0a92252d04ee05b0ca642c3e586eb62794 0 1668353180000 6 connected c3a45eedffeea52d60addf387571c446f72f0f47 172.77.0.74:6379@16379 slave d59aea1e087f65e9cf8f2c7cbb110abfae429b20 0 1668353180635 4 connected d59aea1e087f65e9cf8f2c7cbb110abfae429b20 172.77.0.73:6379@16379 master - 0 1668353179000 3 connected 10923-16383 58fffd90cb8e4c96fc01101a61496d3e314e1290 172.77.0.75:6379@16379 master - 0 1668353179632 7 connected 0-5460

#我们发现172.77.0.71:6379@16379 master,fail 掉了

127.0.0.1:6379> get gang

-> Redirected to slot [4288] located at 172.77.0.75:6379

"123"

#master172.77.0.71 挂掉了,但是它的 slave 172.77.0.75 接过了它的任务,继续运行,成功实现高可用!!

Linux系统下使用docker来部署Redis集群相关推荐

  1. 国产化探索之路---中标麒麟 Linux系统下,FTP服务器部署

    中标麒麟 Linux系统下,FTP服务器部署 1.安装FTP软件包 yum install vsftpd -y 2.创建ftp用户密码 useradd ftpuserecho "ftpuse ...

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

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

  3. k8s部署redis集群

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

  4. 使用docker安装部署Spark集群来训练CNN(含Python实例)

    使用docker安装部署Spark集群来训练CNN(含Python实例) 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如需 ...

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

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

  6. docker rabbitmq_Docker部署RabbitMQ集群

    安装rabbitmq 下载Docker镜像 docker pull rabbitmq:3.7.12-management 安装RabbitMQ mkdir rabbitmq # node1 172.1 ...

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

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

  8. Centos6.6部署Redis集群

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

  9. 在K8s上部署Redis 集群

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

最新文章

  1. 国际基因编辑科技发展报告
  2. window.open()函数参数说明
  3. linux日志生成速率统计,Linux学习29-awk提取log日志信息,统计日志里面ip访问次数排序...
  4. linux make 命令行 定义宏(-D)传递给C源代码 简介
  5. Linux软件安装的补充
  6. 能用条件注释改善的IE兼容问题
  7. 给定数组A []和数字X,请检查A []中是否有对X | 使用两个指针算法,O(1)空间复杂度| 套装2...
  8. Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdb
  9. 焦作一中高考成绩查询2021,焦作高中学校排名2021最新排名,焦作高中排名前十
  10. linux环境nginx-1.10.3安装
  11. smartforms长文本处理方式
  12. Linux服务之cobbler批量部署篇
  13. weblogic 下载和安装
  14. 微运行库2015_vc2015运行库下载-Visual C++ 2015(vc2015)下载V14.0.24123 官方版【32位|64位|】-西西软件下载...
  15. 【MMD动作下载】随心所欲mercy(Kimagure Mercy)
  16. Linux Capability探索实验
  17. TCP MIN_RTO 辩证考
  18. 普通最小二乘法、加权最小二乘法、广义最小二乘法
  19. 于博士信号完整性揭秘知识点总结
  20. 微信小程序登陆验证机制理解及实现

热门文章

  1. 关于车载TBox的认知
  2. 难得的excel教程教你做表格(史上最全)集珍藏版,简单明了,包你学会,欢迎转载...
  3. 多进程多线程 ---- Python和Java
  4. RN-微信钱包页面布局
  5. 米粉节来袭,小米电视音响竟然卖这个价
  6. 怎么用u盘重装系统?两个方法免费教你电脑重装系统
  7. web前端开发网络课程,HTML常用的五种标签,重难点整理
  8. 2018年中国人工智能城市感受力指数报告
  9. java上传图片到服务器下
  10. 部署Ceilometer +Gnocchi + Aodh