在Docker库获取镜像
docker pull redis
// 5.0以下需要ruby环境
docker pull ruby
查看已经安装的镜像
docker images
创建redis容器
我的是多台服务器,在另外那台同样执行以下操作,单台的话下面出现的9001-9003端口改成9001-9006
1.创建redis配置文件(redis-cluster.tmpl)
在系统根目录/mnt目录下创建文件夹redis-cluster,并创建一个文件redis-cluster.tmpl,然后把以下内容复制进去。
port ${PORT}
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip XX.XXX.XX.XX //自己服务器内网IP
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
2.创建自定义network
docker network create redis-net
3.进入/mnt/redis-cluster目录,生成conf、data文件夹和配置信息
for port in `seq 9001 9003`; do \
mkdir -p ./${port}/conf \
&& PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
&& mkdir -p ./${port}/data; \
done
共生成3个文件夹,从9001到9003,每个文件夹下包含data和conf文件夹,同时conf里面有redis.conf配置文件
4.创建redis容器
for port in `seq 9001 9003`; do \
docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \
-v /mnt/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf:rw \
-v /mnt/redis-cluster/${port}/data:/data:rw \
--restart always --name redis-${port} --net redis-net \
--sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; \
done
至此,容器生成成功,通过命令docker ps可查看刚刚生成容器信息,两台服务器总共6个容器。
5.启动集群
// 5.0.2(最新版好像不能直接exec -it,找了半天,最后在官网找到下面命令进行的链接。真的服。。。。)
docker run -it --link redis-9001:redis --net redis-net --rm redis redis-cli --cluster create XX.XXX.XX.XX:9001 XX.XXX.XX.XX:9002 XX.XXX.XX.XX:9003 XX.XXX.XX.XX:9004 XX.XXX.XX.XX:9005 XX.XXX.XX.XX:9006 --cluster-replicas 1
// 5.0
docker exec -it redis容器ID redis-cli --cluster create XX.XXX.XX.XX:9001 XX.XXX.XX.XX:9002 XX.XXX.XX.XX:9003 XX.XXX.XX.XX:9004 XX.XXX.XX.XX:9005 XX.XXX.XX.XX:9006 --cluster-replicas 1
// 5.0以下
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 XX.XXX.XX.XX:9001 XX.XXX.XX.XX:9002 XX.XXX.XX.XX:9003 XX.XXX.XX.XX:9001 XX.XXX.XX.XX:9002 XX.XXX.XX.XX:9003';
至此,集群搭建成功。
如果一直Waiting for the cluster to join ......
大部分是端口问题,除了开放集群的端口还要开放集群端口+10000端口来保证集群之间的通信
集群密码
cd /mnt/redis-cluster;
chmod 777 9001/conf/redis.conf; //配置文件授权
...
chmod 777 9003/conf/redis.conf; //两台配置文件都需要授权
//链接redis
docker ps -a //查看容器ID
//5.0.2
docker run -it --link redis-9001:redis --net redis-net --rm redis redis-cli -h XX.XXX.XX.XX -c -p 9001
//5.0(这里设置的是单台redis的密码,所以需要每台redis都要进入执行以下操作设置密码)
docker exec -it redis容器ID redis-cli -h XX.XXX.XX.XX -c -p 9001
//设置密码
config set masterauth 123456
config set requirepass 123456
auth 123456
config rewrite