基于Docker的Redis 5.0 单机集群搭建
如果安装redis 5.0以下版本,则需要redis、ruby、redis-trib等各种组件安装,比较繁琐,在redis 5.0及以后,不需要ruby,仅在安装redis后执行一行命令即可。
前置条件:
- Docker
- redis:5.0.0镜像
1 | [root@lemonlzy redis] |
集群搭建
创建Redis 容器
1. 创建redis自定义network
1 | $ docker network create redis-net |
备注:创建redis-net虚拟网卡 目的是让docker容器能与宿主(centos7)桥接网络 并间接与外界连接
2. 查看redis-net虚拟网卡网关ip
这里的ip用于后续配置文件中的集群ip配置:
1 | [root@lemonlzy redis]# docker network inspect redis-net | grep "Gateway" | grep --color=auto -P '(\d{1,3}.){3}\d{1,3}' -o |
3. 创建redis配置文件
在自定义路径下下创建文件夹redis用于存放自定义的集群配置文件,并在该文件夹中新建redis6379.conf文件(以下演示中目录为/data/redis):
1 | [root@lemonlzy redis]# cat redis6379.conf |
如果在开启防火墙的情况下,上述配置文件的自定义端口均需加入防火墙规则
4. 创建集群配置文件
创建redis配置文件的目录结构:
1 | $ mkdir -p /data/redis/{6379/data/,6380/data/,6381/data/,6382/data/,6383/data/,6384/data/,6385/data/,6386/data/,6387/data/} |
并将每一个配置文件移动至对应目录下(我这次开放6379-6387端口,所以配置文件调整为redis6379.conf-redis6387.conf),目录结构如下:
1 | [root# tree -L 2 redis] |
里面每一个配置文件都需调整为对应的端口,且
cluster-announce-ip
字段需逐步自增1,即redis-net
的ip为172.20.0.1
,redis6379.conf
的cluster-announce-ip
为172.20.0.2
,redis6380.conf
的cluster-announce-ip
为172.20.0.3
,redis6381.conf
的cluster-announce-ip
为172.20.0.4
…
5. 创建redis容器
1 | docker run -d -p6379:6379 -p16379:16379 --restart always --name redis-6379 --net redis-net --privileged=true -v /data/redis/6379/redis6379.conf:/etc/redis/redis.conf -v /data/redis/6379/data:/data redis:5.0.0 /usr/local/bin/redis-server /etc/redis/redis.conf |
如果路径、配置文件名均为自定义,请自行调整docker命令挂载目录的地址以及暴露的端口号。
6. 查看容器分配ip
确认ip配置正确,每个容器的ip应为自定义配置中定义的cluster-announce-ip
,用于后续进行集群生成:
1 | [root@lemonlzy redis] |
启动集群
1. 进入任意redis容器
1 | [root@lemonlzy redis]# docker exec -it redis-6379 bash |
2. 创建redis集群
一行命令创建集群,此处的ip与端口号调整为上述自定义的端口号,若无自行改动直接复制使用即可:
1 | redis-cli --cluster create 172.20.0.2:6379 172.20.0.3:6380 172.20.0.4:6381 172.20.0.5:6382 172.20.0.6:6383 172.20.0.7:6384 172.20.0.8:6385 172.20.0.9:6386 172.20.0.10:6387 --cluster-replicas 1 |
具体的命令执行结果如下:
1 | [root@lemonlzy redis]# docker exec -it redis-6379 bash |
登录redis,查看主从信息:
1 | root@92a627152f8f:/data# redis-cli |
查看集群信息:
1 | 127.0.0.1:6379> cluster info |
3. 测试
1 | root@86dc7ab9335a:/data# redis-cli -c -h 172.20.0.2 -p 6379 |
在6379设置了key为name,value为zhangsan的键值对,在6380端口使用get仍可获取到对应的value值,集群搭建成功。
如果出现以下报错,原因是没有用集群模式连接(连接节点命令,没有加 -c 参数),请参考上述步骤连接。
1 | 127.0.0.1:6379> set name zhangshan |
外部访问,访问本机ip+6379-6387任一端口号即可。