1. 创建redis镜像
mkdir /opt/docker_redis_cluster
cd /opt/docker_redis_cluster
wget http://download.redis.io/releases/redis-4.0.11.tar.gz
tar xvzf redis-4.0.11.tar.gz
cd redis-4.0.11
make
2.修改redis配置文件
vim /opt/docker_redis_cluster/redis-4.0.11/redis.conf
# 只修改其中的内容
bind 0.0.0.0 #修改bindip 使其他用户可访问
daemonize no #关闭守护进程
requirepass 123456 #添加密码
masterauth 123456 #添加主从连接密码
logfile "/var/log/redis/redis-server.log" #设置日志路径
cluster-enabled yes #配置集群相关信息
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
3. 制作镜像
vim /opt/docker_redis_cluster/Dockerfile
# Redis
# Version 4.0.11
FROM centos:7
ENV REDIS_HOME /usr/local
ADD redis-4.0.11.tar.gz / # 本地的redis源码包复制到镜像的根路径下.
RUN mkdir -p $REDIS_HOME/redis # 创建安装目录
ADD redis-4.0.11/redis.conf $REDIS_HOME/redis/ # 将一开始编译产生并修改后的配置复制到安装目录
RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
RUN yum -y update # 更新yum源
RUN yum install -y gcc make # 安装编译需要的工具
WORKDIR /redis-4.0.11
RUN make
RUN mv /redis-4.0.11/src/redis-server $REDIS_HOME/redis/ # 只保留redis-server
WORKDIR /
RUN rm -rf /redis-4.0.11 # 删除解压文件
RUN yum remove -y gcc make #删除多余的gcc跟make
VOLUME ["/var/log/redis"] # 添加数据卷
EXPOSE 6379 # 暴露6379端口
cd /opt/docker_redis_cluster/
docker build -t lyw/docker_redis_cluster .
4. 创建集群节点镜像
mkdir /opt/docker_redis_nodes
vim /opt/docker_redis_nodes/Dockerfile
# Redis Node
# Version 4.0.11
FROM lyw/docker_redis_cluster:latest
# MAINTAINER_INFO
MAINTAINER nestor nestor.yang@duxes.cn
ENTRYPOINT ["/usr/local/redis/redis-server", "/usr/local/redis/redis.conf"]
cd /opt/docker_redis_nodes/
docker build -t lyw/docker_redis_nodes .
# 查看
docker images
5. 启动redis容器
docker run -d --name redis-6380 -p 6380:6379 lyw/docker_redis_nodes
docker run -d --name redis-6381 -p 6381:6379 lyw/docker_redis_nodes
docker run -d --name redis-6382 -p 6382:6379 lyw/docker_redis_nodes
docker run -d --name redis-6383 -p 6383:6379 lyw/docker_redis_nodes
docker run -d --name redis-6384 -p 6384:6379 lyw/docker_redis_nodes
docker run -d --name redis-6385 -p 6385:6379 lyw/docker_redis_nodes
6.连接redis
# 宿主机安装redis
yum install y redis
# 获取容器ip
docker ps
docker inspect 8f82b38d45ad bc7a8ef02c14 0d7aed712a10 94076bca5ee1 87a8e8025f04 d6cb77761db6 |grep IPA
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAMConfig": null,
"IPAddress": "172.17.0.2",
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.3",
"IPAMConfig": null,
"IPAddress": "172.17.0.3",
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.4",
"IPAMConfig": null,
"IPAddress": "172.17.0.4",
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.5",
"IPAMConfig": null,
"IPAddress": "172.17.0.5",
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.6",
"IPAMConfig": null,
"IPAddress": "172.17.0.6",
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.7",
"IPAMConfig": null,
"IPAddress": "172.17.0.7",
# 连接
[root@jojo redis]# redis-cli -h 172.17.0.2
172.17.0.2:6379>
7.部署集群
# 关联集群
172.17.0.2:6379> CLUSTER MEET 172.17.0.3 6379
OK
172.17.0.2:6379> CLUSTER MEET 172.17.0.4 6379
OK
172.17.0.2:6379> CLUSTER MEET 172.17.0.5 6379
OK
172.17.0.2:6379> CLUSTER MEET 172.17.0.6 6379
OK
172.17.0.2:6379> CLUSTER MEET 172.17.0.7 6379
OK
# 查看集群
172.17.0.6:6379> CLUSTER NODES
57c264732c27d944b531420b26a5249eab588f55 172.17.0.4:6379@16379 master - 0 1596905575595 2 connected
1eb282b2dd51723a31d230987afc8c5633a8eadd 172.17.0.6:6379@16379 myself,master - 0 1596905575000 4 connected
f23f85f71810cd1bd8d22ce73717d9940cc3a42b 172.17.0.2:6379@16379 master - 0 1596905574000 0 connected
731d616c31b967a56238be82be5243b7440a42cc 172.17.0.3:6379@16379 master - 0 1596905576604 1 connected
782635fc70af0041cafc07491167092049d61a4e 172.17.0.5:6379@16379 master - 0 1596905574587 3 connected
b7483dee44daa99408716d77a73266f017ac0bfb 172.17.0.7:6379@16379 master - 0 1596905574000 5 connected
172.17.0.6:6379>
8. 分配槽位
| 主节点 |
副本 |
| 172.17.0.2 |
172.17.0.5 |
| 172.17.0.3 |
172.17.0.6 |
| 172.17.0.4 |
172.17.0.7 |
[root@jojo redis]# redis-cli -p 6379 -h 172.17.0.2 CLUSTER ADDSLOTS {0..5461}
OK
[root@jojo redis]# redis-cli -p 6379 -h 172.17.0.3 CLUSTER ADDSLOTS {5462..10922}
OK
[root@jojo redis]# redis-cli -p 6379 -h 172.17.0.4 CLUSTER ADDSLOTS {10923..16383}
OK
# 插入数据测试
vim data.sh
#!/bin/bash
for i in {1..1000};do
redis-cli -c -p 6379 -h 172.17.0.2 set k${i} v${i}
done
[root@jojo ~]# redis-cli -h 172.17.0.2
172.17.0.2:6379> DBSIZE
(integer) 341
172.17.0.2:6379>
[root@jojo ~]# redis-cli -h 172.17.0.3
172.17.0.3:6379> DBSIZE
(integer) 332
172.17.0.3:6379>
[root@jojo ~]# redis-cli -h 172.17.0.4
172.17.0.4:6379> DBSIZE
(integer) 327
172.17.0.4:6379>
9.副本节点
# 查看节点
172.17.0.4:6379> CLUSTER NODES
57c264732c27d944b531420b26a5249eab588f55 172.17.0.4:6379@16379 myself,master - 0 1596906388000 2 connected 10923-16383
f23f85f71810cd1bd8d22ce73717d9940cc3a42b 172.17.0.2:6379@16379 master - 0 1596906388000 0 connected 0-5461
782635fc70af0041cafc07491167092049d61a4e 172.17.0.5:6379@16379 master - 0 1596906387000 3 connected
b7483dee44daa99408716d77a73266f017ac0bfb 172.17.0.7:6379@16379 master - 0 1596906389697 5 connected
1eb282b2dd51723a31d230987afc8c5633a8eadd 172.17.0.6:6379@16379 master - 0 1596906388689 4 connected
731d616c31b967a56238be82be5243b7440a42cc 172.17.0.3:6379@16379 master - 0 1596906387683 1 connected 5462-10922
# 配置主从
172.17.0.5 的 172.17.0.2的从库
172.17.0.6 的 172.17.0.3的从库
172.17.0.7 的 172.17.0.4的从库
[root@jojo ~]# redis-cli -h 172.17.0.5
172.17.0.5:6379> CLUSTER REPLICATE f23f85f71810cd1bd8d22ce73717d9940cc3a42b
[root@jojo ~]# redis-cli -h 172.17.0.6
172.17.0.6:6379> CLUSTER REPLICATE 731d616c31b967a56238be82be5243b7440a42cc
[root@jojo ~]# redis-cli -h 172.17.0.7
172.17.0.7:6379> CLUSTER REPLICATE 57c264732c27d944b531420b26a5249eab588f55
172.17.0.7:6379> CLUSTER NODES
57c264732c27d944b531420b26a5249eab588f55 172.17.0.4:6379@16379 master - 0 1596907035095 2 connected 10923-16383
1eb282b2dd51723a31d230987afc8c5633a8eadd 172.17.0.6:6379@16379 slave 731d616c31b967a56238be82be5243b7440a42cc 0 1596907034000 4 connected
f23f85f71810cd1bd8d22ce73717d9940cc3a42b 172.17.0.2:6379@16379 master - 0 1596907031000 0 connected 0-5461
782635fc70af0041cafc07491167092049d61a4e 172.17.0.5:6379@16379 slave f23f85f71810cd1bd8d22ce73717d9940cc3a42b 0 1596907033080 3 connected
b7483dee44daa99408716d77a73266f017ac0bfb 172.17.0.7:6379@16379 myself,slave 57c264732c27d944b531420b26a5249eab588f55 0 1596907032000 5 connected
731d616c31b967a56238be82be5243b7440a42cc 172.17.0.3:6379@16379 master - 0 1596907034088 1 connected 5462-10922