如何用docker部署redis cluster的方法
前言
由于本人是个docker控,不喜欢安装各种环境,而且安装redis-trib也有点繁琐,索性用docker来做rediscluster。
本文用的是伪集群,真正的集群放到不同的机器即可。端口是7001-7006。
工作目录:/data/redis
创建文件夹
首先创建一堆对应端口的文件夹,下面是脚本
create.sh
foriin`seq70017006` do mkdir-p${i}/data done
添加执行权限并执行
chmod777create.sh ./create.sh
部署redis
本人不喜欢dockerrun,所以用了docker-compose。官方文档https://docs.docker.com/compose/overview/
创建docker-compose.yml
用publicisworldwide/redis-cluster镜像的原因是人家已经把配置文件写好了,配置文件没有挂载是懒,别学我
docker-compose.yml
version:'3.4' x-image: &default-image publicisworldwide/redis-cluster x-restart: &default-restart always x-netmode: &default-netmode host services: redis1: image:*default-image network_mode:*default-netmode restart:*default-restart volumes: -/data/redis/7001/data:/data environment: -REDIS_PORT=7001 redis2: image:*default-image network_mode:*default-netmode restart:*default-restart volumes: -/data/redis/7002/data:/data environment: -REDIS_PORT=7002 redis3: image:*default-image network_mode:*default-netmode restart:*default-restart volumes: -/data/redis/7003/data:/data environment: -REDIS_PORT=7003 redis4: image:*default-image network_mode:*default-netmode restart:*default-restart volumes: -/data/redis/7004/data:/data environment: -REDIS_PORT=7004 redis5: image:*default-image network_mode:*default-netmode restart:*default-restart volumes: -/data/redis/7005/data:/data environment: -REDIS_PORT=7005 redis6: image:*default-image network_mode:*default-netmode restart:*default-restart volumes: -/data/redis/7006/data:/data environment: -REDIS_PORT=7006
启动所有redis
docker-composeup-d
如果报错,那就是版本问题。
查看docker版本
docker-v
在文档中可查看docker版本支持的docker-compose.yml版本,为了方便大家查看,我复制出来了。不过一般来说,docker升级比较快,功能迭代也很快,最好还是用最新版本。
Composefileformat | DockerEnginerelease |
---|---|
3.4 | 17.09.0+ |
3.3 | 17.06.0+ |
3.2 | 17.04.0+ |
3.1 | 1.13.1+ |
3.0 | 1.13.0+ |
2.3 | 17.06.0+ |
2.2 | 1.13.0+ |
2.1 | 1.12.0+ |
2.0 | 1.10.0+ |
1.0 | 1.9.1.+ |
部署cluster
运行以下命令(inem0o/redis-trib没有pull会自动pull)
注意:加上-it,不然后续的确认没法继续
dockerrun--rm-itinem0o/redis-tribcreate--replicas1192.168.30.70:7001192.168.30.70:7002192.168.30.70:7003192.168.30.70:7004192.168.30.70:7005192.168.30.70:7006
会出现
>>>Creatingcluster >>>Performinghashslotsallocationon6nodes... Using3masters: 192.168.30.70:7001 192.168.30.70:7002 192.168.30.70:7003 Addingreplica192.168.30.70:7004to192.168.30.70:7001 Addingreplica192.168.30.70:7005to192.168.30.70:7002 Addingreplica192.168.30.70:7006to192.168.30.70:7003 M:5a7bd7698b1fe55beb44faac051d66c8a03fd1b1192.168.30.70:7001 slots:0-5460(5461slots)master M:bb8fda08e1dcd39e937443f81b5458e80f52d804192.168.30.70:7002 slots:5461-10922(5462slots)master M:d907530ee9f6356e0e61a6c7f4d0cc1b22da1189192.168.30.70:7003 slots:10923-16383(5461slots)master S:52eee69afa751d71c84d5436d14b0e16a37536fa192.168.30.70:7004 replicates5a7bd7698b1fe55beb44faac051d66c8a03fd1b1 S:701ed2fbb3df9fc63b083818620f5c020d05e323192.168.30.70:7005 replicatesbb8fda08e1dcd39e937443f81b5458e80f52d804 S:a3548a9dffa225f05786ea2289db65f5f1c623be192.168.30.70:7006 replicatesd907530ee9f6356e0e61a6c7f4d0cc1b22da1189 CanIsettheaboveconfiguration?(type'yes'toaccept):
输入yes
Waitingfortheclustertojoin..... >>>PerformingClusterCheck(usingnode192.168.30.70:7001) M:5a7bd7698b1fe55beb44faac051d66c8a03fd1b1192.168.30.70:7001 slots:0-5460(5461slots)master 1additionalreplica(s) M:d907530ee9f6356e0e61a6c7f4d0cc1b22da1189192.168.30.70:7003@17003 slots:10923-16383(5461slots)master 1additionalreplica(s) S:a3548a9dffa225f05786ea2289db65f5f1c623be192.168.30.70:7006@17006 slots:(0slots)slave replicatesd907530ee9f6356e0e61a6c7f4d0cc1b22da1189 S:701ed2fbb3df9fc63b083818620f5c020d05e323192.168.30.70:7005@17005 slots:(0slots)slave replicatesbb8fda08e1dcd39e937443f81b5458e80f52d804 S:52eee69afa751d71c84d5436d14b0e16a37536fa192.168.30.70:7004@17004 slots:(0slots)slave replicates5a7bd7698b1fe55beb44faac051d66c8a03fd1b1 M:bb8fda08e1dcd39e937443f81b5458e80f52d804192.168.30.70:7002@17002 slots:5461-10922(5462slots)master 1additionalreplica(s) [OK]Allnodesagreeaboutslotsconfiguration. >>>Checkforopenslots... >>>Checkslotscoverage... [OK]All16384slotscovered.
完成。
遇到的问题
创建集群的时候会遇到Waitingfortheclustertojoin....................一直没有成功
答:网络模式改成host,dockerrun的方式加上--nethost,docker-compose方式加上network_mode:host。
我原本是端口映射7001:7000+17001:17000,但是不行,不知道什么原因。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。