Docker快速构建Redis集群(cluster)
程序员文章站
2024-02-01 19:28:22
Docker快速构建Redis集群(cluster) 以所有 实例运行在同一台宿主机上为例子 搭建步骤 集群目录清单 1.redis.conf 找到一份原始的redis.conf文件,将其重命名为:redis cluster.tmpl redis cluster.tmpl 2.构建redis tri ......
docker快速构建redis集群(cluster)
以所有redis
实例运行在同一台宿主机上为例子
搭建步骤
redis
集群目录清单
. ├── dockerfile ├── make_master_slave.sh ├── run_master_slave.sh ├── compose_master_slave.sh ├── redis-trib.rb ├── master │ ├── 7000 │ │ ├── data │ │ │ ├── appendonly.aof │ │ │ ├── dump.rdb │ │ │ └── nodes.conf │ │ └── redis.conf │ ├── 7001 │ │ ├── data │ │ │ ├── appendonly.aof │ │ │ ├── dump.rdb │ │ │ └── nodes.conf │ │ └── redis.conf │ └── 7002 │ ├── data │ │ ├── appendonly.aof │ │ ├── dump.rdb │ │ └── nodes.conf │ └── redis.conf ├── redis-cluster.tmpl └── slave ├── 7003 │ ├── data │ │ ├── appendonly.aof │ │ ├── dump.rdb │ │ └── nodes.conf │ └── redis.conf ├── 7004 │ ├── data │ │ ├── appendonly.aof │ │ ├── dump.rdb │ │ └── nodes.conf │ └── redis.conf └── 7005 ├── data │ ├── appendonly.aof │ ├── dump.rdb │ └── nodes.conf └── redis.conf
1.redis.conf
找到一份原始的redis.conf文件,将其重命名为:redis-cluster.tmpl
redis-cluster.tmpl
# bind 127.0.0.1 protected-mode no port ${port} daemonize no dir /data/redis appendonly yes cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 15000
2.构建redis-trib镜像
redis-trib.rb
是redis
官方推出的管理redis
集群的工具,集成在redis
的源码src
目录下,因为搭建redis-cluster的时候需要用到redis-trib工具。
构建redis-trib
镜像
dockerfile
from ruby:2.5.5-slim maintainer xinchen<xcmelody@gmail.com> run gem install redis run mkdir /redis workdir /redis # redis-trib.rb 可在https://github.com/antirez/redis中找到 # 此处已经 wget https://raw.githubusercontent.com/antirez/redis/4.0/src/redis-trib.rb add ./redis-trib.rb /redis/redis-trib.rb
构建镜像
docker build -t redis-trib .
3.创建docker内部网络
# docker network ls 可查看 docker network create redis-cluster-net
4.创建 master 和 slave 文件夹并生成配置文件
make_master_slave.sh
# 创建 master 和 slave 文件夹 for port in `seq 7000 7005`; do ms="master" if [ $port -ge 7003 ]; then ms="slave" fi mkdir -p ./$ms/$port/ && mkdir -p ./$ms/$port/data \ && port=$port envsubst < ./redis-cluster.tmpl > ./$ms/$port/redis.conf; done
5.运行docker redis 的 master 和 slave 实例
run_master_slave.sh
# 运行docker redis 的 master 和 slave 实例 for port in `seq 7000 7005`; do ms="master" if [ $port -ge 7003 ]; then ms="slave" fi docker run -d -p $port:$port -p 1$port:1$port \ -v $pwd/$ms/$port/redis.conf:/data/redis.conf \ -v $pwd/$ms/$port/data:/data/redis \ --restart always --name redis-$ms-$port --net redis-cluster-net \ redis redis-server /data/redis.conf; done
6.组装masters : slaves 节点参数
组装masters : slaves 节点参数
# 组装masters : slaves 节点参数 matches="" for port in `seq 7000 7005`; do ms="master" if [ $port -ge 7003 ]; then ms="slave" fi matches=$matches$(docker inspect --format '{{(index .networksettings.networks "redis-cluster-net").ipaddress}}' "redis-$ms-${port}"):${port}" "; done echo $matches # 172.20.0.2:7000 172.20.0.3:7001 172.20.0.4:7002 172.20.0.5:7003 172.20.0.6:7004 172.20.0.7:7005 # 创建docker-cluster,这里就用到了上面的redis-trib镜像 docker run -it --rm --net redis-cluster-net redis-trib ruby redis-trib.rb create --replicas 1 $matches # 最后需要在接下来的console中输入“yes”,即可完成docker-cluster的搭建
参考
上一篇: Spring(三)使用JdbcTemplate对象完成查询
下一篇: spring-消息