准备工作
1. 安装docker
curl -s https://get.docker.com/ | sh
注:一键安装的事最新版docker。已安装docker可跳过此步骤
2. 获取基础镜像
docker pull redis
docker pull ruby
注:至此,docker上redis cluster所有工具准备完毕,我们在命令行上输入docker images,就可以查看到已经安装的镜像
搭建
一、创建redis容器
1、创建redis配置文件(redis-cluster.tmpl)
实例:(本实例中使用6个节点,3主3从)
路径/home下创建文件夹redis-cluster,在路径/home/redis-cluster下创建一个文件redis-cluster.tmpl,并把以下内容复制过去。(注:路径可自定义,我用的是/home/redis-cluster)
port ${PORT} cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip 39.10X.XX.XX //自己服务器IP cluster-announce-port ${PORT} cluster-announce-bus-port 1${PORT} appendonly yes
2、创建自定义network
docker network create redis-net
注:原理上使用docker默认的网络也是可行的
3、在/home/redis-cluster下生成conf和data目标,并生成配置信息
for port in `seq 7000 7005`; do \ mkdir -p ./${port}/conf \ && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \ && mkdir -p ./${port}/data; \ done
共生成6个文件夹,从7000到7005,每个文件夹下包含data和conf文件夹,同时conf里面有redis.conf配置文件
4、创建redis容器
for port in `seq 7000 7005`; do \ docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \ -v /home/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \ -v /home/redis-cluster/${port}/data:/data \ --restart always --name redis-${port} --net redis-net \ --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; \ done
生成6个redis容器
二、集群
通过启动ruby来实现集群
echo yes | docker run -i --rm --net redis-net ruby sh -c '\ gem install redis \ && wget http://download.redis.io/redis-stable/src/redis-trib.rb \ && ruby redis-trib.rb create --replicas 1 \ '"$(for port in `seq 7000 7005`; do \ echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port} ' ' ; \ done)"
输入命令后,可以得到下面的信息说明集群成功了