Linux系统下使用docker来部署Redis集群
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集群相关推荐
- 国产化探索之路---中标麒麟 Linux系统下,FTP服务器部署
中标麒麟 Linux系统下,FTP服务器部署 1.安装FTP软件包 yum install vsftpd -y 2.创建ftp用户密码 useradd ftpuserecho "ftpuse ...
- 三台机器使用Docker部署Redis集群
三台机器使用Docker部署Redis集群 我们这里采用Docker在三台服务器上面进行Redis集群的搭建,它方便快捷.容易上手. 1.集群原理 在Redis集群中,所以的节点彼此关联,节点内部通过 ...
- k8s部署redis集群
K8S部署Redis Cluster集群 kubernetes部署单节点redis: https://www.cnblogs.com/zisefeizhu/p/14282299.html Redis ...
- 使用docker安装部署Spark集群来训练CNN(含Python实例)
使用docker安装部署Spark集群来训练CNN(含Python实例) 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如需 ...
- 通过operator部署redis集群(ucloud版)
operator部署有状态的应用会简单很多 github文档:https://github.com/ucloud/redis-cluster-operator#deploy-redis-cluster ...
- docker rabbitmq_Docker部署RabbitMQ集群
安装rabbitmq 下载Docker镜像 docker pull rabbitmq:3.7.12-management 安装RabbitMQ mkdir rabbitmq # node1 172.1 ...
- Kubernetes学习总结(16)—— Kubernetes 实战之部署 Redis 集群
一.问题分析 本质上来说在 k8s 上部署一个 redis 集群和部署一个普通应用没有什么太大的区别,但需要注意下面几个问题: Redis 是一个有状态应用:这是部署 redis 集群时我们最需要注意 ...
- Centos6.6部署Redis集群
Centos6.6部署Redis集群 1 环境准备 1 环境安装redis 1 安装ruby 2 配置redis主从环境 3 部署redis sentinel服务器 5 集群使用 13 当前集群环境说 ...
- 在K8s上部署Redis 集群
一.前言 架构原理:每个Master都可以拥有多个Slave.当Master下线后,Redis集群会从多个Slave中选举出一个新的Master作为替代,而旧Master重新上线后变成新Master的 ...
最新文章
- 国际基因编辑科技发展报告
- window.open()函数参数说明
- linux日志生成速率统计,Linux学习29-awk提取log日志信息,统计日志里面ip访问次数排序...
- linux make 命令行 定义宏(-D)传递给C源代码 简介
- Linux软件安装的补充
- 能用条件注释改善的IE兼容问题
- 给定数组A []和数字X,请检查A []中是否有对X | 使用两个指针算法,O(1)空间复杂度| 套装2...
- Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdb
- 焦作一中高考成绩查询2021,焦作高中学校排名2021最新排名,焦作高中排名前十
- linux环境nginx-1.10.3安装
- smartforms长文本处理方式
- Linux服务之cobbler批量部署篇
- weblogic 下载和安装
- 微运行库2015_vc2015运行库下载-Visual C++ 2015(vc2015)下载V14.0.24123 官方版【32位|64位|】-西西软件下载...
- 【MMD动作下载】随心所欲mercy(Kimagure Mercy)
- Linux Capability探索实验
- TCP MIN_RTO 辩证考
- 普通最小二乘法、加权最小二乘法、广义最小二乘法
- 于博士信号完整性揭秘知识点总结
- 微信小程序登陆验证机制理解及实现