前序操作
- 确保docker中已安装redis镜像,如果没有则需要先安装镜像
docker pull redis
- 在宿主机 /data/redis/conf下新建redis.conf配置文件, 内容加上appendonly yes 以保证数据的持久化
基于镜像创建redis实例并启动
docker run -d -p 6379:6379 --name redis \ #-p 6379:6379 容器内部端口与宿主机端口完成映射 -d 已守护进程模式启动(确保退出容器的时候依旧运行)
-v /data/redis/data:/data \ #将redis容器内的/data目录挂载到宿主机的/data/redis/data目录,保证数据的同步(双向同步)
-v /data/redis/conf/redis.conf:/etc/redis/redis.conf \ #完成配置文件的双向同步
-d redis redis-server /etc/redis/redis.conf # redis-server启动的时候已redis.conf中的配置启动
- 以交互模式进入容器内部
docker exec -it 容器id /bin/bash #-it: i为interactive t为ttl
- 进入命令行
redis-cli
- 输入ping 返回pong就没问题了
启动redis容器
这里演示启动六个容器,遵循3主3从模式,命令如下:
docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis --cluster-enabled yes --appendonly yes --port 6386
–net host 使用宿主机的ip和端口(默认)
–privileged=true 相当于拥有宿主机root用户权限
redis redis镜像
键入docker ps 如果显示如下,则启动成功
构建集群
- 进入任何一个redis容器,比如进入node-1容器
docker exec -it redis-node-1 /bin/bash
- 输入以下命令构建集群
redis-cli --cluster create 1.117.164.248(ip地址):6381(端口号) 1.117.164.248:6382 1.117.164.248:6383 1.117.164.248:6384 1.117.164.248:6385 1.117.164.248:6386 --cluster-replicas 1
- 出现All 16384 slots covered则是成功了,redis随机选择三主三从
注意:如果输入yes一直处于等待状态,那就看一下自己的宿主机是不是云服务器,如果是则需要开启防火墙(安全组),允许端口能进行访问,六个节点需要允许访问12个端口,比如针对node-1节点,需要开启6381端口和6381+10000端口,也就是16381端口的访问,全都设置完后就可以了
查看集群状态
- 随便进入一个docker容器,输入cluster info,可查看集群信息
docker exec -it redis-node-1 /bin/bash
redis-cli -p 6381 #不指定端口会进入6379,就不是集群环境了
cluster info
返回结果如下:
2. 输入cluster nodes,可查看集群与结点的对应关系,返回结果如下:
主节点:b8a6c8bd315677a6bba687270751c48982bc86d9
从节点:898c6ac7d12bcdf98166c67c2b576f25cb41987d
主节点:fb334a5774b0be37e7668fc64ece38d14aa25d6f
从节点:106fa0b367105483de81a6a9e1539a39e8726cb9
主节点:019a92c6bc2a1ba3c50f5f54dda0406854c1ec4a
从节点:85c015a280e509496e39526bbb5748adb4205c93