1,装镜像
docker pull redis
2,宿主机创建配置文件
1,在 /home 下新建 redis-cluster 文件夹,然后创建 redis-cluster.tmpl 文件,文件内容如下
port ${PORT}
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.1.157#这是服务器公网地址
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
3,创建自定义docker net
docker network create redis-net
4,在/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配置文件
5, 创建6个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
注意创建redis容器的时候添加了两个端口映射,一个普通的端口的访问端口映射,一个是总线端口映射,这两个端口都应该添加到安全组。
6,查看docker容器 ip
docker inspect redis-7000 redis-7001 redis-7002 redis-7003 redis-7004 redis-7005
| grep IPAddress
7,随便进入一个容器
docker
exec -it redis-7000
bash
8,执行命令
/usr/local/bin/redis-cli --cluster create \
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 \
--cluster-replicas 1
以上ip为容器在docker内的ip
6,常见问题
1)redis创建集群时显示错误: [ERR] Node xxx is not empty. Either the node already knows other no…
这是由于上次redis集群没有配置成功,生成了每个节点的配置文件和db的备份文件,所以才会产生这个错误。
解决办法:
1、使用redis-cli -c -h -p登录每个redis节点,使用以下命令
flushdb cluster reset