〇、目标
1.在一台Centos7虚拟机中,以Docker搭建Redis集群(redis版本为5.0.x)。
2.六个节点,三主三从。
〇、准备
1.新建文件夹以放置各个节点的配置文件
2.编写各节点的配置文件
(1)从官网下载配置文件模板:
使用命令: wget http://download.redis.io/redis-stable/redis.conf -O <文件名>
例如 wget http://download.redis.io/redis-stable/redis.conf -O ./7001/redis7001.conf
(2)修改如下:
#bind 127.0.0.1 #注释掉
port 700* #6份配置文件,从7001到7006
appendonly yes #允许持久化
cluster-enable yes #开启集群
cluster-config-file nodes-7001.conf #存放各节点信息,会自动生成该文件
cluster-node-timeout 15000 #节点失效检测响应的超时时间
#各节点之间通信所用ip、端口与总线端口
cluster-announce-ip 192.168.22.130 #宿主机ip
cluster-announce-port 700* #6份配置文件,cong7001到7006
cluster-announce-bus-port 1700* #6份配置文件,从17001到17006
一、创建Redis镜像
1.使用外部配置文件在docker中创建redis镜像
(其他几个节点镜像以同样方式创建,注意修改名称与路径):
# 参数说明:
# --restart always (docker启动时,本镜像也自动启动)
# --name <容器名>
# --net <模式> (镜像的网络配置,host表示使用本地主机的网络)
# --privileged <true|false> (权限,true表示拥有root权限)
# -v <本地配置文件映射容器配置文件> -v <本地文件夹挂载到容器文件夹>
# -d (表示以守护进程方式启动容器)
# redis redis-server <文件名> (启动redis服务并制定配置文件)
# 注意:使用host模式的-p参数没用,不必指定
docker run --restart always --name redis-cluster-7001 --net host --privileged=true -v /usr/local/docker/redis-cluster/7001/redis7001.conf:/usr/local/docker/redis-cluster/7001/redis7001.conf -v /usr/local/docker/redis-cluster/7001/data:/usr/local/docker/redis-cluster/7001/data -d redis redis-server /usr/local/docker/redis-cluster/7001/redis7001.conf
2.查看镜像
三、创建集群
1.进入其中一个镜像:
2.创建集群
#因为网络配置是host模式,则 <宿主机ip>:<port> (6个节点)
redis-cli --cluster create 192.168.22.130:7001 192.168.22.130:7002 192.168.22.130:7003 192.168.22.130:7004 192.168.22.130:7005 192.168.22.130:7006 --cluster-replicas 1
3.测试
#进入其中一个节点
redis-cli -c -p 7001
#查看集群信息
cluster nodes
四、注意
1.ruby
在Redis5.0.x已经不使用ruby和redis-trib.rb创建集群了
2.创建集群过程中中断
再次创建时,会显示[ERR] Node <ip>:<port> is not empty .......
解决方法是删除镜像,重新创建镜像:
#停止镜像 docker stop <镜像名或镜像id> #删除镜像 #docker rm <镜像名或镜像id> #重新创建
3.创建集群时一直waiting......
原因可能是节点的网络配置(ip、端口等)出了问题。注意创建镜像时要使用--net参数,配置文件内的ip、端口要指定好,以及检查一下防火墙。
4.redis镜像的状态(status)一直显示restart
使用 docker logs <镜像名或镜像id> 命令查看出了什么问题