Redis

Docker redis5.0 集群(cluster)搭建

2018-10-10  本文已影响315人  LainCheung

在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
上一篇下一篇

猜你喜欢

热点阅读